设置具有外部后端的区域级内部代理网络负载均衡器

在按照本指南进行操作之前,请先熟悉互联网 NEG 概览文档,包括限制

以下架构图展示了具有外部后端的区域级内部代理网络负载均衡器前端。

具有外部后端的区域级内部代理网络负载均衡器。
图 1. 具有外部后端的区域级内部代理网络负载均衡器(点击可放大)。

权限

如需按照本指南进行操作,您需要创建互联网 NEG 并在项目中创建或修改代理网络负载均衡器。您应该是 Project Owner 或 Project Editorroles/ownerroles/editor),或者应同时具有下列 Compute Engine IAM 角色

任务 所需角色
创建和修改负载均衡器组件 Compute Network Admin
(roles/compute.networkAdmin)
创建和修改 NEG Compute Instance Admin
(roles/compute.instanceAdmin)

在 Google Cloud 外部设置外部后端环境

如需设置外部后端环境,请参阅以下部分。

配置网络端点

配置网络端点,以将外部后端公开给 Google Cloud。确保端点(IP:Port 组合或完全限定域名 [FQDN] 和端口)可通过互联网访问。此端点稍后可从互联网 NEG 引用。

如需详细了解互联网 NEG 端点的配置要求,请参阅互联网 NEG 概览

允许外部后端接收来自 Google Cloud 的流量

您可以在创建代理专用子网并设置 Cloud NAT 网关后完成此步骤。

如需允许来自 Google Cloud 的请求到达外部后端,您需要执行以下步骤:

  1. 为 Cloud NAT 网关配置用于来自 Google Cloud 的出站流量的 IP 地址。该网关会将代理专用子网范围映射到外部 IP 地址。如需了解相关步骤,请参阅设置 Cloud NAT 网关
  2. 确保外部后端环境配置为允许来自 Google Cloud 的流量到达外部后端。例如,如果您为 NAT 网关使用了预留的 IP 地址,则需要在外部环境中将这些 IP 地址列入许可名单。您可能需要与外部环境的网络或安全管理员一起进行此设置。

设置 Google Cloud 环境

您需要一个包含两个子网的 VPC 网络:一个用于负载均衡器组件,另一个用于区域的代理专用子网。然后,创建具有互联网 NEG 后端的负载均衡器。

创建 VPC 网络和子网

此子网用于创建负载均衡器的组件。

Cloud 控制台

  1. 在 Google Cloud 控制台中,转到 VPC 网络页面。
    进入“VPC 网络”
  2. 点击创建 VPC 网络
  3. 输入名称LB_NETWORK
  4. 子网部分中执行以下操作:
    • 子网创建模式设置为自定义
    • 新子网部分中,输入以下信息:
      • 名称LB_SUBNET_NAME
      • 区域REGION
      • IP 地址范围LB_SUBNET_RANGE
    • 点击完成
  5. 点击创建

gcloud

  1. 使用 gcloud compute networks create 命令创建自定义 VPC 网络:

    gcloud compute networks create LB_NETWORK \
      --subnet-mode=custom
    
  2. LB_NETWORK 网络中创建子网。

    gcloud compute networks subnets create LB_SUBNET_NAME \
      --network=LB_NETWORK \
      --range=LB_SUBNET_RANGE \
      --region=REGION
    

配置代理专用子网

此代理专用子网用于 REGION 区域中所有基于 Envoy 的区域级负载均衡器。

控制台

  1. 在 Google Cloud 控制台中,转到 VPC 网络页面。
    转到“VPC 网络”
  2. 从列表中选择网络
  3. 点击添加子网
  4. 输入名称PROXY_ONLY_SUBNET_NAME
  5. 选择区域REGION
  6. 用途设置为区域级代管式代理
  7. 输入 IP 地址范围PROXY_ONLY_SUBNET_RANGE
  8. 点击添加

gcloud

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

gcloud compute networks subnets create PROXY_ONLY_SUBNET_NAME \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=REGION \
  --network=LB_NETWORK \
  --range=PROXY_ONLY_SUBNET_RANGE

设置 Cloud NAT 网关

