基于 Envoy 的负载均衡器的代理专用子网

本页面介绍如何使用基于 Envoy 的负载均衡器使用的代理专用子网。代理专用子网提供了专为 Google Cloud 负载均衡器使用的 Envoy 代理预留的 IP 地址池。不能用于任何其他目的。

这些代理会终止传入连接,然后根据网址映射、后端服务的会话亲和性、每个后端实例组或 NEG 的均衡模式以及其他因素,评估每个请求的去向。

  1. 客户端连接到负载均衡器的转发规则的 IP 地址和端口。

  2. 每个代理监听由相应负载均衡器的转发规则指定的 IP 地址和端口。其中一个代理接收并终止客户端的网络连接。

  3. 代理建立与 NEG 中相应后端虚拟机或端点(由负载均衡器的网址映射和后端服务确定)的连接。

负载均衡器的每个代理都分配有一个内部 IP 地址。从代理发送到后端虚拟机或端点的数据包具有来自代理专用子网的来源 IP 地址。

代理专用子网不能用于任何其他目的。负载均衡器的转发规则的 IP 地址不是来自代理专用子网。此外,后端虚拟机和端点的 IP 地址也不是来自代理专用子网。

支持的负载均衡器

以下基于 Envoy 的负载均衡器需要代理专用子网:

  • 用途为 GLOBAL_MANAGED_PROXY 的代理专用子网:

    在给定的网络和区域中,该区域内所有跨区域内部应用负载均衡器共用一个用途为 GLOBAL_MANAGED_PROXY 的代理专用子网。在任何时候,一个 VPC 网络的每个区域中只能有一个用途为 GLOBAL_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 的负载均衡器创建代理专用子网。创建代理专用子网的过程与创建任何子网的过程基本相同,但添加了一些标志。

对于代理专用子网,--purpose 必须设置为 REGIONAL_MANAGED_PROXYGLOBAL_MANAGED_PROXY具体取决于负载均衡器

您不能将现有子网重复用作代理专用子网;您必须在具有基于 Envoy 的负载均衡器的每个区域中创建一个新子网。其中的一个原因是 subnets update 命令不允许修改子网的 --purpose 字段。

在为区域级负载均衡器创建转发规则之前,您必须先创建代理专用子网供负载均衡器的代理使用。如果在没有先为区域创建代理专用子网的情况下尝试配置负载均衡器,则负载均衡器创建过程将失败。

控制台

  1. 在 Google Cloud Console 中,转到 VPC 网络页面。
    转到“VPC 网络”页面
  2. 点击您要向其中添加代理专用子网的共享 VPC 网络的名称。
  3. 点击添加子网
  4. 输入名称
  5. 选择区域
  6. 用途设置为以下其中一项:
    • 对于区域级负载均衡器:区域级托管式代理
    • 对于跨区域负载均衡器:跨区域托管式代理
    • 输入一个 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_PROXYGLOBAL_MANAGED_PROXY具体取决于负载均衡器
  • REGION 是代理专用子网的区域。
  • VPC_NETWORK_NAME 是包含该子网的 VPC 网络的名称。
  • CIDR_RANGE 是该子网的主要 IP 地址范围。 使用的子网掩码长度不得超过 26,以确保至少有 64 个 IP 地址可用于该区域中的代理。建议的子网掩码长度为 /23

如需完整配置示例,请参阅配置代理专用子网

您必须为后端配置防火墙规则,以接受来自代理专用子网的连接。如需查看完整的配置示例(包括防火墙规则设置),请参阅以下内容:

代理可用性

有时,Google Cloud 区域没有足够的代理容量来容纳新的负载均衡器。如果发生这种情况,Google Cloud 控制台会在您创建负载均衡器时提供一条代理可用性警告消息。如需解决此问题,您可以执行以下任一操作:

  • 为您的负载均衡器选择其他区域。如果您的后端位于其他区域,这是一种切实可行的做法。
  • 选择一个已分配有代理专用子网的 VPC 网络。
  • 等待容量问题的解决。

更改代理专用子网的大小或地址范围

当负载均衡器处理的流量增加时,您可能需要增加代理专用子网的大小,以允许将更多 Envoy 代理分配给负载均衡器。

扩展代理专用子网的方式与扩展主要地址范围的方式不同(使用 expand-ip-range 命令)。您必须创建满足您需求的“备用”代理专用子网,然后将其提升为活跃角色。这是因为在每个 VPC 网络中,每个区域只能有一个代理专用子网处于活跃状态,并且您只能扩展子网的主要 IP 地址范围。

将代理专用子网从备用状态切换为活跃状态不会中断新的连接:

  • 新激活的代理专用子网用于新的连接。
  • 之前处于活跃状态(现在处于备用状态)的代理专用子网不再用于新的连接。
  • Google Cloud 开始从之前处于活跃状态(现在处于备用状态)的代理专用子网中的代理排空现有连接。

在每个 VPC 网络中,您只能为每个区域创建一个活跃代理专用子网和一个备用代理专用子网。

