确定 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-30-4   istio-system             True    Healthy   False    v1.30.4   40s

使用默认 revision 启用 sidecar 注入

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

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

也可以通过将 istio.io/rev: default 标签应用于 namespace 或 pod 来启用注入。

使用其他 revision 启用 sidecar 注入

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

例如,使用上文中的示例 revision default-v1-30-4 时,以下标签可以启用 sidecar 注入:

资源启用标签禁用标签
Namespaceistio.io/rev=default-v1-30-4istio-injection=disabled
Podistio.io/rev=default-v1-30-4sidecar.istio.io/inject=false
NOTE

同时应用 istio-injectionistio.io/rev 标签时,istio-injection 标签优先,并将该 namespace 视为默认 revision 的一部分。

注入器按照以下逻辑进行配置:

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