ASM自带一个Sidecar注入器,能够自动为新建的Pod添加Sidecar代理。您可以配置注入器的策略以满足特定需求,通过标签选择哪些Pod需要加入Sidecar,从而更有效地使用资源并简化管理。根据集群的大小和负载,您也可以调整注入器的资源配置,确保其有充足的运行资源。
前提条件
配置自动注入策略
您可以通过Pod所在命名空间的标签、Pod自身的标签或注解,匹配需要注入Sidecar的Pod。
登录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注入器是一个部署在数据面Kubernetes集群的准入Webhook服务(并非Sidecar代理),负责Sidecar代理的自动注入。Sidecar注入器的服务和工作负载均部署在Kubernetes集群的istio-system命名空间,名称以istio-sidecar-injector开头。您可以调整Sidecar注入器组件的资源设置与副本数,以保证Sidecar注入器在同时注入大量Pod时的可用性。建议您参考容器服务报警管理和kube-apiserver组件监控,配置Sidecar注入器准入Webhook服务的指标监控和报警规则。
登录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的命名空间,且不带有任何标签。具体操作,请参见管理命名空间与配额。
在ACK集群的test2命名空间下创建reviews应用。具体操作,请参见在ASM实例关联的集群中部署应用。
为Pod添加标签,使Pod开启自动注入。
验证为Pod设置自动注入策略是否成功。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在无状态页面顶部,设置命名空间为test2,单击reviews应用名称。
在容器组页签下可以看到Pod中包含Proxy镜像,表明为Pod设置自动注入策略成功。
相关文档
对于正在运行的Pod,需要重新启动才能使Sidecar注入策略生效。具体操作,请参见重新启动Pod。
若您控制平面升级后,已经启用Istio的应用程序仍使用旧版本的Sidecar代理,请参照升级Sidecar代理进行升级。
您可以按照不同的级别(例如全局、命名空间、工作负载、Pod范围)对Sidecar代理的资源占用、流量拦截策略、DNS代理、生命周期等方面进行配置。具体操作,请参见配置Sidecar代理。