使用自动 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 代理可以根据从 Cloud Service Mesh 收到的说明处理流量。在某些情况下,您可能需要修改此行为以绕过 Sidecar 代理。
使用以下 pod 注释可将流量从拦截和重定向中排除。
按出站 IP 地址范围从拦截排除
您可以按 IP 地址范围排除流量,使其不被拦截。
... metadata: annotations: cloud.google.com/excludeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
cloud.google.com/excludeOutboundCIDRs
pod 注解是出站 IP 地址范围(CIDR 格式)的逗号分隔列表。以这些 IP 地址范围为目标的出站流量不会被重定向到 Envoy Sidecar。
请注意,您需要在 pod 注释中列出 169.254.169.254/32
,以确保应用可与元数据服务器通信。如果未指定 cloud.google.com/excludeOutboundCIDRs
pod 注释,流量拦截会配置为排除“169.254.169.254/32”出站 CIDR 范围。
按出站 IP 地址范围包含在拦截范围中
您可以按 IP 地址范围在拦截中包含流量。
... metadata: annotations: cloud.google.com/includeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"
cloud.google.com/includeOutboundCIDRs
pod 注解是出站 IP 地址范围(CIDR 格式)的逗号分隔列表。以这些 IP 地址范围为目标的出站流量会被重定向到 Envoy Sidecar。
通配符 *
可用于重定向所有出站流量。空
list 会停用所有出站流量。该注解默认为 *
。
按出站端口号从拦截排除
您可以按出站端口号将流量从拦截和重定向中排除。
... metadata: annotations: cloud.google.com/excludeOutboundPorts: "10001, 10002"
cloud.google.com/excludeOutboundPorts
pod 注解是出站端口的逗号分隔列表。以这些端口为目标的出站流量不会被拦截和重定向到 Envoy Sidecar。
如果未指定 cloud.google.com/excludeOutboundPorts
注解,流向任何端口的出站流量都会被拦截并重定向到 Envoy Sidecar。这等同于传递带有空 ("") 列表的 cloud.google.com/excludeOutboundPorts
注解。
按入站端口号在拦截中包含
您可以按入站端口号在拦截中包含流量。
... metadata: annotations: cloud.google.com/includeInboundPorts: "10001, 10002"
cloud.google.com/includeInboundPorts
Pod 注解是将流量重定向到 Envoy Sidecar 的入站端口的逗号分隔列表。通配符 *
可用于为所有用户配置重定向,
端口。空值会停用所有入站重定向。该值默认为空字符串(“”)。
按入站端口号从拦截排除
您可以按入站端口号将流量从拦截中排除。
... metadata: annotations: cloud.google.com/excludeInboundPorts: "10001, 10002"
cloud.google.com/excludeInboundPorts
Pod 注解是以英文逗号分隔的入站端口列表,这些端口将被排除在重定向到 Envoy Sidecar 之外。仅当所有入站流量 (*
) 都正在重定向时,该注解才适用。通过
值默认为空字符串 ("")。
启用代管式证书
您可以启用代管式工作负载证书。
... metadata: annotations: cloud.google.com/enableManagedCerts: "true"
当 pod 注解 cloud.google.com/enableManagedCerts
设置为 true
时,将插入由 Certificate Authority Service 签名的 GKE 代管式工作负载证书并将其装载到 Sidecar 容器上。注解的值默认为 false
。
配置 Sidecar 代理元数据
如需支持其他 Cloud Service Mesh 功能,Sidecar 代理可以继承 来自其封装 Pod 的特定元数据。可以通过两种方法实现此目的。这两个选项都会附加元数据并与 Cloud Service Mesh 共享元数据 当边车代理连接到 Cloud Service Mesh 时。这两个选项是互斥的。
第一个选项允许您指定各个元数据键值对。例如,在 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/proxyMetadata
和 cloud.google.com/forwardPodLabels
注释是互斥的。如果同时设置两者,则 cloud.google.com/forwardPodLabels
优先,cloud.google.com/proxyMetadata
会被忽略。
配置过滤
然后允许 Cloud Service Mesh 仅与
与此"version": "dev"
标签匹配的特定代理。
必须重启现有部署,此配置才会生效。
支持的 pod 注释
Cloud Service Mesh 支持以下 pod 注解以进行 Sidecar 注入。尽管可能还有其他可用的 Sidecar 注入器注解,但以下列表展示的是 Cloud Service Mesh 支持的注解。为避免中断或不稳定,请不要在生产部署中创建其他注释依赖项。
注释名称 | 值 | 说明 |
---|---|---|
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 代理,并且不会根据 Cloud Service Mesh 进行处理 配置。默认为空字符串(即 "")。 |
cloud.google.com/includeInboundPorts | 以英文逗号分隔的入站端口列表 | 流量接收的入站端口列表(以英文逗号分隔) 重定向到 Envoy Sidecar。使用通配符 `*` 可以 为所有端口配置重定向。空值会停用所有入站重定向。该值默认为空字符串 ("")。 |
cloud.google.com/excludeInboundPorts | 入站端口的逗号分隔列表 | 逗号分隔的入站端口列表,这些端口的流量不会重定向到 Envoy Sidecar。仅当所有入站流量 (*) 都正在重定向时,该注解才适用。此值的默认值为空字符串(即“”)。 |
cloud.google.com/excludeOutboundCIDRs | 出站 IP 地址范围(CIDR 格式)的逗号分隔列表。 | 指示了任何这些目标 IP 的出站流量将从拦截/到 Envoy Sidecar 的重定向中排除。这些流量 绕过 Envoy 代理,并且不会根据 Cloud Service Mesh 进行处理 配置。默认为“169.254.169.254/32”,这是与元数据服务器进行通信所需的范围。请注意,此范围是必需的,因此如果您指定 `excludeOutboundCIDings` 注释,请确保除了任何其他 CIDR 之外,还要添加“169.254.169.254/32”。 确保英文逗号分隔列表中没有空格。 |
cloud.google.com/includeOutboundCIDRs | 出站 IP 地址范围(CIDR 格式)的逗号分隔列表。 | 指示了任何这些目标 IP 地址的出站流量包含在拦截/到 Envoy Sidecar 的重定向中。此类流量会被转发到 Envoy 代理,并根据 Cloud Service Mesh 配置进行处理。默认为“169.254.169.254/32”,这是与元数据服务器进行通信所需的范围。请注意,此范围是必需的,因此如果您指定 `includeOutboundCIDRs` 注解,请确保除了任何其他 CIDR 之外,还要添加“169.254.169.254/32”。确保英文逗号分隔列表中没有空格。 |
cloud.google.com/enableManagedCerts | 布尔值,以字符串表示。例如“true ” |
设置为“true ”时,GKE 管理的工作负载
已插入并装载由 Certificate Authority Service 签名的证书
在辅助信息文件容器中运行默认值为“false ”。
|
卸载 Sidecar 注入器
使用以下命令卸载 Sidecar 注入器:
kubectl delete -f specs/ kubectl label namespace default istio-injection-