概述
应用服务网格CSM基于sidecar技术实现业务无感知的流量治理能力,当前支持基于K8s webhook技术的sidecar注入能力,下图是sidecar注入过程:
- pod创建请求发送到K8s api server之后,根据预先定义的mutatingwebhookconfiguration与当前pod创建请求进行匹配,如果匹配则,K8s api server向istio的控制面发送webhook请求。
- istio控制面根据配置向pod的yaml里注入sidecar容器,返回给api server。
- api server基于istio控制面注入后的yaml创建pod,从而实现了sidecar的注入。
sidecar注入策略受多种配置影响,有pod所在命名空间的标签、pod注解、自动注入匹配、特殊匹配规则等,天翼云服务网格CSM控制台sidecar管理->注入策略配置菜单提供的注入策略配置能力,如下图所示:
配置说明如下:
配置 | 说明 |
---|---|
Config.policy | 是否开启自动注入功能,可选值为enabled或者disabled,默认为enabled |
AlwaysInjectSelector | 注入sidecar的Pod标签选择器,多个标签是and关系;被选中的pod总是会注入sidecar |
NeverInjectSelector | 不注入sidecar的Pod标签选择器,多个标签是and关系;被选中的pod永远不注入sidecar;优先级高于AlwaysInjectSelector |
pod是否会被注入sidecar还和pod所在命名空间以及pod自身的注解有关,这两种因子叠加上面三个配置参数,最终的注入策略生效逻辑如下:
命名空间标签(istio-injection) | pod注解(sidecar.istio.io/inject) | 自动注入开关(config.policy) | NeverInjectSelector | AlwaysInjectSelector | 结果 |
---|---|---|---|---|---|
enabled | true | × | × | × | 注入 |
enabled | false | × | × | × | 不注入 |
enabled | 未设置 | × | 匹配 | × | 不注入 |
enabled | 未设置 | enabled | 不匹配 | × | 注入 |
enabled | 未设置 | disabled | × | 不匹配 | 不注入 |
enabled | 未设置 | disabled | 不匹配 | 匹配 | 注入 |
disabled | × | × | × | × | 不注入 |
未设置 | true | × | × | × | 不注入 |
未设置 | false | × | × | × | 不注入 |
未设置 | 未设置 | × | × | × | 不注入 |