使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

使用自动 Envoy 注入功能设置 Google Kubernetes Engine Pod 的选项

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

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

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

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

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

# DaemonSet
kubectl rollout restart daemonset/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 注入器部署,此配置才会生效。

自定义流量拦截行为

默认情况下,来自应用的所有出站流量都会被拦截并重定向到 Envoy Sidecar 代理。然后,Envoy 代理可以根据从 Traffic Director 收到的说明处理流量。在某些情况下,您可能需要修改此行为以绕过 Sidecar 代理。

使用以下 pod 注释可将流量从拦截和重定向中排除。

按 IP 地址范围从拦截排除

...
metadata:
  annotations:
    cloud.google.com/excludeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"

此 pod 注释是出站 IP 地址范围(CIDR 格式)的逗号分隔列表。以这些 IP 地址范围为目标的出站流量不会被重定向到 Envoy Sidecar。

请注意,您需要在 pod 注释中列出 169.254.169.254/32,以确保应用可与元数据服务器通信。如果未指定 cloud.google.com/excludeOutboundCIDRs pod 注释,流量拦截会配置为排除“169.254.169.254/32”出站 CIDR 范围。

按端口号从拦截排除

您还可以按端口从拦截和重定向中排除流量。

...
metadata:
  annotations:
    cloud.google.com/excludeOutboundPorts: "10001, 10002"

此 pod 注释是出站端口的逗号分隔列表。以这些端口为目标的出站流量不会被拦截和重定向到 Envoy Sidecar。

如果未指定 cloud.google.com/excludeOutboundPorts 注释,流向任何端口的出站流量都会被拦截并重定向到 Envoy Sidecar。这等同于传递带有空 ("") 列表的 cloud.google.com/excludeOutboundPorts 注释。

配置 Sidecar 代理元数据

为了支持其他 Traffic Director 功能,Sidecar 代理可以从其封装 Pod 中继承特定的元数据。可以通过两种方法实现此目的。这两个选项都会附加元数据,并在 Sidecar 代理连接到 Traffic Director 时与 Traffic Director 共享元数据。这两个选项是互斥的。

第一个选项允许您指定各个元数据键值对。例如,在 pod 模板规范中添加以下注释,可将 "version": "dev" 标签应用于注入它的 Sidecar 代理。

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

第二个选项会将 pod 的所有标签附加到注入该 pod 的 Sidecar 代理。

...
metadata:
  annotations:
    cloud.google.com/forwardPodLabels: "true"

如果未指定 cloud.google.com/forwardPodLabels 注释,pod 标签将不会附加到 Sidecar 代理。请注意,cloud.google.com/proxyMetadatacloud.google.com/forwardPodLabels 注释是互斥的。如果同时设置两者,则 cloud.google.com/forwardPodLabels 优先,cloud.google.com/proxyMetadata 会被忽略。

然后,配置过滤允许 Traffic Director 仅与与此 "version": "dev" 标签匹配的特定代理共享配置子集。

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

支持的 pod 注释

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

注释名称 说明
sidecar.istio.io/inject 布尔值,以字符串表示。例如“true 指定是否应将 Envoy Sidecar 自动注入工作负载。
cloud.google.com/proxyMetadata 键值对的 JSON 映射。例如“'{"version": "dev"}' 以 JSON 映射的方式指定应附加到 Envoy 元数据的键值对。
cloud.google.com/forwardPodLabels “true”或“false” 设置为“true”时,所有 pod 标签都会附加到 Envoy 元数据,并且“cloud.google.com/proxyMetadata”注释会被忽略。默认为“false”。
cloud.google.com/excludeOutboundPorts 出站端口的逗号分隔列表 指示了任何这些目标端口的出站流量将从拦截/到 Envoy Sidecar 的重定向中排除。此流量将绕过 Envoy 代理并且不会根据 Traffic Director 配置进行处理。默认为空字符串(即 "")。
cloud.google.com/excludeOutboundCIDRs 出站 IP 地址范围(CIDR 格式)的逗号分隔列表。 指示了任何这些目标 IP 的出站流量将从拦截/到 Envoy Sidecar 的重定向中排除。此流量将绕过 Envoy 代理并且不会根据 Traffic Director 配置进行处理。默认为“169.254.169.254/32”,这是与元数据服务器进行通信所需的范围。请注意,此范围是必需的,因此如果您指定 `excludeOutboundCIDings` 注释,请确保除了任何其他 CIDR 之外,还要添加“169.254.169.254/32”。 确保英文逗号分隔列表中没有空格。

卸载 Sidecar 注入器

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

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