内部 HTTP(S) 负载均衡器的仅代理子网

本页面介绍如何使用区域级负载均衡器的代理专用子网。

如需简要了解内部 HTTP(S) 负载均衡器,请参阅内部 HTTP(S) 负载均衡概览

代理专用子网专为区域级负载均衡器代理预留,不能用于其他目的。在每个区域中,每个 VPC 网络只能有一个代理专用子网处于活跃状态。

您必须先创建代理专用子网,然后才能为负载均衡器创建转发规则。在其中使用区域级负载均衡器的 VPC 网络的每个区域必须有一个代理专用子网。

区域级负载均衡器为网络提供了一个代理池。这些代理会根据网址映射、后端服务的会话亲和性、每个后端实例组或 NEG 的平衡模式以及其他因素,评估每个 HTTP(S) 请求的去向。

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

  2. 其中一个代理接收并终止客户端的网络连接。

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

负载均衡器的每个代理都分配有一个内部 IP 地址。一个区域中的所有区域级负载均衡器的代理均使用 VPC 网络所在区域中单个代理专用子网的内部 IP 地址。代理专用子网必须至少提供 64 个 IP 地址,且对应的前缀长度不得超过 /26

只有 Google Cloud 为区域的区域级负载均衡器创建的代理才使用代理专用子网。负载均衡器的转发规则的 IP 地址不是来自代理专用子网。此外,后端虚拟机和端点的 IP 地址也不是来自代理专用子网。

每个代理监听由相应负载平衡器的转发规则指定的 IP 地址和端口。从代理发送到后端虚拟机或端点的每个数据包都具有一个来自代理专用子网的来源 IP 地址。

代理分配在 VPC 级层进行,而不是在负载均衡器级层。这意味着,位于同一区域和同一 VPC 网络的多个区域级负载均衡器共用代理进行负载均衡。

仅代理子网如何适应负载均衡器的架构

下图展示了区域级负载均衡器需要的 Google Cloud 资源。

内部 HTTP(S) 负载均衡器编号组件(点击可放大)
内部 HTTP(S) 负载均衡器编号组件(点击可放大)

如图所示,区域级负载均衡器部署至少需要两个子网:

  • 负载均衡器的后端虚拟机和后端端点使用主要 IP 地址范围为 10.1.2.0/24(在此示例中)的单个子网。此子网并非仅代理子网。 如果多个子网与负载均衡器位于同一地区,则您可以为后端虚拟机和端点使用这些子网。对于内部 HTTP(S) 负载均衡器,与转发规则关联的负载均衡器的 IP 地址也必须位于此子网中。
  • 代理专用子网为 10.129.0.0/23(在此示例中)。
  • 创建仅代理子网

    为区域级负载均衡器预留子网的过程与创建任何子网的过程基本相同,但添加了一些标志。

    您不能将现有子网重复用作代理专用子网;您必须在具有内部 HTTP(S) 负载均衡器的每个区域中创建一个新子网。其中的一个原因是 subnets update 命令不允许修改子网的 --purpose 字段。对于代理专用子网,--purpose 必须设置为 REGIONAL_MANAGED_PROXY

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

    您必须在其中使用区域级负载均衡器的虚拟网络 (VPC) 的每个区域中创建一个代理专用子网。该子网由相应区域中的所有区域级负载均衡器共用。

    无论您的网络是自动模式还是自定义模式,您都必须创建代理专用子网。建议的子网大小为 /23(512 个代理专用地址)。该值必须至少为 /26(64 个代理专用地址)。

    控制台

    1. 在 Cloud Console 中,转到 VPC 网络页面。
      转到“VPC 网络”页面
    2. 点击您要向其中添加代理专用子网的共享 VPC 网络的名称。
    3. 点击添加子网
    4. 输入名称
    5. 选择区域
    6. 用途设置为区域级代管式代理
    7. 输入一个 IP 地址范围
    8. 点击添加

    gcloud

    gcloud compute networks subnets create 命令可创建代理专用子网。

    gcloud compute networks subnets create SUBNET_NAME \
        --purpose=REGIONAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=REGION \
        --network=VPC_NETWORK_NAME \
        --range=CIDR_RANGE
    

    字段定义如下:

    • SUBNET_NAME 是代理专用子网的名称。
    • REGION 是代理专用子网的区域。
    • VPC_NETWORK_NAME 是包含该子网的 VPC 网络的名称。
    • CIDR_RANGE 是该子网的主要 IP 地址范围。 使用的子网掩码长度不得超过 26,以确保至少有 64 个 IP 地址可用于该区域中的代理。建议的子网掩码长度为 /23

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

    您必须为后端配置防火墙规则,以接受来自仅代理子网的连接。请参阅配置防火墙规则中的 fw-allow-proxies 配置。

    代理可用性

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

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

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

    如果您要在部署过程中更改后端数量,可能需要更改代理专用子网的大小或地址范围。

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

    将仅代理子网从备份切换为活跃不会中断新的连接:

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

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

    控制台

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

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

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

      1. 在 Cloud Console 中,转到 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_SUBNET \
         --purpose=REGIONAL_MANAGED_PROXY \
         --role=BACKUP \
         --region=REGION \
         --network=VPC_NETWORK_NAME \
         --range=CIDR_RANGE
      

    2. 创建或修改应用于您的后端虚拟机或端点的入站流量允许防火墙规则,使其包含备用代理专用子网的主要 IP 地址范围。

    3. 以下 gcloud 命令可将备用代理专用子网提升为活跃角色,并将之前的活跃代理专用子网降级为备用角色:

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

      请替换以下内容:

      • BACKUP_PROXY_SUBNET:新创建的备份代理专用子网的名称
      • REGION:新创建的备份代理专用子网的区域
      • CONNECTION_DRAINING_TIMEOUT 是 Google Cloud 将现有连接从之前活跃的代理专用子网中的代理迁移出来所用的时间量(以秒为单位)
    4. 在连接排空超时后,或在确定与后端虚拟机或端点的连接并非来自之前的活跃(现在是备份)仅代理子网中的代理后,您可以执行以下操作:

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

    配置示例

    本部分包含了一个示例配置,该配置展示了修改某个区域中的代理专用子网所需的步骤。

    1. 创建专用于该区域的备份仅代理子网。

      gcloud compute networks subnets create new-l7ilb-backend-subnet-us-west1 \
         --purpose=REGIONAL_MANAGED_PROXY \
         --role=BACKUP \
         --region=us-west1 \
         --network=default \
         --range=10.130.0.0/23
      

    2. 更新后端防火墙以接受来自新子网的连接。

      gcloud compute firewall-rules update l7-ilb-firewall \
         --source-ranges 10.129.0.0/23,10.130.0.0/23
      
    3. 更新新子网,将其设置为相应区域中的 ACTIVE 代理专用子网,并等待旧子网排空。

      gcloud compute networks subnets update new-l7ilb-ip-range-us-west1 \
         --drain-timeout 1h --role ACTIVE
      

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

    4. 使用 listdescribe 命令监控排空状态。子网在进行排空时的状态为 DRAINING

      gcloud compute networks subnets list
      

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

    5. 更新后端防火墙规则,以仅允许来自新子网的连接。

      gcloud compute firewall-rules update l7-ilb-firewall \
         --source-ranges 10.130.0.0/23
      
    6. 删除旧子网。

      gcloud compute networks subnets delete l7ilb-ip-range-us-west1 \
         --region us-west1
      

    删除仅代理子网

    删除代理专用子网会释放其主要 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 不会向您发出警告。

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

    后续步骤