本文由华为云容器Istio团队撰稿,未经允许谢绝转载

摘要

使用 Istio 可以很方便地实现微服务间的访问控制。本文演示了使用 Denier 适配器和黑白名单两种方法。

使用场景

有时需要对微服务间的相互访问进行控制,比如使满足某些条件(比如版本)的微服务能够(或不能)调用特定的微服务。

环境准备

l 在 Kubernetes 集群上部署 Istio

l 部署 Bookinfo 示例应用

l 配置 Bookinfo 应用各个微服务的 destinationrule 和 virtualservice。其中 reviews 服务的 destinationrule 和 virtualservice 配置如下:

按上图配置后,对于 reviews 服务的请求,来自用户 “kokokobe” 的请求会被路由到v2 版本,其他用户的请求会被路由到 v3 版本。

使用 Denier 适配器实现简单的访问控制

使用 Istio 对微服务进行访问控制时,可以使用 Mixer 中的任何属性。这是一种简单的访问控制,实现基础是通过 Mixer 选择器拒绝某些条件下的请求。

比如,上文所述的 Bookinfo 应用中的 ratings 服务会被多个版本的 reviews 服务访问。下面的示例中我们将会切断来自 v3 版本的 reviews 服务对 ratings 服务的调用。

1. 用浏览器打开 Bookinfo 的 productpage(http://$GATEWAY_URL/productpage)

如上图所示,如果用 “kokokobe” 的用户登录,能看到每条 review 下面的黑色星星,说明此时 ratings 服务被 v2 版本的 reviews 服务调用。

从上面两张图可以看出,如果使用其他用户登录(或未登录),能看到每条 review 下面的红色星星,说明此时 ratings 服务被 v3 版本的 reviews 服务调用。

2. 创建 denier 适配器,拒绝来自 v3 版本的 reviews 服务对 ratings 服务的调用

编辑 mixer-rule-deny-label.yaml 内容如下:

其中定义了一条名为 denyreviewsv3 的规则,一个 denier 类型的 handler,一个checknothing 类型的模板。

在 denyreviewsv3 规则中,方框内的条件表达式匹配的条件是:来自 reviews 服务,version 为 v3 ,目标为 ratings 服务的请求。这条规则使用 denier 适配器拒绝来自 v3 版本的 reviews 服务的请求。

这个 denier 适配器会拒绝符合上述规则的请求。可以预先指定 denier 适配器的状态码和消息,如方框中所示。

然后执行如下命令创建上述规则的 denier 适配器:

3. 在浏览器中刷新 productpage 页面

如果已经登出或者使用不是 “kokokobe” 的用户身份登录,不再看到红色星星,因为v3版本的 reviews 服务对 ratings 服务的访问已经被拒绝了。

相反,如果使用 “kokokobe” 用户登录,仍然能够看到黑色星星。因为该用户使用的是 v2 版本的 reviews 服务,不符合拒绝的条件。

通过 List 适配器实现黑白名单

Istio 也支持基于属性的黑名单和白名单。下面的白名单配置和上一节的 denier 配置是等价的,拒绝来自 v3 版本的 reviews 服务的请求。

1. 删除上一节配置的 denier 规则

2. 在登出状态下浏览 Bookinfo 的 productpage(http://$GATEWAY_URL/productpage)

此时能看到红星图标。在完成下述步骤之后,只有在使用 “kokokobe” 的身份登录之后才能看到星形图标。

3. 创建包含 v2 版本白名单的 list 适配器

编辑 whitelist-handler.yaml 内容如下:

通常会在外部维护黑白名单的列表,然后指定 providerUrl 参数进行异步获取。在这个例子中,我们使用 overrides 字段提供一个静态的黑白名单列表。

然后运行如下命令创建 list 适配器:

4. 创建一个 listentry 模板的实例

listentry 模板可以用来判别一个字符串是否存在于一个列表中,本例中我们使用它来判别版本标签是否存在于白名单中。

编辑 appversion-instance.yaml 内容如下:

然后运行如下命令:

5. 为 ratings 服务启用 whitelist 检查功能

编辑 checkversion-rule.yaml 内容如下:

然后运行如下命令:

6. 在浏览器中刷新 productpage 页面

如果已经登出或者使用不是 “kokokobe” 的用户身份登录,看不到星形图标;如果使用 “kokokobe” 用户登录,仍然能够看到黑色星星。

总结

通过上述示例,可以发现使用 Istio 实现微服务间的访问控制非常方便。既可以使用denier 适配器实现简单的访问控制,也可以通过 list 适配器实现较复杂的黑白名单。

本文由华为云容器Istio团队撰稿,未经允许谢绝转载

dbnetlib不存在或拒绝访问_idou老师教你学Istio 16:如何用 Istio 实现微服务间的访问控制...相关推荐

  1. httos双向认证配置_idou老师教你学Istio 15:Istio实现双向TLS的迁移

    本文由华为云容器Istio团队撰稿,未经允许谢绝转载. 众所周知,HTTPS是用来解决 HTTP 明文协议的缺陷,在 HTTP 的基础上加入 SSL/TLS 协议,依靠 SSL 证书来验证服务器的身份 ...

  2. idou老师教你学Istio 07: 如何用istio实现请求超时管理

    在前面的文章中,大家都已经熟悉了Istio的故障注入和流量迁移.这两个方面的功能都是Istio流量治理的一部分.今天将继续带大家了解Istio的另一项功能,关于请求超时的管理. 首先我们可以通过一个简 ...

  3. idou老师教你学Istio06: 如何用istio实现流量迁移

    流量迁移是流量管理的一个重要功能.istio提供的流量管理功能将流量从基础设施扩展中解耦,支持动态请求路由,故障注入.超时重试.熔断和流量迁移等.流量迁移的主要目的是将流量从微服务的某一版本的逐步迁移 ...

  4. idou老师教你学istio:监控能力介绍

    经过了一年多的开发和测试,Istio于北京时间7月31日发布了1.0版本,并且宣布1.0版本已经可以成熟的应用于生产环境.对于istio的各项主要功能,之前的文章已经介绍的非常详细,并且还会有更多的文 ...

  5. idou老师教你学Istio 04:Istio性能及扩展性介绍

    Istio的性能问题一直是国内外相关厂商关注的重点,Istio对于数据面应用请求时延的影响更是备受关注,而以现在Istio官方与相关厂商的性能测试结果来看,四位数的qps显然远远不能满足应用于生产的要 ...

  6. idou老师教你学Istio 27:解读Mixer Report流程

    1.概述 Mixer是Istio的核心组件,提供了遥测数据收集的功能,能够实时采集服务的请求状态等信息,以达到监控服务状态目的. 1.1 核心功能 •前置检查(Check):某服务接收并响应外部请求前 ...

  7. idou老师教你学Istio: 如何用Istio实现K8S Egress流量管理

    本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio 集群中的客户端,目前有两种方案: ...

  8. group policy client 服务未能登录拒绝访问解决方案

    [b]group policy client 服务未能登录拒绝访问解决方案[/b] 问题介绍: win7系统中出现 group policy client 服务未能登录.拒绝访问.造成无法正常登录帐户 ...

  9. 孢子java_孢子框架-接口访问层、ESB、微服务API GateWay对比

    标签: 如果从百度去搜索"接口访问层"你会发现主要是.NET里面的技术,叫做IDAL,其实是数据访问层接口.它的主要作用是兼容多种数据库.比如你定义一个标准接口,然后实现改接口的S ...

最新文章

  1. mysql metadata lock(一)
  2. 围观窗体与组件03 - 零基础入门学习Delphi25
  3. 若依集成CIM(即时推送系统)实现将服务端修改为SpringBoot+Vue前后端分离版(文末见代码下载)
  4. Rabbit寻宝记(2)
  5. php定义一个名为Vehicles,php的扩展和嵌入--c++类的扩展开发
  6. javascript中alert函数的替代方案,一个自定义的对话框的方法(引用)
  7. CentOS设置服务开机自动启动【转】
  8. 贪吃蛇博弈算法python_算法应用实践:如何用Python写一个贪吃蛇AI
  9. 绩效管理KPI指标体系设计:142页KPI设计思路与实施实践
  10. 加密货币交易所Coinbase在私募股票市场中估值达900亿美元
  11. SEM搜索引擎竞价全方位系统网课-优就业-专题视频课程
  12. 数据通信与计算机网络参考文献,通信工程论文参考文献
  13. selenium爬取新浪滚动新闻
  14. 计算机硬盘怎么设置ntfs,Windows7系统如何把磁盘格式转换为NTFS的方法
  15. Matlab裁剪图像
  16. 拥挤城市小程序如何玩转会展营销?
  17. 什么是经销商管理系统?企业经销商管理系统优势有哪些?
  18. 欢聚时代(YY)面试
  19. 诗琳通:中泰友谊使者,曾在汶川地震时曾为汶川灾区捐款1100万
  20. 小学语文三年级阅读理解专项练习附答案~寓言二则

热门文章

  1. linux QT 程序自启动,Qt Windows下开机自动启动自己的程序
  2. 像素越多越好?像元的面积越小越好?
  3. QT学习笔记之对话框
  4. 你了解的工厂模式可能有误
  5. 访问通信录 适配iOS7
  6. javascript 自动化单元测试
  7. [转]php连接postgresql
  8. 8.2.3多态性 第8章 面向对象编程简介
  9. linux 下tomcat开机自启动
  10. 定制软件项目经理应该善于说“NO”