为了充分利用服务网格的所有特性,服务网格中ACK集群的应用Pod必须包含一个Sidecar代理。除了手动注入方式外,通常建议启用自动注入的方式来简化部署。本文介绍如何使用多种方式开启自动注入。

背景信息

ASM默认提供了一个Webhook控制器,可以将Sidecar代理自动添加到可用的Pod中。Sidecar代理的详细介绍请参见设置 Sidecar
说明 请确保ASM实例的Istio为v1.6.8.17及以上版本。
  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格管理页面右上角单击功能设置
  5. 功能设置更新对话框中单击展开高级选项,根据实际需求选择开启自动注入的方式,然后单击确定
    注意 Pod中的注解具有比标签选择器更高的优先级。如果一个Pod有sidecar.istio.io/inject: "true/false" 的标记,那么将先被优先执行。自动注入的优先级的顺序为通过Pod Annotations实现自动注入> 其他自动注入的配置>为所有命名空间开启自动注入功能。
    自动注入
    • 为所有命名空间开启自动注入功能。
      • 默认不启用为所有命名空间开启自动注入功能,这时只有当命名空间中设置了istio-injection=enabled标签之后,才会启用自动注入功能。
      • 启用为所有命名空间开启自动注入功能,除了istio-system、kube-system之外的命名空间,只要没有设置 istio-injection=disabled 标签就默认启用自动注入功能。
    • 通过Pod Annotations实现自动注入Sidecar。
      • 不启用通过Pod Annotations实现自动注入Sidecar,默认不会将Sidecar注入到Pod中。只有在Pod模板规范中添加 sidecar.istio.io/inject 的值为true时,才会启用自动注入功能。
      • 启用通过Pod Annotations实现自动注入Sidecar,Sidecar将默认注入到Pod中。只有在Pod模板规范中添加 sidecar.istio.io/inject的值为false时,才会禁用自动注入功能。
    • 其他自动注入的配置。
      有些情况下无法控制Pod的创建,可以根据Pod上的标签,指示是否需要在这些Pod中注入Sidecar。
      注意 以下配置内容格式为JSON字符串。
      • 启用其他自动注入的配置后,在文本框中输入alwaysInjectSelector的字段,将会把Sidecar注入匹配标签选择器的Pod中。
        {
          "alwaysInjectSelector": [
            {
              "matchExpressions": [
                {
                  "key": "key1",
                  "operator": "Exists"
                }
              ]
            },
            {
              "matchExpressions": [
                {
                  "key": "key2",
                  "operator": "Exists"
                }
              ]
            }
          ]
        }
      • 启用其他自动注入的配置后,在文本框中输入neverInjectSelector的字段,将总是不会将Sidecar注入匹配标签选择器的Pod中。
        {
          "neverInjectSelector": [
            {
              "matchExpressions": [
                {
                  "key": "key3",
                  "operator": "Exists"
                }
              ]
            },
            {
              "matchExpressions": [
                {
                  "key": "key4",
                  "operator": "Exists"
                }
              ]
            }
          ]
        }    
      • 启用其他自动注入的配置后,您还可以在文本框中输入其他配置参数,包括注入的其他注解injectedAnnotations、SidecarInjector部署的副本数replicaCount、SidecarInjector部署的节点选择nodeSelector。
        {
          "replicaCount": 2,
          "injectedAnnotations": {
            "test/istio-init": "runtime/default",
            "test/istio-proxy": "runtime/default"
          },
          "nodeSelector": {
             "beta.kubernetes.io/os": "linux"
          }   
        }