在配置 Cloud NAT 网关之前,请确保您已查看相关限制和价格注意事项。如需了解详情,请参阅区域级 NEG:使用 Cloud NAT 网关

以下命令描述了如何设置 Cloud NAT 网关。Cloud NAT 网关可以配置为使用自动 NAT 外部 IP 地址(基于需求分配),也可以配置为使用一组手动预留的外部 IP 地址。该网关会将代理专用子网范围映射到外部 IP 地址。

设置 NAT 自动分配的 IP 地址

在创建具有自动 NAT IP 地址分配的 Cloud NAT 网关时,您可以指定 Cloud NAT 网关用于分配 IP 地址的网络服务层级(高级层级或标准层级)。

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud NAT 页面。

    进入 Cloud NAT

  2. 点击开始使用创建 Cloud NAT 网关

  3. 输入网关名称 LB_NAT_CONFIG

  4. NAT 类型列表中,选择公开

  5. 网络列表中,选择 LB_NETWORK

  6. 区域列表中,选择 REGION

  7. 在该区域中创建一个 Cloud Router 路由器。

  8. 来源端点类型列表中,选择代管式代理负载均衡器

  9. 来源列表中,选择自定义

    • 子网列表中,选择 PROXY_ONLY_SUBNET_NAME
  10. Cloud NAT IP 地址列表中,选择自动(推荐)

  11. 对于网络服务层级,选择高级标准

  12. 点击创建

gcloud

如果外部后端环境不要求您将可将流量发送到外部后端的特定 Google Cloud IP 地址列入许可名单,请使用动态分配的 IP 地址。

  1. 创建 Cloud Router 路由器:

    gcloud beta compute routers create ROUTER_NAME \
      --network=LB_NETWORK \
      --region=REGION
  2. 设置 Cloud NAT 网关。

    gcloud beta compute routers nats create LB_NAT_CONFIG \
      --router=ROUTER_NAME \
      --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
      --nat-custom-subnet-ip-ranges=PROXY_ONLY_SUBNET_NAME \
      --auto-allocate-nat-external-ips \
      --region=REGION
    

替换以下内容:

  • LB_NAT_CONFIG:NAT 配置的名称。

  • ROUTER_NAME:您的 Cloud Router 路由器的名称。

  • REGION:要创建的 NAT 的区域。如果未指定,系统可能会提示您选择一个区域(仅限互动模式)。

  • PROXY_ONLY_SUBNET_NAME:代理专用子网的名称。

设置手动分配的 IP 地址

仅当外部后端环境要求您将特定 Google Cloud IP 地址列入许可名单时,才使用手动分配的 IP 地址。如果外部后端环境不需要许可名单,请改用动态分配,如上所示。

创建 Cloud NAT 网关时,您可以选择手动分配高级层级和/或标准层级的 NAT IP 地址,但需满足某些条件

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud NAT 页面。

    进入 Cloud NAT

  2. 点击开始使用创建 Cloud NAT 网关

  3. 输入网关名称 LB_NAT_CONFIG

  4. 网络列表中,选择 LB_NETWORK

  5. 区域列表中,选择 REGION

  6. 在该区域中选择或创建 Cloud Router 路由器。

  7. 来源端点类型列表中,选择代管式代理负载均衡器

  8. 来源列表中,选择自定义

    • 子网中,选择 PROXY_ONLY_SUBNET_NAME
  9. Cloud NAT IP 地址列表中,选择手动

  10. 对于网络服务层级,选择高级标准

  11. 选择或创建用于 NAT 的静态预留外部 IP 地址。

  12. 如果要指定其他 IP 地址,请点击添加 IP 地址,然后选择或创建其他静态预留外部 IP 地址。

  13. 点击创建

