开放策略代理(OPA)插件通过为应用注入OPA Sidecar代理来定义访问控制策略。ASM提供了OPA注入范围控制功能,启用该功能后,仅添加了opa-istio-injection=enabled标签的命名空间下的Pod会注入OPA Sidecar代理。本文介绍如何控制OPA Sidecar代理注入范围。

前提条件

  • 已创建ASM实例,且ASM实例为v1.12.4.19或以上版本。具体操作,请参见创建ASM实例
  • 添加集群到ASM实例。具体操作,请参见添加集群到ASM实例
  • 已启用OPA插件。具体操作,请参见启用OPA插件
  • 已创建命名空间。具体操作,请参见管理命名空间。本文以创建default和develop命名空间为例。
  • 已在命名空间下部署应用。具体操作,请参见创建无状态工作负载Deployment。本文以在default命名空间下部署Nginx应用,在develop命名空间下部署Sleep应用为例。

背景信息

本文在启用OPA注入范围控制功能后,为default命名空间添加opa-istio-injection=enabled标签,develop命名空间则不添加opa-istio-injection=enabled标签,查看Nginx应用和Sleep应用是否都注入OPA Sidecar代理,从而验证控制OPA Sidecar代理注入范围是否成功。

步骤一:启用OPA注入范围控制功能

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 基本信息页面右上角单击功能设置
  5. 功能设置更新面板策略控制下选中启用OPA注入范围控制,单击确定

步骤二:为命名空间添加标签

以下介绍如何在容器服务控制台上为default命名空间添加opa-istio-injection=enabled标签,您也可以通过kubectl工具连接集群,然后执行以下命令,为命名空间添加标签。连接集群的具体操作,请参见通过kubectl工具连接集群
kubectl label namespace default opa-istio-injection=enabled --overwrite
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择命名空间与配额
  5. 命名空间页面单击default命名空间右侧操作列下的编辑
  6. 编辑命名空间对话框中设置变量名称为opa-istio-injection,变量值为enabled,单击添加,然后单击确定

步骤三:重启应用

通过删除Pod的方式使应用重启。重启应用后,会自动注入OPA Sideacr代理。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择工作负载 > 容器组
  5. 容器组页面顶部设置命名空间为default,单击Nginx应用Pod右侧操作列下的删除
    如果应用下有多个Pod,您需要删除多个Pod,使应用重启。

    待Pod状态由Terminating变为Running,说明Pod重启成功。

  6. 重复执行步骤5,重启Sleep应用的Pod。

步骤四:验证控制OPA注入范围是否成功

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,选择工作负载 > 容器组
  5. 查看Nginx和Sleep应用是否注入OPA Sidecar代理。
    • 容器组页面设置命名空间为default,单击Nginx应用的名称,在容器页签下可以看到opa-istio,说明Nginx应用注入OPA Sidecar代理。注入OPA
    • 容器组页面设置命名空间为develop,单击Sleep应用的名称,在容器页签下没有看到opa-istio,说明Sleep应用未注入OPA Sidecar代理。sleep

    通过以上操作,可以看到启用OPA注入范围控制功能后,添加opa-istio-injection=enabled标签的命名空间下的应用注入了OPA Sidecar代理,没有添加opa-istio-injection=enabled标签的命名空间下的应用未注入了OPA Sidecar代理,说明控制OPA注入范围成功。