使用 istioctl check-inject 验证 Istio Sidecar 注入

istioctl experimental check-inject 是一个诊断工具,可帮助您验证特定 Webhook 是否会在 Pod 中执行 Istio Sidecar 注入。这个工具可用于检查 Sidecar 注入的配置是否正确地应用于一个活跃的集群。

快速入门

要检查针对特定 Pod 为什么 Istio Sidecar 注入已发生/未发生(或将发生/不会发生), 请运行:

  1. $ istioctl experimental check-inject -n <namespace> <pod-name>

对于 Deployment,请运行:

  1. $ istioctl experimental check-inject -n <namespace> deploy/<deployment-name>

或者,对于标签对:

  1. $ istioctl experimental check-inject -n <namespace> -l <label-key>=<label-value>

例如,如果您在 hello 命名空间中有一个名为 httpbin 的 Deployment 和一个名为 httpbin-1234 且标签为 app=httpbin 的 Pod,则以下命令是等效的:

  1. $ istioctl experimental check-inject -n hello httpbin-1234
  2. $ istioctl experimental check-inject -n hello deploy/httpbin
  3. $ istioctl experimental check-inject -n hello -l app=httpbin

示例结果:

  1. WEBHOOK REVISION INJECTED REASON
  2. istio-revision-tag-default default Namespace label istio-injection=enabled matches
  3. istio-sidecar-injector-1-18 1-18 No matching namespace labels (istio.io/rev=1-18) or pod labels (istio.io/rev=1-18)

如果 INJECTED 字段标记为 , 则该行中的 Webhook 将执行注入, 并说明 Webhook 将进行边车注入的原因。

如果 INJECTED 字段标记为 ,则该行中的 Webhook 将不执行注入, 并且也会显示原因。

Webhook 不执行注入或注入有错误的可能原因:

  1. 没有匹配的命名空间标签或 Pod 标签:确保在命名空间或 Pod 上设置正确的标签。

  2. 没有匹配特定修订版本的命名空间标签或Pod标签:设置正确的标签以匹配所需的 Istio 修订版本。

  3. 防止注入的 Pod 标签:删除标签或将其设置为适当的值。

  4. 防止注入的命名空间标签:将标签更改为适当的值。

  5. 多个 Webhook 注入 sidecar:确保只启用一个 Webhook 进行注入,在命名空间或 Pod 上设置适当的标签以针对特定的 Webhook。