gcloud

  1. 创建 IP 地址。由于网关执行一对一 NAT 转换,因此您必须确保预留的 IP 地址池足够大,可以处理预期的流量。NAT IP 地址分配不足可能会导致流量丢失。

    gcloud compute addresses create IP_ADDRESS_NAME_1 IP_ADDRESS_NAME_2 [IP_ADDRESS_NAME_3 ...] \
      --region=REGION
    
  2. 创建 Cloud Router 路由器:

    gcloud compute routers create ROUTER_NAME \
      --network=LB_NETWORK \
      --region=REGION
  3. 设置 Cloud NAT 网关。

    gcloud beta compute routers nats create LB_NAT_CONFIG \
      --router=ROUTER_NAME \
      --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
      --nat-custom-subnet-ip-ranges=PROXY_ONLY_SUBNET_NAME \
      --nat-external-ip-pool=IP_ADDRESS_NAME_1,IP_ADDRESS_NAME_2,[IP_ADDRESS_NAME_3 ...] \
      --region=REGION
    

    替换以下内容:

  • LB_NAT_CONFIG:NAT 配置的名称。

  • ROUTER_NAME:您的 Cloud Router 路由器的名称。

  • PROXY_ONLY_SUBNET_NAME:代理专用子网的名称。

  • REGION:要创建的 NAT 的区域。如果未指定,系统可能会提示您选择一个区域(仅限互动模式)。

如需了解详情,请参阅 Cloud NAT 文档中的指定 NAT 的子网范围

请确保在外部后端环境中使用 NAT IP 地址范围的许可名单,以便您的外部后端可以接收来自 Google Cloud 的流量。

预留负载均衡器的 IP 地址

为负载均衡器预留内部 IP 地址。

控制台

您可以使用 Google Cloud 控制台预留独立内部 IP 地址。

  1. 转到 VPC 网络页面。

    转到 VPC 网络页面

  2. 点击用于配置环境之间的混合连接的网络。
  3. 点击静态内部 IP 地址,然后点击预留静态地址
  4. 输入名称LB_IP_ADDRESS
  5. 对于子网,请选择 LB_SUBNET_NAME
  6. 如果要指定要预留的 IP 地址,请在静态 IP 地址下选择让我自行选择,然后填写自定义 IP 地址。否则,系统会自动为您分配子网中的 IP 地址。
  7. 如果要将此 IP 地址与多个转发规则一起使用,请在用途下选择共享
  8. 点击保留以完成此流程。

gcloud

  1. 使用 gcloud CLI 运行 compute addresses create 命令

    gcloud compute addresses create LB_IP_ADDRESS \
      --region=REGION \
      --subnet=LB_SUBNET_NAME \
    
  2. 使用 compute addresses describe 命令查看分配的 IP 地址:

    gcloud compute addresses describe LB_IP_ADDRESS \
      --region=REGION
    

设置互联网 NEG

您可以创建使用 INTERNET_FQDN_PORT 端点或 INTERNET_IP_PORT 端点的互联网 NEG。

控制台

创建具有 INTERNET_FQDN_PORT 端点的 NEG

  1. 在 Google Cloud 控制台中,前往网络端点组页面。

    前往“网络端点组”页面

  2. 点击创建网络端点组

  3. 为您的互联网 NEG 指定 INTERNET_NEG_NAME。如需了解详情,请参阅资源命名惯例

  4. 网络端点组类型列表中,选择网络端点组(互联网),然后执行以下操作:

    • 范围列表中,选择区域级
    • 可选:在区域列表中,更改此 NEG 的 REGION
    • 网络列表中,选择 LB_NETWORK
    • 默认端口框中,输入 DEFAULT_PORT_NUMBER
    • 通过以下方式添加端点列表中,选择完全限定域名和端口
  5. 选择创建

INTERNET_FQDN_PORT 端点添加到 NEG

  1. 在 Google Cloud 控制台中,前往网络端点组页面。

    前往“网络端点组”页面

  2. 点击 INTERNET_NEG_NAME
  3. 输入完全限定域名,例如 myorg.example.com。您必须采用标准 FQDN 语法指定 FQDN 对象。

  4. 可选:在端口类型列表中,选择自定义。如果端口类型Default,则使用 NEG 的默认端口。

  5. 端口号框中,输入 PORT_NUMBER_1
  6. 选择创建

