为 Google Kubernetes Engine Pod 进行自动 Envoy 注入的设置选项

本指南为您提供有关自动 Envoy Sidecar 注入器的其他选项和任务的信息。

将 Sidecar 代理添加到现有工作负载

在将 Sidecar 注入器安装到集群后,Sidecar 代理会自动注入到已启用的命名空间中新创建的 pod 中。如果在启用 Sidecar 注入器之前已经有工作负载在运行,则必须重新启动它们以进行注入。

对于由 Deployment、DaemonSet 或 StatefulSet 控制器管理的 pod,可以运行以下命令:

# Deployment
kubectl rollout restart daemonset/DEPLOYMENT_NAME --namespace NAMESPACE

# DaemonSet
kubectl rollout restart deployment/DAEMONSET_NAME --namespace NAMESPACE

# StatefulSet
kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE

如果您没有使用上述任何控制器部署您的 pod,则必须单独删除 pod。之后,这些 pod 会通过新的 Sidecar 代理自动重新创建。

kubectl delete pod POD_NAME -n NAMESPACE

验证是否已在每个 pod 中注入 Sidecar 代理容器:

kubectl get pods -n NAMESPACE

例如,对于上面创建的 busybox 客户端,您应该看到 2/2 个 pod 正在运行,其中一个用于 busybox 应用本身,另一个用于注入的 Envoy Sidecar 代理:

NAME                      READY   STATUS    RESTARTS   AGE
busybox-c54f578c9-c9fk4   2/2     Running   183        7d15h

注入替换

默认情况下,启用命名空间可为所有常驻 pod 启用 Sidecar 代理注入。您还可为注入配置不同范围,以满足特定需求。例如,您可以使用替换来防止无代理 gRPC 服务的 Sidecar 代理注入。

请注意,注入替换仅在启用命名空间时适用,并按以下优先级生效:Pod 注释 > NeverInjectSelector > AlwaysInjectSelector > 默认政策

为特定的单个 pod 启用/停用注入

使用以下 pod 注释为已启用的命名空间中的特定 pod 开启或关闭注入:

...
metadata:
  annotations:
    sidecar.istio.io/inject: "true" / "false"

为特定的 pod 组启用/停用注入

可以根据 Kubernetes 标签选择器的数组将 Sidecar 注入器本身配置为始终或从不注入已启用的命名空间中的 pod。例如,如果 pod 的标签为“run=client”,可以使用以下命令将 Sidecar 注入器配置为注入 Sidecar 代理:

kubectl edit configmap -n istio-control istio-sidecar-injector

...
config: |-
  policy: enabled
  alwaysInjectSelector:
    []

  neverInjectSelector:
    - matchLabels:
        run: client
...

必须重启现有的 Sidecar 注入器部署,此配置才会生效。

配置 Sidecar 代理元数据

为了支持其他 Traffic Director 功能,Sidecar 代理可以从其封装容器中继承特定的元数据。例如,在您的部署规范中添加以下注释,可将“version=v2”标签应用于其注入的 Sidecar 代理。

...
metadata:
  annotations:
    cloud.google.com/proxyMetadata: '{"version": "v2"}'

然后配置过滤允许 Traffic Director 仅与与此“version=v2”标签匹配的特定代理共享配置子集。

必须重启现有部署,此配置才会生效。

支持的 pod 注释

Traffic Director 支持以下 pod 注释以进行 Sidecar 注入。尽管可能还有其他可用的 Sidecar 注入器注释,但以下列表展示的是 Traffic Director 支持的注释。为避免中断或不稳定,请不要在生产部署中创建其他注释依赖项。

注释名称 说明
sidecar.istio.io/inject 布尔值,以字符串表示。例如“true 指定是否应将 Envoy Sidecar 自动注入工作负载。
cloud.google.com/proxyMetadata 键值对的 JSON 映射。例如“'{"version": "v2"}' 以 JSON 映射的方式指定应附加到 Envoy 元数据的键值对。

卸载 Sidecar 注入器

使用以下命令卸载 Sidecar 注入器:

kubectl delete -f specs/
kubectl label namespace default istio-injection-