识别 revision 名称

启用 sidecar 注入所需的标签由特定的控制平面实例决定,该实例称为 revision。
每个 revision 由对应的 IstioRevision 资源管理,该资源由 Istio 资源自动管理。

IstioRevision 的命名规则基于 Istio 资源中的 spec.updateStrategy.type 设置:

  • InPlace:revision 与父级 Istio 资源同名。
  • RevisionBased:revision 使用格式 <istio-resource-name>-v<version> 命名。

通常,每个 Istio 资源对应一个 IstioRevision
但在基于 revision 的升级过程中,可能存在多个 IstioRevision 资源,每个代表一个独立的控制平面。

要列出可用的 revision,请使用以下命令:

kubectl get istiorevisions

示例输出:

NAME              NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
default-v1-26-3   istio-system             True    Healthy   False    v1.26.3   40s

目录

使用默认 revision 启用 sidecar 注入

IstioRevision 的名称为 default 时,可以在命名空间或 Pod 上使用以下标签来启用 sidecar 注入:

资源启用标签禁用标签
命名空间istio-injection=enabledistio-injection=disabled
Podsidecar.istio.io/inject=truesidecar.istio.io/inject=false
NOTE

也可以通过给命名空间或 Pod 应用 istio.io/rev: default 标签来启用注入。

使用其他 revision 启用 sidecar 注入

IstioRevision 的名称不是 default 时,需要使用特定的 IstioRevision 名称配合 istio.io/rev 标签。
这将把 Pod 关联到指定的控制平面,并启用 sidecar 注入。

例如,使用上面示例中的 revision default-v1-26-3,以下标签将启用 sidecar 注入:

资源启用标签禁用标签
命名空间istio.io/rev=default-v1-26-3istio-injection=disabled
Podistio.io/rev=default-v1-26-3sidecar.istio.io/inject=false
NOTE

当同时应用 istio-injectionistio.io/rev 标签时,istio-injection 标签优先,命名空间被视为默认 revision。

注入器的配置逻辑如下:

  1. 如果任一标签(istio-injectionsidecar.istio.io/inject)被禁用,则不注入 Pod。
  2. 如果任一标签(istio-injectionsidecar.istio.io/injectistio.io/rev)被启用,则注入 Pod。