创建具有 INTERNET_IP_PORT 端点的 NEG

  1. 在 Google Cloud 控制台中,前往网络端点组页面。

    前往“网络端点组”页面

  2. 点击创建网络端点组

  3. 为您的互联网 NEG 指定名称 INTERNET_NEG_NAME。如需了解详情,请参阅资源命名惯例

  4. 网络端点组类型列表中,选择网络端点组(互联网),然后执行以下操作:

    • 范围列表中,选择区域级
    • 可选:在区域列表中,更改此 NEG 的 REGION
    • 网络列表中,选择 LB_NETWORK
    • 默认端口框中,输入 DEFAULT_PORT_NUMBER
    • 通过以下方式添加端点列表中,选择 IP 和端口
  5. 选择创建

INTERNET_IP_PORT 端点添加到 NEG

  1. 在 Google Cloud 控制台中,前往网络端点组页面。

    前往“网络端点组”页面

  2. 点击 INTERNET_NEG_NAME
  3. IP 地址字段中,输入 IP_ADDRESS_1
  4. 可选:在端口类型列表中,选择自定义。如果端口类型Default,则使用 NEG 的默认端口。

  5. 端口号字段中,输入 PORT_NUMBER_1
  6. 选择创建

gcloud

如需创建具有 INTERNET_FQDN_PORT 端点的 NEG,请执行以下操作:

  1. 创建 NEG 资源。

    gcloud beta compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type=INTERNET_FQDN_PORT \
        --default-port=DEFAULT_PORT_NUMBER \
        --network=LB_NETWORK \
        --region=REGION
    
  2. 将端点添加到 NEG。如果未指定端口,则系统会使用 NEG 的默认端口。

    gcloud beta compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME_1,port=PORT_NUMBER_1" \
        [--add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME_2,port=PORT_NUMBER_2" \]
        --region=REGION
    

    请替换以下内容:

    • FULLY_QUALIFIED_DOMAIN_NAME:端点的完全限定域名
    • PORT_NUMBER:端点的端口号

    每个 NEG 最多可以添加 256 个端点。

如果您的网域可通过互联网解析,则无需使用其他配置来设置 DNS。但是,如果您使用的是专用 FQDN,则需要配置 Cloud DNS 以便于进行 DNS 解析。该名称必须托管在 Cloud DNS 上,或者必须可通过从 Cloud DNS 到本地 DNS 的 DNS 转发进行解析。

首先,创建一个 Cloud DNS 区域以在您的项目中托管 DNS 记录。然后向其添加 DNS 记录。如需了解具体的配置步骤,请参阅 Cloud DNS 文档

如需创建具有 INTERNET_IP_PORT 端点的 NEG,请执行以下操作:

  1. 创建 NEG 资源。

    gcloud beta compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type=INTERNET_IP_PORT \
        --default-port=DEFAULT_PORT_NUMBER \
        --network=LB_NETWORK \
        --region=REGION
    
  2. 将端点添加到 NEG。如果未指定端口,则系统会使用 NEG 的默认端口。

    gcloud beta compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="ip=IP_ADDRESS_1,port=PORT_NUMBER_1" \
        [--add-endpoint="ip=IP_ADDRESS_2,port=PORT_NUMBER_2" \]
        --region=REGION
    

    请替换以下内容:

    • IP_ADDRESS:端点的 IP 地址
    • PORT_NUMBER:端点的端口号

    您可以重复执行此步骤,为每个 NEG 最多添加 256 个端点。

创建负载均衡器

控制台

开始配置

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    转到“负载均衡”

  2. 点击创建负载均衡器
  3. 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步
  4. 对于代理或直通,选择代理负载均衡器,然后点击下一步
  5. 公共或内部字段中,选择内部,然后点击下一步
  6. 跨区域或单区域部署字段中,选择最适合区域级工作负载,然后点击下一步
  7. 点击配置

基本配置

  1. 输入负载均衡器名称
  2. 对于区域,请选择 REGION
  3. 对于网络,请选择 LB_NETWORK

预留代理专用子网

如需预留代理专用子网,请执行以下操作:

  1. 点击预留子网
  2. 对于名称,输入 PROXY_ONLY_SUBNET_NAME
  3. 对于 IP 地址范围,输入 PROXY_ONLY_SUBNET_RANGE
  4. 点击添加

