为 Compute Engine 虚拟机进行自动 Envoy 部署的设置选项

本指南为您提供有关自动 Envoy 部署的其他选项和任务的信息。

其他实例模板创建选项

在为自动 Envoy 代理部署创建实例模板时,您可以使用以下参数来定义部署的某些方面以及代理的行为。

参数 值和说明 必需或可选
--service-proxy enabled
控制是否在虚拟机上安装和配置服务代理和代理。
如果您希望自动部署和配置服务代理,则此选项是必需的。如果您省略此设置,则表示未安装或配置服务代理。
--service-proxy:serving-ports 以英文分号分隔的端口列表。
您的应用/工作负载所服务的端口。服务代理拦截入站流量,然后将其转发到 localhost 上的指定服务端口。
可选
如果您省略此标志,则服务代理仅处理来自您的工作负载的出站流量。入站流量不由服务代理处理。
--service-proxy:proxy-port 单个端口。
服务代理侦听的端口。虚拟机会拦截流量并将其重定向到此端口,以供服务代理进行处理。
可选。
如果您省略此标志,则该值默认为 15001
--service-proxy:network 有效 VPC 网络的名称。
服务代理的控制平面用来为服务代理生成动态配置的 Google Cloud VPC 网络。
如果虚拟机位于多个网络上,则为必需;否则可选。
如果省略此标志,将使用在创建虚拟机实例模板期间使用 --network 参数指定的值。
--service-proxy:tracing ONOFF
启用服务代理以生成分布式跟踪信息。如果此属性设置为 ON,则服务代理的控制平面会生成配置,以实现基于请求 ID 的跟踪。
如需了解详情,请参阅 Envoy 代理的 generate_request_id 文档。
可选。
如果您省略此标志,则不会启用跟踪。
--service-proxy:access-log 控制平面发送给服务代理的访问日志的文件路径。所有传入和传出请求都记录在此文件中。
如需了解详情,请参阅 Envoy 代理的文件访问日志文档。
可选。没有默认值。如果未指定文件路径,则不会创建日志。
--service-proxy-labels 格式为 key=value 的键/值对。
可应用于服务代理的标签。这些内容会反映在 Envoy 代理的引导元数据中。这些标签可以是您要设置为代理元数据的任何 key=value 对(例如,用于配置过滤)。您可以对应用和版本标签使用这些标志,例如 app=reviewversion=canary。您也可以同时使用这些功能。
可选。

例如,以下 gcloud 命令会创建名为 proxy-it 的实例模板。通过此模板创建的实例安装了 Envoy 代理和服务代理代理。

gcloud beta compute instance-templates create proxy-it \
    --service-proxy enabled

在以下示例中,实例模板名为 proxy-it,安装了 Envoy 代理和服务代理代理,设置了服务端口和代理端口,启用了跟踪功能,并定义了标签。

gcloud beta compute instance-templates create proxy-it \
  --service-proxy enabled,serving-ports=8080,proxy-port=15001,tracing=ON \
  --service-proxy-labels version=canary

下图展示了将服务端口指定为 8080 时的流量流。与端口 8080 的入站 TCP 连接由 iptables 拦截并重定向到 Envoy 代理,然后代理将它们传递给您的虚拟机上侦听 TCP 端口 8080 的应用。此外:

  • 在 Traffic Director 中配置的所有 VIP 连接的所有出站连接都会被 iptables 拦截,后者会配置 netfilter。Netfilter 可确保拦截网络堆栈的相应流量被拦截并重定向到 Envoy 代理。然后,系统会根据您配置的 Traffic Director 的配置对流量进行负载平衡。
  • 所有其他入站连接都不会被 iptables 拦截,并直接传递到虚拟机上的服务。
  • 与外部端点的所有连接都会直接传递到外部 IP 地址,而不会被拦截。
  • 所有 UDP 流量都会直接传递到目标,而不会被 iptables 拦截。

下图对此进行了说明。

通过 Traffic Director 进行流量分配(点击可放大)
通过 Traffic Director 进行流量分配(点击可放大)

图中的流量如下:

  1. 目标端口为 80 的入站流量,不拦截且直接路由到侦听该端口的服务。
  2. 目标端口为 8080 的入站流量,拦截并重定向到 Envoy 侦听器端口。
  3. Envoy 将流量从 (2) 转发到 localhost 端口 8080 上的服务 2。
  4. 流向 Traffic Director 转发规则 VIP 和端口的出站流量,拦截并重定向到 Envoy 侦听器端口。
  5. Envoy 将流量从 (4) 转发到目标 Traffic Director 后端服务的后端端点。
  6. 出站流量流向非 Traffic Director VIP 和端口,不拦截并直接路由到外部服务。

使用标签

如果要指定用于 Traffic Director 元数据过滤的标签或为 Envoy 代理启用访问日志记录,请使用 --service-proxy-labels--service-proxy access-log 参数。

例如:

gcloud compute instance-templates create td-vm-template-auto \
   --service-proxy enabled,access-log=/var/log/envoy/access.log,network=default \
   --service-proxy-labels myapp=review,version=canary

Envoy 代理可以拦截虚拟机上服务的运行状况检查端口。如果您执行此操作,运行状况检查探测工具会报告您的应用和 Envoy 代理。如果 Envoy 代理未正确运行,则流量不会定向到虚拟机。例如:

gcloud compute instance-templates create td-vm-template-auto \
  --service-proxy=enabled,serving-ports="80;8080"

使用代管实例组更新过程

如果您使用自动化过程来配置 Envoy 代理,则可以使用代管实例组更新过程来更新代管实例组。按照以下流程操作:

  • 将服务代理组件添加到现有代管实例组,并将其注册到 Traffic Director 网络。
  • 在虚拟机上更新服务代理组件。

在执行滚动更新之前,请执行以下操作。

  1. 将后端服务上的连接排空设置为至少 30 秒的值。
  2. 调用 --min-ready 参数时,请将参数设置为 3 分钟或更长时间。--min-ready 参数可让代管实例组在虚拟机更新后等待,然后再继续更新下一个虚拟机。如果没有此设置,新创建的虚拟机将没有时间完全启动 Envoy 和服务代理,并且更新速度太快。

要对代管实例组执行滚动更新,请按照以下步骤操作。

  1. 如上所述,使用服务代理信息创建新的实例模板。如果实例模板的原始版本包含服务代理信息,并且您的目标是更新到代理软件的最新稳定版本,则可用于更新。
  2. 对代管实例组执行滚动更新。请务必将 REPLACE 设置为更新程序必须执行的最少操作。实例组会安装最新版本的代理软件,并将其配置为在实例模板中指定。

您还可以使用更新流程从代管实例组中移除服务代理组件:

  1. 在不指定标志 --service-proxy 的情况下创建新实例模板。

  2. 使用代管实例组更新过程执行滚动更新。

这将从您的虚拟机中移除 Envoy 代理。如果该代管实例组是附加到后端服务的唯一 MIG,您可能需要移除在设置 Traffic Director 时创建的 Traffic Director 配置。