配置基础访问控制

    • 在Kubernetes上遵循安装指南部署 Istio。
    • 部署 示例应用。
    • 设置基于版本的应用路由,用户“jason”对reviews服务的访问会被指向 v2 版本,其他用户则会访问到 v3 版本。

    借助Istio能够根据Mixer中的任何属性来对一个服务进行访问控制。Mixer Selector可以进行对服务请求进行有条件的拒绝,这就构成了访问控制能力的基础。

    BookInfo 示例应用中的ratings服务会被几个不同版本的reviews服务所访问。我们尝试切断reviews服务的v3版本对ratings服务的访问。

    1. 用浏览器访问BookInfo的productpage页面(

      如果使用 “jason” 用户登录,会看到ratings服务展示出的星星图标是黑色的,这证明被ratings服务是由 “v2” 版本的reviews服务调用的;如果登出或者使用其他用户登录,就会看到红色的星星,这代表 “v3” 版本的reviews服务在调用ratings服务。

    2. 显式的拒绝从v3版本reviews服务到ratings的访问。

      使用下列命令来创建Handler实例并拒绝规则:

      1. istioctl create -f samples/bookinfo/kube/mixer-rule-deny-label.yaml

      会产生类似的输出:

      1. Created config denier/default/denyreviewsv3handler at revision 2882105
      2. Created config checknothing/default/denyreviewsv3request at revision 2882106
      3. Created config rule/default/denyreviewsv3 at revision 2882107

      注意denyreviewsv3规则:

      这一规则使用denier适配器来拒绝源于v3版本的reviews服务的请求。这一适配器会使用预置的状态码和消息来拒绝服务请求。状态码和消息的定义来自于
      denier适配器的配置。

    3. 在浏览器中刷新productpage

      如果没有登录、或使用 “jason” 之外的用户登录,因为ratings服务拒绝了来自reviews:v3的请求。

      而如果使用 “jason” 的身份登录(会使用reviews:v2),就会看到黑色的星星了。

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

    1. 删除上一节加入的配置:

    2. 验证未登录情况下对productpage的访问(

      但是在执行下面的步骤之后,只有使用 “jason” 登录才能看到星星。

    3. 创建listchecker适配器,其中包含v1v2的列表。把下面的 YAML 文件保存为
      whitelist-handler.yaml

      1. kind: listchecker
      2. metadata:
      3. name: whitelist
      4. spec:
      5. # providerUrl: ordinarily black and white lists are maintained
      6. # externally and fetched asynchronously using the providerUrl.
      7. blacklist: false

      然后运行下列命令:

      1. istioctl create -f whitelist-handler.yaml
    4. 创建一个listentry模板的实例,用于解析版本标签。把下面的 YAML 代码保存为
      appversion-instance.yaml

      1. apiVersion: config.istio.io/v1alpha2
      2. kind: listentry
      3. metadata:
      4. name: appversion
      5. spec:
      6. value: source.labels["version"]
    5. 启用whitelist来检查ratings服务。

      创建checkversion-rule.yaml

      1. apiVersion: config.istio.io/v1alpha2
      2. kind: rule
      3. name: checkversion
      4. spec:
      5. match: destination.labels["app"] == "ratings"
      6. actions:
      7. - handler: whitelist.listchecker
      8. instances:
      9. - appversion.listentry

      并运行下列命令:

      1. istioctl create -f checkversion-rule.yaml
    6. 验证,当未登录时访问Bookinfo productpagehttp://$GATEWAY_URL/productpage),则看不到星星。

      验证当用 “jason” 登录后,就会看到黑色的星星。

    • 删除 Mixer 配置:

      1. istioctl delete -f checkversion-rule.yaml
      2. istioctl delete -f whitelist-handler.yaml
    • 删除应用路由规则:

    • 如果不准备进行下面的任务,可以参考进行善后工作。