前端配置

  1. 点击前端配置
  2. 输入名称
  3. 对于子网,选择 LB_SUBNET_NAME
  4. IP 地址部分,选择之前预留的 IP 地址:LB_IP_ADDRESS
  5. 端口号部分,指定一个介于 1 到 65535 之间的端口号。转发规则仅转发具有匹配目标端口的数据包。
  6. 点击完成

后端配置

  1. 点击后端配置
  2. 点击后端服务和后端存储桶
  3. 点击创建后端服务
  4. 输入名称。
  5. 对于后端类型,选择互联网网络端点组
  6. 对于协议,选择 TCP
  7. 后端部分的新建后端窗口中,选择上一步中创建的区域级互联网网络端点组
  8. 点击完成
  9. 配置健康检查:
    1. 健康检查字段中,选择创建健康检查
    2. 将健康检查名称设置为 TCP_HEALTH_CHECK_NAME
    3. 对于协议,选择 TCP
    4. 端口设置为 80
    5. 保留其余的默认值,然后点击保存
  10. 点击创建

检查并最终确定

  1. 点击检查并最终确定
  2. 如果看起来都正确,请点击创建

gcloud

  1. 可选:创建健康检查。外部后端的健康检查探测使用分布式 Envoy 健康检查,并在以后进行 NAT 转换。
      gcloud compute health-checks create tcp TCP_HEALTH_CHECK_NAME \
          --region=REGION \
          --use-serving-port
      
  2. 创建后端服务:
      gcloud compute backend-services create BACKEND_SERVICE \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --health-checks=TCP_HEALTH_CHECK_NAME \
          --health-checks-region=REGION \
          --region=REGION
      
  3. 将互联网 NEG 添加到后端服务:
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --network-endpoint-group-region=REGION \
          --region=REGION
       
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --network-endpoint-group-region=REGION \
          --region=REGION
       
  4. 创建目标 TCP 代理以将请求路由到后端服务。

      gcloud compute target-tcp-proxies create TARGET_TCP_PROXY_NAME \
          --backend-service=BACKEND_SERVICE \
          --region=REGION
      
  5. 创建转发规则以将传入请求路由到代理。 对于“--ports”,指定一个介于 1 到 65535 之间的端口号。转发规则仅转发具有匹配目标端口的数据包。

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --network=LB_NETWORK \
          --subnet=LB_SUBNET_NAME \
          --address=LB_IP_ADDRESS \
          --target-tcp-proxy=TARGET_TCP_PROXY_NAME \
          --target-tcp-proxy-region=REGION \
          --region=REGION \
          --ports=PORT_NUMBER
      

测试负载均衡器

现在您已经配置了负载均衡器,接下来可以开始向负载均衡器的 IP 地址发送流量了。

创建客户端虚拟机

此示例在与负载均衡器相同的区域内创建一个客户端虚拟机 (vm-client)。该客户端用于验证负载均衡器的配置,并演示预期的行为。

gcloud

客户端虚拟机可以位于负载均衡器所在的 REGION 的任何可用区中,并且可以使用同一 VPC 网络中的任何子网。

gcloud compute instances create vm-client \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --network=LB_NETWORK \
    --subnet=LB_SUBNET_NAME \
    --zone=ZONE

将流量发送到负载均衡器

负载均衡器配置在首次部署后可能需要几分钟时间才能全球传播。

  1. 通过 SSH 连接到客户端实例。

    gcloud compute ssh vm-client \
      --zone=ZONE
    
  2. 验证负载均衡器是否按预期处理后端主机名。

    1. 使用 compute addresses describe 命令查看负载均衡器的 IP 地址:

      gcloud compute addresses describe LB_IP_ADDRESS \
        --region=REGION
      

      记下 IP 地址。

    2. 您可以使用 curl 将流量发送到创建负载均衡器转发规则时指定的 IP 地址和端口上的负载均衡器。测试互联网 NEG 后端是否响应请求取决于外部端点上运行的服务。

其他配置选项

如需为区域级内部代理网络负载均衡器启用更多功能,例如全球访问权限(如果您的客户端位于不同区域),请参阅设置具有虚拟机实例组后端的内部应用负载均衡器:其他配置

后续步骤