为了充分利用服务网格ASM的所有特性,ASM管理的ACK集群中的Pod应用必须包含一个Sidecar代理。除了手动注入方式外,建议启用自动注入的方式来简化部署。本文介绍如何开启Sidecar自动注入。
功能介绍
ASM默认提供一个Webhook控制器(即Sidecar注入器),可以在集群中的Pod创建时,将Sidecar代理自动添加到可用的Pod中。您可以对Sidecar注入器使用的Sidecar注入策略以及Sidecar注入器本身的资源、副本数等属性进行配置。关于如何安装Sidecar代理,请参见安装Sidecar代理。
前提条件
已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
管理自动注入策略
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在注入策略配置页面的注入策略配置管理区域,配置自动注入策略。
只有当Pod同时匹配Pod所在命名空间标签匹配条件和Pod自身的标签/注解需要满足条件时,Pod才会被自动注入Sidecar。
匹配条件
说明
Pod所在命名空间的标签需要满足条件
Sidecar自动注入对Pod所在命名空间的标签的匹配条件。
包含 istio-injection: enabled:当Pod所在的命名空间包含istio-injection: enabled标签时,Pod匹配自动注入条件。
不包含 istio-injection: disabled:当Pod所在的命名空间不包含istio-injection: disabled标签时,Pod能够匹配自动注入条件。
Pod自身的标签/注解需要满足条件
Sidecar自动注入对Pod自身标签或注解的匹配条件。
不包含 sidecar.istio.io/inject: "false":当Pod不包含sidecar.istio.io/inject: "false"标签或注解时,Pod能够匹配自动注入条件。
包含 sidecar.istio.io/inject: "true":当Pod包含sidecar.istio.io/inject: "true"的标签或注解时,Pod匹配自动注入条件。
说明ASM实例版本为1.12以下,仅支持通过匹配Pod注解的方式进行自动注入。
ASM实例版本为1.12及以上,支持通过匹配Pod标签和匹配Pod注解两种方式进行自动注入。
标签的匹配优先级大于注解。例如,Pod同时带有sidecar.istio.io/inject: "true"的标签和sidecar.istio.io/inject: "false"的注解,Pod将被标记为含有sidecar.istio.io/inject: "true"标签,而不是sidecar.istio.io/inject: "false"注解。
(可选)在注入策略配置管理区域下方,单击展开高级选项,配置相关信息。
配置项
说明
注入Sidecar的Pod标签选择器(AlwaysInjectSelector)
AlwaysInjectSelector是一个可配置的Pod标签选择器。被AlwaysInjectSelector选中的Pod,将被视为包含sidecar.istio.io/inject:"true"标签或注解。
不注入Sidecar的Pod标签选择器(NeverInjectSelector)
NeverInjectSelector是一个可配置的Pod标签选择器。被NeverInjectSelector选中的Pod,将被视为包含sidecar.istio.io/inject:"false"标签或注解。
说明AlwaysInjectSelector与NeverInjectSelector都是Pod标签选择器,配置方法相同,都分为多行,每一行是一个标签选择表达式,Pod的标签只要匹配其中任意一个标签选择表达式,就可以被Pod标签选择器选中。
每个标签选择表达式包含以下三个部分:
键:表达式匹配时所使用的Pod标签中的键。
操作:表达式匹配Pod标签的操作,可以选择以下四种操作:
In:表达式根据Pod的标签值是否在给定的值中来判断是否匹配Pod。
NotIn:表达式根据Pod的标签值是否不在给定的值中来判断是否匹配Pod。
Exists:表达式根据Pod中给定的键是否存在来判断是否匹配Pod。
DoesNotExist:表达式根据Pod中给定的键是否不存在来判断是否匹配Pod。
值:如果表达式的操作选择In或NotIn,可以在此设定一系列的值,以判断是否匹配Pod。
在页面下方,单击更新设置。
管理Sidecar注入器配置
Sidecar注入器是负责自动注入Sidecar代理的组件服务(并非Sidecar代理)。您可以调整Sidecar注入器组件的资源设置与副本数等配置,以提高Sidecar注入服务在同时注入大量Pod时的可用性。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在注入策略配置页面的Sidecar注入器配置管理区域,配置Sidecar注入器。
配置项
说明
Sidecar注入器资源配置
配置Sidecar注入器容器的资源限制和所需资源。
资源限制:配置Sidecar注入器容器的CPU和内存资源限制,其中CPU资源限制的单位为核(Core),内存资源限制的单位为MiB。
所需资源:配置Sidecar注入器容器的CPU和内存所需资源,其中CPU所需资源的单位为核(Core),内存所需资源的单位为MiB。
Pod副本数
配置Sidecar注入器Pod的副本数量。
说明增加Sidecar注入器的副本数量可以提高Sidecar注入服务在同时注入大量Pod时的可用性。推荐您将Pod副本数设定为2个或以上。
重写健康检查
是否在注入时为Pod重写健康检查。您可以参考为网格内应用开启健康检查重定向,确定是否需要启用健康检查重写。
Sidecar-injector部署节点选择
通过匹配标签的方式选择Sidecar注入器Pod部署的节点。
单击新增匹配标签,输入数据面集群节点标签的名称和值,匹配具体的部署节点。
在页面下方,单击更新设置。
示例一:为命名空间下的指定Pod关闭自动注入,其他Pod开启自动注入
配置自动注入策略。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在注入策略配置页面的注入策略配置管理区域,配置相关信息。
以下配置表示只要命名空间带有istio-injection: enabled标签,命名空间内的Pod就都会被自动注入Sidecar,除非Pod带有sidecar.istio.io/injection: "false"的标签或注解。
配置项
说明
Pod所在命名空间的标签需要满足条件
选择包含istio-injection:enabled。
Pod自身的标签/注解需要满足条件
选择不包含sidecar.istio.io/injection: "false"。
创建全局命名空间,为命名空间开启自动注入。
在网格详情页面左侧导航栏,选择 ,然后在右侧页面,单击新建。
在新建命名空间面板,输入命名空间的名称(本示例为test1),在标签右侧单击添加,配置名称为istio-injection,值为enabled,然后单击确定。
在页面上方,单击同步自动注入至Kubernetes集群,将全局命名空间同步至数据面Kubernetes集群。
创建应用。
在数据平面ACK集群的test1命名空间下创建details应用。具体操作,请参见部署应用到ASM实例。
验证应用的Pod是否注入Sidecar代理。
- 登录容器服务管理控制台,在左侧导航栏选择集群。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面顶部,设置命名空间为test1,单击details应用名称。
在容器组页签下可以看到Pod包含Proxy镜像,表明自动注入Sidecar代理成功。
在Pod中添加标签,使Pod关闭自动注入。
- 登录容器服务管理控制台,在左侧导航栏选择集群。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面的test1命名空间下,在details应用右侧的操作列,单击更多 > 查看Yaml。
在编辑 YAML对话框,修改YAML配置,然后单击更新。
ASM版本为1.12.4及以上:在labels参数下添加Key为
sidecar.istio.io/inject
、Value为"false"
的标签,即sidecar.istio.io/inject: 'false'
。ASM版本为1.12.4以下:在annotations参数下添加Key为
sidecar.istio.io/inject
、Value为"false"
的注解,即sidecar.istio.io/inject: "false"
。
验证test1命名空间开启自动注入的情况下,details服务的Pod不进行自动注入是否成功。
- 登录容器服务管理控制台,在左侧导航栏选择集群。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面顶部,设置命名空间为test1,单击details应用名称。
在容器组页签下可以看到Pod不包含Proxy镜像,表明在test1命名空间开启自动注入的情况下,details服务的Pod不进行自动注入成功。
示例二:以Pod为单位,单独为Pod设置自动注入策略
若您不想以命名空间为维度批量设置自动注入策略,也可以单独为Pod设置自动注入策略,具体操作步骤如下。
为命名空间开启自动注入。
- 登录ASM控制台,在左侧导航栏,选择 。
- 在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在注入策略配置管理页面的注入策略配置管理区域,配置相关信息。
以下配置表示默认所有命名空间下带有sidecar.istio.io/injection: "true"标签的Pod都会被自动注入Sidecar,但是带有istio-injection:disabled标签的命名空间中所有Pod都不会被自动注入Sidecar。
配置项
说明
Pod所在命名空间的标签需要满足条件
选择不包含istio-injection:disabled。
Pod自身的标签/注解需要满足条件
选择包含sidecar.istio.io/injection: "true"。
在ACK集群中创建名为test2的命名空间,test2命名空间不带有任何标签。具体操作,请参见管理命名空间与配额。
在ACK集群的test2命名空间下创建reviews应用。具体操作,请参见部署应用到ASM实例。
为Pod添加标签,使Pod开启自动注入。
验证为Pod设置自动注入策略是否成功。
- 登录容器服务管理控制台,在左侧导航栏选择集群。
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面顶部,设置命名空间为test2,单击reviews应用名称。
在容器组页签下可以看到Pod中包含Proxy镜像,表明为Pod设置自动注入策略成功。