概述
应用服务网格基于K8s webhook技术,通过给业务pod内增加sidecar容器实现治理能力注入;sidecar注入策略受多种配置影响,包括pod所在命名空间的标签、pod注解、自动注入匹配、特殊匹配规则等,您可以在服务网格控制台sidecar管理->注入策略配置菜单配置,如下图所示:
只有当Pod所在的命名空间标签和Pod自身的标签/注解同时满足注入策略配置中的设置时,才能够实现Pod的sidecar注入。配置说明如下:
配置 | 说明 |
---|---|
Pod所在命名空间的标签需要满足的条件 | 包含istio-inject:enabled:需要注入sidecar的Pod所在命名空间必须包含istio-inject:enabled标签。 不包含istio-inject:disabled:需要注入sidecar的Pod所在命名空间不能包含istio-inject:disabled标签。 |
Pod自身的标签/注解需要满足的条件 | 不包含sidecar.istio.io/inject:false:需要注入sidecar的Pod自身的标签/注解不能包含sidecar.istio.io/inject:false。 包含sidecar.istio.io/inject:true:需要注入sidecar的Pod自身的标签/注解必须包含sidecar.istio.io/inject:true。 |
AlwaysInjectSelector | 注入sidecar的Pod标签选择器,多个标签是and关系;被选中的pod可以视为Pod包含sidecar.istio.io/inject:true标签或注解。 |
NeverInjectSelector | 不注入sidecar的Pod标签选择器,多个标签是and关系;被选中的pod可以视为包含sidecar.istio.io/inject:false标签或注解;优先级高于AlwaysInjectSelector。 |
说明AlwaysInjectSelector和NeverInjectSelector分别看作为匹配的Pod添加sidecar.istio.io/inject:true和sidecar.istio.io/inject:false,但是这个添加的标签优先级低于Pod原本的标签。也就是说,即使 Pod 匹配 NeverInjectSelector,但 Pod 本身具有 sidecar.istio.io/inject:true 标签时,仍然会被视为只包含 sidecar.istio.io/inject:true 标签。
在不同注入策略设置下,对于各种Pod所在命名空间标签以及Pod自身注解情况,Pod最终注入策略生效结果参考下表(表中的“Pod所在命名空间需要满足的条件”列中“包含标签”表示包含istio-inject:enabled设置;“不包含标签”表示不包含istio-inject:disabled设置。同理“Pod自身的注解/标签需要满足的条件”列中的“包含标签”表示包含sidecar.istio.io/inject:true设置;“不包含标签”表示不包含sidecar.istio.io/inject:false设置):
命名空间标签(istio-injection) | Pod自身注解(sidecar.istio.io/inject) | Pod所在命名空间需要满足的条件 | Pod自身的注解/标签需要满足的条件 | AlwaysInjectSelector | NeverInjectSelector | 结果 |
---|---|---|---|---|---|---|
enabled | true | × | × | × | × | 注入 |
enabled | false | × | × | × | × | 不注入 |
enabled | 未设置 | × | × | 匹配 | 匹配 | 不注入 |
enabled | 未设置 | × | × | 匹配 | 不匹配 | 注入 |
enabled | 未设置 | × | × | 不匹配 | 匹配 | 不注入 |
enabled | 未设置 | × | 包含 | 不匹配 | 不匹配 | 不注入 |
enabled | 未设置 | × | 不包含 | 不匹配 | 不匹配 | 注入 |
disabled | × | × | × | × | × | 不注入 |
未设置 | true | 包含 | × | × | × | 不注入 |
未设置 | true | 不包含 | × | × | × | 注入 |
未设置 | false | × | × | × | × | 不注入 |
未设置 | 未设置 | × | × | × | × | 不注入 |