控制台

  1. 在同一区域中创建备用代理专用子网,并指定满足您需求的主要 IP 地址范围

    1. 在 Google Cloud 控制台中,转到 VPC 网络页面。
      转到“VPC 网络”页面
    2. 点击您要向其中添加代理专用子网的共享 VPC 网络的名称。
    3. 点击添加子网
    4. 输入名称
    5. 选择区域
    6. 用途设置为以下其中一项:
      • 对于区域级负载均衡器:区域级托管式代理
      • 对于跨区域负载均衡器:跨区域托管式代理
      • 对于角色,请选择备用
      • 输入一个 IP 地址范围
      • 点击添加
  2. 创建或修改应用于您的后端虚拟机或端点的入站流量允许防火墙规则,使其包含备用代理专用子网的主要 IP 地址范围。

  3. 将备用代理专用子网提升为活跃角色。此操作还会将之前的活跃代理专用子网降级为备用角色:

    1. 在 Google Cloud 控制台中,转到 VPC 网络页面。
      转到“VPC 网络”页面
    2. 点击要修改的共享 VPC 网络的名称。
    3. 为负载均衡预留代理专用子网下,找到上一步中创建的备用子网。
    4. 点击激活
    5. 指定可选的排空超时
    6. 点击激活子网
  4. 在连接排空超时后,或在确定与后端虚拟机或端点的连接并非来自之前的活跃(现在是备份)代理专用子网中的代理后,您可以执行以下操作:

    • 修改应用于您的后端虚拟机或端点的入站流量允许防火墙规则,使其不包含之前处于活跃状态(现在处于备用状态)的代理专用子网的主要 IP 地址范围。
    • 删除之前处于活跃状态(现在处于备用状态)的代理专用子网,以释放子网用于其主要 IP 地址范围的 IP 地址。

gcloud

以下步骤假定您已有活跃代理专用子网。

  1. 使用带有 --role=BACKUP 标志的 gcloud compute networks subnets create 命令在同一区域中创建备用代理专用子网,并指定满足您需求的主要 IP 地址范围。

    gcloud compute networks subnets create BACKUP_PROXY_ONLY_SUBNET_NAME \
       --purpose=SUBNET_PURPOSE \
       --role=BACKUP \
       --region=REGION \
       --network=VPC_NETWORK_NAME \
       --range=BACKUP_PROXY_ONLY_SUBNET_RANGE
    

    替换以下内容:

    • BACKUP_PROXY_ONLY_SUBNET_NAME:新创建的备用代理专用子网的名称
    • SUBNET_PURPOSE:新创建的备用代理专用子网的用途
    • REGION:新创建的备用代理专用子网的区域。该区域应与当前活跃的代理专用子网相同。
    • REGION:新创建的备用代理专用子网的网络。该网络应与当前活跃的代理专用子网相同。
    • BACKUP_PROXY_ONLY_SUBNET_RANGE:新创建的备用代理专用子网的 CIDR 范围
  2. 创建或修改应用于您的后端虚拟机或端点的入站允许防火墙规则,使其现在包含备用代理专用子网的主要 IP 地址范围。防火墙规则应该已经正在接受来自活跃子网的连接。

    gcloud compute firewall-rules update PROXY_ONLY_SUBNET_FIREWALL_RULE \
      --source-ranges ACTIVE_PROXY_ONLY_SUBNET_RANGE,BACKUP_PROXY_ONLY_SUBNET_RANGE
    

    替换以下内容:

    • PROXY_ONLY_SUBNET_FIREWALL_RULE:允许来自代理专用子网的流量到达后端实例或端点的防火墙规则的名称
    • ACTIVE_PROXY_ONLY_SUBNET_RANGE:当前活跃代理专用子网的 CIDR 范围
  3. 更新新子网,将其设置为相应区域中的 ACTIVE 代理专用子网,并等待旧子网排空。此操作还会将之前的活跃代理专用子网降级为备用角色。

    如需立即排空 IP 地址范围,请将 --drain-timeout 设置为 0s。 这样可以迅速终止与分配有正被排空子网中的地址的代理的所有连接。

    gcloud compute networks subnets update BACKUP_PROXY_ONLY_SUBNET_NAME \
       --region=REGION \
       --role=ACTIVE \
       --drain-timeout=CONNECTION_DRAINING_TIMEOUT
    

    替换以下内容:

    • CONNECTION_DRAINING_TIMEOUT 是 Google Cloud 将现有连接从之前活跃的代理专用子网中的代理迁移出来所用的时间量(以秒为单位)
  4. 使用 listdescribe 命令监控排空状态。子网在进行排空时的状态为 DRAINING

    gcloud compute networks subnets list
    

    等待排空完成。旧的代理专用子网排空后,该子网的状态为 READY

  5. 更新代理专用子网防火墙规则,以仅允许来自新子网的连接。

    gcloud compute firewall-rules PROXY_ONLY_SUBNET_FIREWALL_RULE \
      --source-ranges BACKUP_PROXY_ONLY_SUBNET_RANGE
    
  6. 在确定与后端虚拟机或端点的连接并非来自之前处于活跃状态(现在处于备用状态)的代理专用子网中的代理后,您可以删除旧的子网。

    gcloud compute networks subnets delete ACTIVE_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_BALANCERREGIONAL_MANAGED_PROXY 子网,同样地,不能有两个 REGIONAL_MANAGED_PROXY 代理或两个 INTERNAL_HTTPS_LOAD_BALANCER 代理。

  • 只能在每区域每 VPC 网络中创建一个活跃代理专用子网和一个备份代理专用子网。

  • 除非已在该区域和网络中创建了活跃代理专用子网,否则不能创建备份代理专用子网。

  • 您可以通过更新代理专用子网,将该子网的角色从备用更改为活跃。当您执行此操作时,Google Cloud 会自动将之前的活跃代理专用子网更改为备用代理专用子网。您无法通过更新代理专用子网来将该子网的角色明确设置为备用。

  • 在代理专用子网的连接排空期间 (--drain-timeout),您无法将代理专用子网的角色从备用更改为活跃。

  • 如果代理专用子网的 IP 地址耗尽,Google Cloud 不会向您发出警告。 但是,您可以配置 Monitoring 来监控代理专用子网的 IP 地址使用情况。您可以定义提醒政策,以为 loadbalancing.googleapis.com/subnet/proxy_only/addresses 指标设置提醒。

  • 代理专用子网不支持 VPC 流日志

后续步骤