识别 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 资源,每个资源代表一个不同的控制平面。

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

kubectl get istiorevisions

示例输出:

NAME              NAMESPACE      PROFILE   READY   STATUS    IN USE   VERSION   AGE
default-v1-28-6   istio-system             True    Healthy   False    v1.28.6   40s

使用默认 revision 启用 sidecar 注入

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

ResourceEnabled labelDisalbed label
Namespaceistio-injection=enabledistio-injection=disabled
Podsidecar.istio.io/inject=truesidecar.istio.io/inject=false
NOTE

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

使用其他 revisions 启用 sidecar 注入

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

例如,使用上面的示例 revision default-v1-28-6 时,以下标签将启用 sidecar 注入:

ResourceEnabled labelDisabled label
Namespaceistio.io/rev=default-v1-28-6istio-injection=disabled
Podistio.io/rev=default-v1-28-6sidecar.istio.io/inject=false
NOTE

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

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

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