本页面介绍如何使用基于 Envoy 的负载均衡器使用的代理专用子网。代理专用子网提供了专为负载均衡器使用的 Envoy 代理预留的 IP 地址池。 Google Cloud 不能用于任何其他目的。
这些代理会终止传入连接,然后根据网址映射、后端服务的会话亲和性、每个后端实例组或 NEG 的均衡��式以及其他因素,评估每个请求的去向。
客户端连接到负载均衡器的转发规则的 IP 地址和端口。
每个代理监听由相应负载均衡器的转发规则指定的 IP 地址和端口。其中一个代理接收并终止客户端的网络连接。
代理建立与 NEG 中相应后端虚拟机或端点(由负载均衡器的网址映射和后端服务确定)的连接。
负载均衡器的每个代理都分配有一个内部 IP 地址。从代理发送到后端虚拟机或端点的数据包具有来自代理专用子网的来源 IP 地址。
代理专用子网不能用于任何其他目的。负载均衡器的转发规则的 IP 地址不是来自代理专用子网。此外,后端虚拟机和端点的 IP 地址也不是来自代理专用子网。
支持的负载均衡器和产品
基于 Envoy 的 Cloud Load Balancing 和 Secure Web Proxy 产品需要代理专用子网:
用途为
REGIONAL_MANAGED_PROXY的代理专用子网:在给定的 VPC 网络和区域中,任何时间点只能有一个用途为REGIONAL_MANAGED_PROXY的代理专用子网处于活跃状态。活跃的代理专用子网可为以下所有产品提供支持:
代理专用子网如何融入负载均衡器的架构
下图展示了区域级内部应用负载均衡器所需的 Google Cloud 资源。
如图所示,���于 Envoy 的负载均衡器部署至少需要两个子网:
- 负载均衡器的后端虚拟机和后端端点使用主要 IP 地址范围为
10.1.2.0/24(在此示例中)的单个子网。此子网并非代理专用子网。 如果多个子网与负载均衡器位于同一区域,则您可以为后端虚拟机和端点使用这些子网。对于内部应用负载均衡器,与转发规则关联的负载均衡器的 IP 地址也可以位于此子网中(但并非必须)。 - 代理专用子网为
10.129.0.0/23(在此示例中)。
规划代理专用子网的大小
代理专用子网必须至少提供 64 个 IP 地址,且对应的前缀长度不得超过 /26。我们建议您从具有 /23 前缀(512 个代理专用地址)的代理专用子网开始,并随着流量需求的变化而更改大小。
代理在 VPC 级层(而非负载均衡器级层)分配。您必须在其中使用基于 Envoy 的负载均衡器的 VPC 网络的每个区域中创建一个代理专用子网。如果您在同一区域和同一 VPC 网络中部署多个负载均衡器,则它们会共用相同的代理专用子网以进行负载均衡。 基于 Envoy 的负载均衡器会根据您的流量需求自动扩缩可用于处理流量的代理数量。
分配给负载均衡器的代理数量是根据在 10 分钟的时间段内处理您的流量所需的测量容量计算的。在这个时间段内,我们会查看以下两者中的较大者:
满足您的流量带宽需求所需的代理数量。每个代理实例每秒最多可处理 18 MB 流量。我们监控所需的总带宽,将总带宽除以一个代理实例可支持的带宽,即可获得相应的数量值。
处理连接和请求所需的代理数量。我们计算以下各项资源的数量总和,并将每个值除以一个代理实例可以处理的资源,即可获得相应的数量值:
- 每秒 600 个 (HTTP) 或 150 个 (HTTPS) 新连接
- 3000 个活跃连接
每秒 1,400 个请求
在 Cloud Logging 停用的情况下,一个代理实例每秒可以处理 1,400 个请求。如果启用 Logging,代理实例每秒可处理的请求数会减少。例如:记录所有请求会将代理的请求处理能力降低到每秒 700 个请求。您可以将 Logging 配置为对较小比例的流量进行采样。这可让您在控制费用的同时满足可观测性需求。
每增加一个代理,就会产生额外的计时费用。如需了解代理专用子网的计费方式,请参阅 Cloud Load Balancing 价格文档中的“代理实例费用”部分。
基于 Envoy 的负载均衡器和 Secure Web Proxy Envoy 代理
在同一 VPC 中同时配置基于 Envoy 的负载均衡器和 Secure Web Proxy 时,请务必注意以下事项:
基于 Envoy 的负载均衡器和 Secure Web Proxy 都使用来自同一代理专用子网的 IP 地址。
为了满足这两项服务的 IP 地址要求,请考虑使用更大的代理专用子网,例如
/22子网。这有助于确保这两种配置有足够的地址空间。我们建议您监控代理容量,以跟踪 IP 地址消耗。这有助于防止代理专用子网耗尽,从而避免服务中断。
创建代理专用子网
无论您的网络是自动模式还是自定义模式,您都必须为基于 Envoy 的负载均衡器创建代理专用子网。创建代理专用子网的过程与创建任何子网的过程基本相同,但添加了一些标志。
对于代理专用子网,--purpose 必须设置为 REGIONAL_MANAGED_PROXY。
您不能将现有子网重复用作代理专用子网;您必须在具有基于 Envoy 的负载均衡器的每个区域中创建一个新子网。其中的一个原因是 subnets update 命令不允许修改子网的 --purpose 字段。
在为区域级负载均衡器创建转发规则之前,您必须先创建代理专用子网供负载均衡器的代理使用。如果在没有先为区域创建代理专用子网的情况下尝试配置负载均衡器,则负载均衡器创建过程将失败。
控制台
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
转到“VPC 网络”页面 - 点击您要向其中添加代理专用子网的共享 VPC 网络的名称。
- 点击添加子网。
- 输入名称。
- 选择区域。
- 将用途设置为区域级托管式代理。
- 输入一个 IP 地址范围。
- 点击添加。
gcloud
gcloud compute networks subnets create 命令可创建代理专用子网。
gcloud compute networks subnets create SUBNET_NAME \
--purpose=SUBNET_PURPOSE \
--role=ACTIVE \
--region=REGION \
--network=VPC_NETWORK_NAME \
--range=CIDR_RANGE
字段定义如下:
- SUBNET_NAME 是代理专用子网的名称。
- SUBNET_PURPOSE 是此子网的用途。请将此字段设置为
REGIONAL_MANAGED_PROXY。 - REGION 是代理专用子网的区域。
- VPC_NETWORK_NAME 是包含该子网的 VPC 网络的名称。
- CIDR_RANGE 是该子网的主要 IP 地址范围。 使用的子网掩码长度不得超过
26,以确保至少有 64 个 IP 地址可用于该区域中的代理。建议的子网掩码长度为/23。
如需完整配置示例,请参阅配置代理专用子网。
您必须为后端配置防火墙规则,以接受来自代理专用子网的连接。如需查看完整的配置示例(包括防火墙规则设置),请参阅以下内容:
代理可用性
有时, Google Cloud 区域没有足够的代理容量来容纳新的负载均衡器。如果发生这种情况, Google Cloud 控制台会在您创建负载均衡器时提供一条代理可用性警告消息。如需解决此问题,您可以执行以下任一操作:
- 为您的负载均衡器选择其他区域。如果您的后端位于其他区域,这是一种切实可行的做法。
- 选择一个已分配有代理专用子网的 VPC 网络。
- 等待容量问题的解决。
更改代理专用子网的大小或地址范围
当负载均衡器处理的流量增加时,您可能需要增加代理专用子网的大小,以允许更多数量的 Envoy 代理为您的负载均衡器提供支持。
您无法以扩展常规子网的主要 IPv4 地址范围的方式(使用 expand-ip-range 命令)来扩展代理专用子网的主要 IPv4 地址范围。相反,您必须将代理专用子网替换为新的子网。替换流程如下:
在与现有(原始)代理专用子网相同的区域和 VPC 网络中,创建一个新的代理专用子网。创建此新的代理专用子网时,将其
role设置为BACKUP。(对于每种代理专用子网用途, Google Cloud 允许在给定区域和 VPC 网络中存在一个ACTIVE和一个BACKUP代理专用子网。)调整适用于后端的入站流量允许防火墙规则,使其允许来自原始代理专用子网和新代理专用子网的主要 IPv4 地址范围的连接。
将新的代理专用子网的角色设置为
ACTIVE,并指定排空期间,以允许后端与原始代理专用子网中的 Envoy 代理之间的连接终止。(当您将新的代理专用子网的角色设置为ACTIVE时,Google Cloud 会自动将原始代理专用子网的角色设置为BACKUP。)监控原始代理专用子网的状态(如需详细了解监控,请参阅 gcloud 标签页)。如果子网的状态为
READY,���其角色为BACKUP,则表示该子网不再使用。 此时,您可以调整入站流量允许防火墙规则,以仅允许来自新的代理专用子网的主要 IPv4 地址范围的连接,且可以删除原始代理专用子网。
控制台
在同一区域和 VPC 网络中创建新的代理专用子网,并指定满足您需求的主要 IPv4 地址范围。将新代理专用子网的角色设置为备用。
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
转到“VPC 网络”页面 - 点击您要向其中添加代理专用子网的共享 VPC 网络的名称。
- 点击添加子网。
- 输入名称。
- 选择区域。
- 将用途设置为区域级托管式代理。
- 对于角色,请选择备用。
- 输入一个 IP 地址范围。
- 点击添加。
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
更新应用于后端虚拟机或端点的入站流量允许防火墙规则,使其包含原始代理专用子网和新代理专用子网的主要 IPv4 地址范围。
将新代理专用子网的角色设置为活跃,并指定排空超时,以允许后端与原始代理专用子网之间的连接终止。当您将新代理专用子网的角色设置为活跃时, Google Cloud 会自动将原始代理专用子网的角色设置为备用。
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
转到“VPC 网络”页面 - 点击要修改的共享 VPC 网络的名称。
- 在为负载均衡预留代理专用子网下,找到上一步中创建的备用子网。
- 点击激活。
- 指定可选的排空超时。
- 点击激活子网。
- 在 Google Cloud 控制台中,转到 VPC 网络页面。
在连接排空超时后,或在确定与后端虚拟机或端点的连接并非来自原始代理专用子网中的代理后,您可以执行以下操作:
- 更新应用于您的后端虚拟机或端点的入站流量允许防火墙规则,使其仅包含新的代理专用子网的主要 IPv4 地址范围。
- 删除原始代理专用子网。
gcloud
以下步骤展示了如何将现有代理专用子网与新的代理专用子网进行交换。在以下所有步骤中:
ORIGINAL_PROXY_ONLY_SUBNET_NAME:现有代理专用子网的名称ORIGINAL_PROXY_ONLY_SUBNET_RANGE:现有代理专用子网的主要 IPv4 地址范围(采用 CIDR 格式)。这是您之前选择的地址范围。NEW_PROXY_ONLY_SUBNET_NAME:新代理专用子网的名称NEW_PROXY_ONLY_SUBNET_RANGE:新代理专用子网的主要 IPv4 地址范围(采用 CIDR 格式)。选择符合您需求的 IPv4 地址范围。PROXY_ONLY_SUBNET_FIREWALL_RULE:入站流量允许 VPC 防火墙规则的名称,该规则允许来自代理专用子网的连接REGION:包含原始代理专用子网和新代理专用子网的区域VPC_NETWORK_NAME:包含原始代理专用子网和新代理专用子网的网络所对应的 VPC 网络名称
使用带有
--role=BACKUP标志的 gcloud compute networks subnets create 命令,在同一区域和 VPC 网络中创建新的代理专用子网。gcloud compute networks subnets create NEW_PROXY_ONLY_SUBNET_NAME \ --purpose=SUBNET_PURPOSE \ --role=BACKUP \ --region=REGION \ --network=VPC_NETWORK_NAME \ --range=NEW_PROXY_ONLY_SUBNET_RANGE
替换以下内容:
SUBNET_PURPOSE:REGIONAL_MANAGED_PROXY或GLOBAL_MANAGED_PROXY,具体取决于需要使用代理专用子网的负载均衡器。如需了解详情,请参阅支持的负载均衡器。
更新应用于后端虚拟机或端点的入站流量允许防火墙规则,使其包含原始代理专用子网和新代理专用子网的主要 IPv4 地址范围。
gcloud compute firewall-rules update PROXY_ONLY_SUBNET_FIREWALL_RULE \ --source-ranges=ORIGINAL_PROXY_ONLY_SUBNET_RANGE,NEW_PROXY_ONLY_SUBNET_RANGE
将新代理专用子网的角色设置为
ACTIVE,并指定排空超时 (--drain-timeout),以允许后端与原始代理专用子网之间的连接终止。当您将新代理专用子网的角色设置为ACTIVE时,Google Cloud 会自动将原始代理专用子网的角色设置为BACKUP。如需立即断开后端与原始代理专用子网中的 Envoy 代理之间的连接,请将
--drain-timeout设置为0s。gcloud compute networks subnets update NEW_PROXY_ONLY_SUBNET_NAME \ --region=REGION \ --role=ACTIVE \ --drain-timeout=CONNECTION_DRAINING_TIMEOUT
替换以下内容:
CONNECTION_DRAINING_TIMEOUT:让后端与原始代理专用子网中的 Envoy 代理之间的现有连接终止所用的时间量(以秒为单位)。
使用 gcloud compute networks subnets describe 命令监控原始代理专用子网的状态。
gcloud compute networks subnets describe ORIGINAL_PROXY_ONLY_SUBNET_NAME \ --region=REGION
等待排空完成。在排空期间,原始代理专用子网的状态为
DRAINING。您可能需要执行几次describe命令,原始代理专用子网的状态才会更改为READY。当原始代理专用子网为
READY且具有BACKUP角色时,该子网将不再使用。更新应用于您的后端虚拟机或端点的入站流量允许防火墙规则,使其仅包含新的代理专用子网的主要 IPv4 地址范围。gcloud compute firewall-rules update PROXY_ONLY_SUBNET_FIREWALL_RULE \ --source-ranges=NEW_PROXY_ONLY_SUBNET_RANGE
删除原始代理专用子网。
gcloud compute networks subnets delete ORIGINAL_PROXY_ONLY_SUBNET_NAME \ --region=REGION
迁移代理专用子网的用途
如果您之前使用 --purpose=INTERNAL_HTTPS_LOAD_BALANCER 创建了代理专用子网,则需要先将子网的用途迁移到 REGIONAL_MANAGED_PROXY,然后才能在 VPC 网络的同一区域中创建其他基于 Envoy 的负载均衡器。
控制台
如果您使用 Google Cloud 控制台创建负载均衡器,在创建负载均衡器时,系统会提示您将之前创建的代理专用子网的用途从 --purpose=INTERNAL_HTTPS_LOAD_BALANCER 迁移到 REGIONAL_MANAGED_PROXY。
gcloud
如需将现有代理专用子网的用途从 --purpose=INTERNAL_HTTPS_LOAD_BALANCER 更改为 REGIONAL_MANAGED_PROXY,请使用以下命令:
gcloud compute networks subnets update PROXY_ONLY_SUBNET \
--purpose=REGIONAL_MANAGED_PROXY \
--region=REGION
将代理专用子网的用途从 --purpose=INTERNAL_HTTPS_LOAD_BALANCER 迁移到 REGIONAL_MANAGED_PROXY 不会导致任何停机时间。更改应该几乎立即生效。
删除代理专用子网
删除代理专用子网会释放其主要 IP 地址范围,以便您可以将此范围用于其他用途。 Google Cloud 在收到删除代理专用子网的请求时,会强制执行以下规则:
如果同一区域和 VPC 网络中至少有一个区域级负载均衡器,则不能删除活跃的代理专用子网。
如果同一区域和 VPC 网络中具有一个备用代理专用子网,则不能删除活跃代理专用子网。
如果您尝试在删除备用代理专用子网之前删除活跃代理专用子网,则系统会显示以下错误消息:“无效的资源用法:无法删除活跃子网,因为存在备用子网。”
实际上,这些规则具有以下效果:
如果未在给定区域和 VPC 网络中定义区域级负载均衡器,则可以删除该区域中的代理专用子网。如果存在备份代理专用子网,则必须先删除它,然后才能删除活跃代理专用子网。
如果已在给定区域和 VPC 网络中定义至少一个区域级负载均衡器,则不能删除活跃的代理专用子网;但是,可以将备用代理专用子网提升为活跃角色,从而自动将之前的活跃代理专用子网降级为备用角色。连接排空后,可以删除备份(之前为活跃)代理专用子网。
如需了解详情,请参阅 VPC 网络文档中的删除子网。
限制
代理专用子网适用以下限制:
同一网络和区域中不能同时有
INTERNAL_HTTPS_LOAD_BALANCER和REGIONAL_MANAGED_PROXY子网,同样地,不能有两个REGIONAL_MANAGED_PROXY代理或两个INTERNAL_HTTPS_LOAD_BALANCER代理。只能在每区域每 VPC 网络中创建一个活跃代理专用子网和一个备份代理专用子网。
除非已在该区域和网络中创建了活跃代理专用子网,否则不能创建备份代理专用子网。
您可以通过更新代理专用子网,将该子网的角色从备用更改为活跃。执行此操作时, Google Cloud 会自动将之前的活跃仅代理子网更改为备份仅代理子网。您无法通过更新代理专用子网来将该子网的角色明确设置为备用。
在代理专用子网的连接排空期间 (
--drain-timeout),您无法将代理专用子网的角色从备用更改为活跃。代理专用子网不支持 VPC 流日志。