Sidecar 注入

为了充分利用 Istio 的所有功能,服务网格中的 pod 必须运行 Istio sidecar 代理。

目录

关于 sidecar 注入

Sidecar 代理注入主要通过应用于命名空间或 pod 级别的标签来控制。

当在命名空间中启用时,自动注入会在 pod 创建时通过准入控制器注入代理配置,确保该命名空间中的任何新 pod 都包含 sidecar。

revision 标签还用于决定 sidecar 将关联到哪个 Istio 控制平面实例。

请注意,与手动注入不同,自动注入发生在 pod 级别。您不会看到部署本身有任何变化。 相反,您需要检查单个 pod(通过 kubectl describe)以查看注入的代理。

识别 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。