进行 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 |
ON 或 OFF 启用服务代理以生成分布式跟踪信息。如果此属性设置为 ON ,则服务代理的控制平面会生成配置,以实现基于请求 ID 的跟踪。如需了解详情,请参阅 Envoy 代理的 generate_request_id 文档。 |
可选。 如果您省略此标志,则不会启用跟踪。 |
--service-proxy:access-log |
控制平面发送给服务代理的访问日志的文件路径。所有传入和传出请求都记录在此文件中。 如需了解详情,请参阅 Envoy 代理的文件访问日志文档。 |
可选。没有默认值。如果未指定文件路径,则不会创建日志。 |
--service-proxy:intercept-all-outbound-traffic (预览版) |
允许服务代理拦截所有传出流量,然后重定向到外部主机。请将 gcloud beta 与此选项搭配使用。 |
可选。 |
--service-proxy:exclude-outbound-ip-ranges (预览版) |
应从重定向中排除的 IP 地址或 CIDR 范围的列表,以分号分隔 (;) 并以引号 (") 括起。仅在设置了 intercept-all-outbound-traffic 标志时适用。请将 gcloud beta 与此选项搭配使用。例如: exclude-outbound-ip-ranges="8.8.8.8;129.168.10.0/24" |
可选。 |
--service-proxy:exclude-outbound-port-ranges (预览版) |
应从重定向中排除的端口或端口范围的列表,以分号分隔 (;) 并以引号 (") 括起。仅在设置了 intercept-all-outbound-traffic 标志时适用。请将 gcloud beta 与此选项搭配使用。例如: exclude-outbound-port-ranges="81;8080-8090" |
可选。 |
--service-proxy:scope (预览版) |
scope 选项为 Gateway 资源定义了逻辑配置边界。虚拟机启动时,服务代理会与 Cloud Service Mesh 通信,以检索与连接到具有此范围名称的网关的路由对应的路由信息。指定 scope 时,系统会忽略网络值。您不能同时指定 scope 和 mesh 值。请将 gcloud beta 与此选项搭配使用。 |
可选。 |
--service-proxy:mesh (预览版) |
mesh 选项定义了 Mesh 资源的逻辑配置边界。虚拟机启动时,服务代理会与 Cloud Service Mesh 通信,以检索与连接到具有此网格名称的 Mesh 的路由对应的路由信息。指定 mesh 时,系统会忽略网络值。您不能同时指定 scope 和 mesh 值。请将 gcloud beta 与此选项搭配使用。 |
可选。 |
--service-proxy:project-number (预览版) |
project-number 选项指定在其中创建 Mesh 和 Gateway 资源的项目。如果未指定该选项,则系统会使用实例所在的项目。该选项仅适用于新版服务路由 API。 |
可选。 |
--service-proxy-labels |
格式为 key=value 的键/值对。可应用于服务代理的标签。这些内容会反映在 Envoy 代理的引导元数据中。这些标签可以是您要设置为代理元数据的任何 key=value 对(例如,用于配置过滤)。您可以对应用和版本标签使用这些标志,例如 app=review 或 version=canary 。您也可以同时使用这些功能。 |
可选。 |
例如,以下 gcloud
命令会创建名为 proxy-it
的实例模板。通过此模板创建的实例安装了 Envoy 代理和服务代理代理。
gcloud compute instance-templates create proxy-it \ --service-proxy enabled
在以下示例中,实例模板名为 proxy-it
,安装了 Envoy 代理和服务代理代理,设置了服务端口和代理端口,启用了跟踪功能,并定义了标签。
gcloud 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
的应用。此外:
- 在 Cloud Service Mesh 中配置的所有 VIP 连接的所有出站连接都会被 iptables 拦截,后者会配置 netfilter。Netfilter 可确保拦截网络堆栈的相应流量被拦截并重定向到 Envoy 代理。然后,系统会根据您配置的 Cloud Service Mesh 的配置对流量进行负载均衡。
- 所有其他入站连接都不会被 iptables 拦截,并直接传递到虚拟机上的服务。
- 与外部端点的所有连接都会直接传递到外部 IP 地址,而不会被拦截。
- 所有 UDP 流量都会直接传递到目标,而不会被 iptables 拦截。
下图对此进行了说明。
图中的流量如下:
- 目标端口为
80
的入站流量,不拦截且直接路由到侦听该端口的服务。 - 目标端口为
8080
的入站流量,拦截并重定向到 Envoy 侦听器端口。 - Envoy 将流量从 (2) 转发到 localhost 端口
8080
上的服务 2。 - 流向 Cloud Service Mesh 转发规则 VIP 和端口的出站流量,拦截并重定向到 Envoy 侦听器端口。
- Envoy 将流量从 (4) 转发到目标 Cloud Service Mesh 后端服务的后端端点。
- 出站流量流向非 Cloud Service Mesh VIP 和端口,不拦截并直接路由到外部服务。
使用标签
如果要指定要与 Cloud Service Mesh 元数据过滤一起使用的标签,或为 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 代理,则可以使用代管实例组更新过程来更新代管实例组。按照以下流程操作:
- 将服务代理组件添加到现有代管式实例组,并将其注册到 Cloud Service Mesh 网络。
- 在虚拟机上更新服务代理组件。
在执行滚动更新之前,请执行以下操作。
- 将后端服务上的连接排空设置为至少 30 秒的值。
- 调用
--min-ready
参数时,请将参数设置为 3 分钟或更长时间。--min-ready
参数可让代管实例组在虚拟机更新后等待,然后再继续更新下一个虚拟机。如果没有此设置,新创建的虚拟机将没有时间完全启动 Envoy 和服务代理,并且更新速度太快。
要对代管实例组执行滚动更新,请按照以下步骤操作。
- 如上所述,使用服务代理信息创建新的实例模板。如果实例模板的原始版本包含服务代理信息,并且您的目标是更新到代理软件的最新稳定版本,则可用于更新。
- 对代管实例组执行滚动更新。请务必将
REPLACE
设置为更新程序必须执行的最少操作。实例组会安装最新版本的代理软件,并将其配置为在实例模板中指定。
您还可以使用更新流程从代管实例组中移除服务代理组件:
在不指定标志
--service-proxy
的情况下创建新实例模板。使用代管实例组更新过程执行滚动更新。
这将从您的虚拟机中移除 Envoy 代理。如果该代管式实例组是附加到后端服务的唯一 MIG,您可能需要移除在设置 Cloud Service Mesh 时创建的 Cloud Service Mesh 配置。