为了充分利用 Istio 的所有功能,服务网格中的 pod 必须运行 Istio sidecar 代理。
Sidecar 代理注入主要通过应用于命名空间或 pod 级别的标签来控制。
当在命名空间中启用时,自动注入会在 pod 创建时通过准入控制器注入代理配置,确保该命名空间中的任何新 pod 都包含 sidecar。
revision 标签还用于决定 sidecar 将关联到哪个 Istio 控制平面实例。
请注意,与手动注入不同,自动注入发生在 pod 级别。您不会看到部署本身有任何变化。
相反,您需要检查单个 pod(通过 kubectl describe
)以查看注入的代理。
启用 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,请使用以下命令:
示例输出:
当 IstioRevision
的名称为 default
时,可以在命名空间或 pod 上使用以下标签启用 sidecar 注入:
资源 | 启用标签 | 禁用标签 |
---|---|---|
命名空间 | istio-injection=enabled | istio-injection=disabled |
Pod | sidecar.istio.io/inject=true | sidecar.istio.io/inject=false |
您也可以通过给命名空间或 pod 应用 istio.io/rev: default
标签来启用注入。
当 IstioRevision
的名称不是 default
时,您需要使用特定的 IstioRevision
名称配合 istio.io/rev
标签。
这将把 pod 关联到所需的控制平面,并启用 sidecar 注入。
例如,使用上面示例中的 revision default-v1-26-3
,以下标签将启用 sidecar 注入:
资源 | 启用标签 | 禁用标签 |
---|---|---|
命名空间 | istio.io/rev=default-v1-26-3 | istio-injection=disabled |
Pod | istio.io/rev=default-v1-26-3 | sidecar.istio.io/inject=false |
当同时应用 istio-injection
和 istio.io/rev
标签时,istio-injection
标签优先,且将命名空间视为默认 revision 的一部分。
注入器的配置逻辑如下:
istio-injection
或 sidecar.istio.io/inject
)被禁用,则不注入 pod。istio-injection
、sidecar.istio.io/inject
或 istio.io/rev
)被启用,则注入 pod。