Istio1.12.1 Sidecar注入配置
Posted 张志翔 ̮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Istio1.12.1 Sidecar注入配置相关的知识,希望对你有一定的参考价值。
1、istio-允许/禁用sidecar设置
1.1 在namespace设置自动注入:
给 zmc 命名空间设置标签:istio-injection=enabled:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
在zmc命令空间下创建如下deployment:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
给namespace设置istio-injection=enabled标签后,这样就会在 Pod 创建时触发 Sidecar 的注入过程了,被注入 Sidecar 的 Pod 会有两个容器:
查看被注入的 Pod 的细节。不难发现多出了一个 istio-proxy 容器及其对应的存储卷。注意用正确的 Pod 名称来执行下面的命令:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
禁用zmc命名空间的自动注入功能,然后检查新建 Pod 就不带有 Sidecar 容器了:
1 2 3 4 5 6 7 |
|
1.2 控制注入策略:
在1.1示例中,在命名空间级别启用和禁用了注入。通过在 pod 上配置sidecar.istio.io/inject
标签(对于istio1.12.1版本这里一定要注意是标签不是注解),还可以在每个 pod 的基础上控制注入:
资源 | 标签 | 启用值 | 禁用值 |
---|---|---|---|
Namespace | istio-injection | enabled | disabled |
Pod | sidecar.istio.io/inject | "true" | "false" |
注入的配置如下:
- 如果禁用其中一个标签,则不注入 Pod
- 如果启用其中一个标签,则注入 Pod
- 如果两个标签都没有设置,如果启用
.values.sidecarInjectorWebhook.enableNamespacesByDefault
, 则会注入 Pod。在默认情况下是不启用的,所以 Pod 通常不会被注入。
示例1:istio-injection=disabled,sidecar.istio.io/inject="true":
1 2 3 4 |
|
在zmc命令空间下创建如下deployment:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
结果如下,由此可以得出结论如果任一标签被禁用,则不会注入 pod:
1 2 3 |
|
示例2:namespace无istio-injection=disabled标签,sidecar.istio.io/inject="true":
1 2 3 4 |
|
在zmc命令空间下创建和示例一配置文件一样的deployment,结果如下,由此可以得出结论如果启用了任一标签,则注入 pod:
1 2 3 |
|
示例三:启用.values.sidecarInjectorWebhook.enableNamespacesByDefault(目前测试结果与官方文档不一致)
如果两个标签都未设置,不会注入Pod,例如我们新建一个namespace不加任何标签,然后在此namespace下新建一个Pod也不加任何标签,发现创建出来的Pod只有一个容器,由此可以得出默认情况下如果两个标签都未设置,不会注入Pod,此例子比较简单本文就不再测试。
接下来我们启用.values.sidecarInjectorWebhook.enableNamespacesByDefault来验证在此参数启用后默认注入pod。
使用如下命令调整istio注入参数值修改:
1 |
|
将enableNamespacesByDefault参数值由默认false改成true。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
按照官方文档修改enableNamespacesByDefault参数之后,重启istiod服务,创建新的namespace,在此namespace新建pod,都未指定任何标签,发现创建出来的Pod只有一个容器与预期结果不一致,由于开启enableNamespacesByDefault场景暂时没想到,此示例不再继续测试。
2、Istio Sidecar自动注入配置
Sidecar 自动注入机制是将 sidecar 代理自动添加到用户创建的 pod。
它使用 MutatingWebhook
机制在 pod 创建的时候将 sidecar 的容器和卷添加到每个 pod 的模版里。
用户可以通过 webhooks namespaceSelector
机制来限定需要启动自动注入的范围,也可以通过注解的方式针对每个 pod 来单独启用和禁用自动注入功能。
Sidecar 是否会被自动注入取决于下面 3 条配置和 2 条安全规则:
配置:
- webhooks
namespaceSelector
- 默认策略
policy
- pod 级别的覆盖注解
安全规则:
- sidecar 默认不能被注入到
kube-system
和kube-public
这两个 namespace - sidecar 不能被注入到使用
host network
网络的 pod 里
下面的表格展示了基于上述三个配置条件的最终注入状态。上述的安全规则不会被覆盖。
namespaceSelector 匹配 | 默认策略 | Pod 覆盖 sidecar.istio.io/inject 注解 | Sidecar 是否注入? |
---|---|---|---|
yes | enabled | true (default) | yes |
yes | enabled | false | no |
yes | disabled | true | yes |
yes | disabled | false (default) | no |
no | enabled | true (default) | no |
no | enabled | false | no |
no | disabled | true | no |
no | disabled | false (default) | no |
Istio1.12.1通过istio-revision-tag-default和istio-sidecar-injector这两个mutatingwebhookconfigurations来限定需要启动自动注入的范围,逻辑比较简单,本文不再介绍,注入结果和上述表格一致,想了解更多webhookconfigurations内容请参见:Kubernetes AdmissionWebhook 、 Kubernetes构建自定义admission webhook 和Kubernetes AdmissionWebhook匹配请求这三篇文章。
参考:https://istio.io/latest/zh/docs/ops/configuration/mesh/injection-concepts/
以上是关于Istio1.12.1 Sidecar注入配置的主要内容,如果未能解决你的问题,请参考以下文章
理解 Istio Service Mesh 中 Envoy 代理 Sidecar 注入及流量劫持
示例说明 | 想要正确使用Istio?这份sidecar说明书必不可少
Istio微服务治理网格基本使用以及与Kubernetes集成的架构