设置具有混合连接的区域外部代理网络负载均衡器

区域级外部代理网络负载均衡器是一种基于代理的区域第 4 层负载均衡器,可让您在外部区域 IP 地址后面的单个区域中运行和扩缩 TCP 服务流量。这些负载均衡器将来自互联网的外部 TCP 流量分配到同一区域中的后端。

本页面介绍了如何配置区域级外部代理网络负载均衡器,以将流量负载均衡到使用混合连接连接的本地环境或其他云环境中的后端。配置混合连接以将网络连接到 Google Cloud 不在本页面的讨论范围内。

在开始之前,请先阅读外部代理网络负载均衡器概览

在此示例中,我们将使用负载均衡器在本地或其他云环境中的后端虚拟机之间分配 TCP 流量。

在此示例中,您将配置下图中显示的部署。

具有混合 NEG 后端的外部代理网络负载均衡器示例配置。
具有混合 NEG 后端的外部代理网络负载均衡器示例配置

这是一个区域级负载均衡器。所有负载均衡器组件(后端实例组、后端服务、目标代理和转发规则)必须位于同一区域。

权限

如需设置混合负载均衡,您必须拥有以下权限:

  • 在 Google Cloud 上

    • 在 Google Cloud 与本地环境或其他云环境之间建立混合连接的权限。如需查看所需的权限列表,请参阅相关的 Network Connectivity 产品文档
    • 创建混合连接 NEG 和负载均衡器的权限。Compute Load Balancer Admin 角色 (roles/compute.loadBalancerAdmin) 可提供执行本指南中描述的任务所需的权限。
  • 在本地环境或其他非 Google Cloud 云环境中

    • 配置网络端点的权限,以允许使用 IP:Port 组合从 Google Cloud 访问本地环境或其他云环境中的服务。如需了解详情,请与您的环境的网络管理员联系。
    • 在本地环境或其他云环境中创建防火墙规则的权限,以允许 Google 的健康检查探测到达端点。

此外,如需完成本页面上的说明,您需要创建混合连接 NEG、负载均衡器和可用区级 NEG(及其端点),以用作负载均衡器的基于 Google Cloud 的后端。

您应该是项目的 Owner 或 Editor,或者应具有以下 Compute Engine IAM 角色

任务 所需角色
创建网络、子网和负载均衡器组件 Compute Network Admin (roles/compute.networkAdmin)
添加和移除防火墙规则 Compute Security Admin (roles/compute.securityAdmin)
创建实例 Compute Instance Admin (roles/compute.instanceAdmin)

建立混合连接

您必须将 Cloud Interconnect VLAN 连接或 Cloud VPN 隧道与 Cloud Router 结合使用通过混合连接来连接 Google Cloud 和本地环境或其他云环境。我们建议您使用高可用性连接。

通过全球动态路由启用的 Cloud Router 路由器会通过边界网关协议 (BGP) 获知特定端点并将其编程到您的 Google Cloud VPC 网络中。不支持区域动态路由。也不支持静态路由。

您用于配置 Cloud Interconnect 或 Cloud VPN 的 VPC 网络与您用于配置混合负载均衡部署的网络相同。确保您的 VPC 网络的子网 CIDR 范围与远程 CIDR 范围无冲突。当 IP 地址重叠时,子网路由优先于远程连接。

如需查看相关说明,请参阅以下文档:

设置 Google Cloud 外部的环境

执行以下步骤,设置本地环境或其他云环境以用于混合负载均衡:

  • 将网络端点配置为向 Google Cloud 公开本地服务 (IP:Port)。
  • 在本地环境或其他云环境中配置防火墙规则。
  • 将 Cloud Router 路由器配置为向专用环境通告所需的特定路由。

设置网络端点

设置混合连接后,您可以在本地环境或其他云环境中配置一个或多个网络端点,这些端点可使用 IP:port 组合通过 Cloud Interconnect 或 Cloud VPN 进行访问。此 IP:port 组合将配置为混合连接 NEG(稍后将在此流程中在 Google Cloud 中创建)的一个或多个端点。

如果 IP 端点有多个路径,则路由将遵循 Cloud Router 概览中所述的行为。

设置防火墙规则

您必须在本地环境或其他云环境中创建以下防火墙规则:

  • 在本地环境或其他云环境中创建入站流量允许防火墙规则,以允许来自区域的代理专用子网的流量到达端点。
  • 对于混合 NEG,无需将 Google 的健康检查探测范围列入许可名单。但是,如果您在单个后端服务中结合使用混合和可用区级 NEG,则需要将可用区级 NEG 的 Google 健康检查探测范围列入许可名单。

将 Cloud Router 配置为向本地环境或其他云环境通告以下自定义 IP 范围

  • 区域的代理专用子网的范围。

设置 Google Cloud 环境

对于以下步骤,请确保您使用用于在环境之间配置混合连接的同一 VPC 网络(在此过程中称为 NETWORK)。您可以从此网络中选择任何子网,以为负载均衡器预留 IP 地址并创建负载均衡器。在此过程中,此子网称为 LB_SUBNET

此外,请确保使用的区域(在此过程中称为 REGION)与用于创建 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接的区域相同。

配置代理专用子网

代理专用子网提供了一组 IP 地址,供 Google 用于代表您运行 Envoy 代理。代理会终结来自客户端的连接并创建与后端的新连接。

此代理专用子网供 VPC 网络 (NETWORK) 的区域 (REGION) 中所有基于 Envoy 的区域级负载均衡器使用。

在每个 VPC 网络中,每个区域只能有一个代理专用子网处于活跃状态。如果此区域中已有代理专用子网,则可以跳过此步骤。

控制台

如果您使用的是 Google Cloud 控制台,则可以稍后在负载均衡页面上创建代理专用子网。

如需立即创建代理专用子网,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 转到用于配置环境之间的混合连接的网络。

  3. 点击添加子网

  4. 对于名称,输入 proxy-only-subnet

  5. 对于区域,请选择 us-west1

  6. 用途设置为区域级代管式代理

  7. 对于 IP 地址范围,输入 10.129.0.0/23

  8. 点击添加

gcloud

如需创建代理专用子网,请使用 gcloud compute networks subnets create 命令

gcloud compute networks subnets create proxy-only-subnet \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=us-west1 \
    --network=NETWORK \
    --range=10.129.0.0/23

预留负载均衡器的 IP 地址

为负载均衡器预留外部 IP 地址。 此过程会在标准层级中创建负载均衡器的 IP 地址。区域级外部代理网络负载均衡器支持 Network Service Tiers 高级层级和标准层级。但是,不支持通过 Google Cloud 控制台在高级层级中创建此负载均衡器。请改用 gcloud 或 REST API。

控制台

  1. 在 Google Cloud 控制台中,进入预留静态地址页面。

    进入“预留静态地址”

  2. 为新地址选择一个名称。

  3. 对于网络服务层级,请选择标准

  4. IP 版本部分,选择 IPv4。系统不支持 IPv6 地址。

  5. 对于类型,请选择区域

  6. 对于区域,请选择 us-west1

  7. 附加目标选项设置为。创建负载均衡器后,此 IP 地址会关联到负载均衡器的转发规则。

  8. 点击预留以预留该 IP 地址。

gcloud

  1. 如需预留静态外部 IP 地址,请使用 gcloud compute addresses create 命令

    gcloud compute addresses create ADDRESS_NAME  \
       --region=us-west1 \
       --network-tier=STANDARD
    

    ADDRESS_NAME 替换为您要为此地址指定的名称。

  2. 如需查看结果,请使用 gcloud compute addresses describe 命令

    gcloud compute addresses describe ADDRESS_NAME
    

设置混合连接 NEG

创建 NEG 时,请使用 ZONE,以最大限度地缩短 Google Cloud 与本地环境或其他云环境之间的地理距离。例如,如果您在德国法兰克福的某一本地环境中托管一项服务,则可以在创建 NEG 时指定 europe-west3-a Google Cloud 可用区。

此外,用于创建 NEG 的可用区应位于配置了混合连接的 Cloud VPN 隧道或 Cloud Interconnect VLAN 连接所在的区域。

如需了解可用的区域和可用区,请参阅 Compute Engine 文档中的可用区域和可用区

控制台

创建混合连接 NEG

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

    进入“网络端点组”

  2. 点击创建网络端点组

  3. 对于名称,输入 HYBRID_NEG_NAME

  4. 网络端点组类型字段中,选择混合连接网络端点组(可用区级)

  5. 对于网络,请选择 NETWORK

  6. 对于子网,请选择 LB_SUBNET

  7. 对于可用区,请选择 HYBRID_NEG_ZONE

  8. 默认端口字段中,选择默认。

  9. 连接数上限字段中,输入 2

  10. 点击创建

将端点添加到混合连接 NEG

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

    进入“网络端点组”

  2. 点击您在上一步中创建的网络端点组的名称 (HYBRID_NEG_NAME)。

  3. 网络端点组详情页面的此组中的网络端点部分中,点击添加网络端点

  4. 添加网络端点页面上,输入新网络端点的 IP 地址。

  5. 选择端口类型

    • 如果您选择默认,端点会使用网络端点组中所有端点的默认端口。
    • 如果您选择自定义,则可以输入其他端口号供端点使用。
  6. 如需添加更多端点,请点击添加网络端点,并重复上述步骤。

  7. 添加所有非 Google Cloud 端点后,点击创建

gcloud

  1. 如需创建混合连接 NEG,请使用 gcloud compute network-endpoint-groups create 命令

    gcloud compute network-endpoint-groups create HYBRID_NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=HYBRID_NEG_ZONE \
        --network=NETWORK
     
  2. 将本地“IP:端口”端点添加到混合 NEG:

    gcloud compute network-endpoint-groups update HYBRID_NEG_NAME \
        --zone=HYBRID_NEG_ZONE \
        --add-endpoint="ip=ENDPOINT_IP_ADDRESS,port=ENDPOINT_PORT"
    

您可以使用此命令添加之前在本地或在云环境中配置的网络端点。根据需要重复执行 --add-endpoint

如果需要,您可以重复执行上述步骤来创建多个混合 NEG。

配置负载均衡器

控制台

开始配置

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

    转到“负载均衡”

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

基本配置

  1. 名称字段中,输入负载均衡器的名称。
  2. 对于区域,请选择 REGION
  3. 对于网络,请选择 NETWORK

预留代理专用子网

  1. 点击预留子网
  2. 对于名称,输入 proxy-only-subnet
  3. 对于 IP 地址范围,输入 10.129.0.0/23
  4. 点击添加

配置后端

  1. 点击后端配置
  2. 对于后端类型,选择混合连接网络端点组(可用区级)
  3. 对于 Protocol(协议),选择 TCP
  4. 新后端字段中,选择您之前创建的混合 NEG (HYBRID_NEG_NAME)。或者,您也可以点击创建网络端点组,立即创建混合 NEG。如需了解如何配置 NEG,请参阅设置混合 NEG
  5. 保留其余的默认值,然后点击完成
  6. 配置健康检查:
    • 健康检查字段中,选择创建健康检查
    • 名称字段中,输入健康检查的名称。
    • 对于 Protocol(协议),选择 TCP
    • 对于端口,请输入 80
  7. 保留其余的默认值,然后点击保存
  8. 在 Google Cloud 控制台中,验证后端配置旁边显示了对勾标记。如果没有显示对勾标记,请仔细检查您是否已完成所有步骤。

配置前端

  1. 点击前端配置
  2. 名称字段中,输入转发规则的名称。
  3. IP 地址字段中,选择 LB_IP_ADDRESS
  4. 对于端口号,输入介于 1-65535 之间的任何端口号。转发规则仅转发具有匹配目标端口的数据包。
  5. 仅当代理协议适用于在本地端点或其他云端点上运行的服务时,才启用该协议。例如,PROXY 协议不适用于 Apache HTTP Server 软件。如需了解详情,请参阅 PROXY 协议
  6. 点击完成
  7. 在 Google Cloud 控制台中,验证前端配置旁边显示了对勾标记。如果没有显示对勾标记,请仔细检查您是否已完成上述所有步骤。

检查并最终确定

  1. 点击检查并最终确认
  2. 仔细检查您的设置。
  3. 点击创建

gcloud

  1. 为后端创建区域性健康检查:

    gcloud compute health-checks create tcp TCP_HEALTH_CHECK_NAME \
        --region=REGION \
        --use-serving-port
    
  2. 创建后端服务:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
       --load-balancing-scheme=EXTERNAL_MANAGED \
       --protocol=TCP \
       --region=REGION \
       --health-checks=TCP_HEALTH_CHECK_NAME \
       --health-checks-region=REGION
    
  3. 将混合 NEG 后端添加到后端服务:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
       --network-endpoint-group=HYBRID_NEG_NAME \
       --network-endpoint-group-zone=HYBRID_NEG_ZONE \
       --region=REGION \
       --balancing-mode=CONNECTION \
       --max-connections=MAX_CONNECTIONS
    

    对于 MAX_CONNECTIONS,输入后端应处理的最大并发连接数。

  4. 创建目标 TCP 代理:

    gcloud compute target-tcp-proxies create TARGET_TCP_PROXY_NAME \
       --backend-service=BACKEND_SERVICE_NAME \
       --region=REGION
    
  5. 创建转发规则。 使用 gcloud compute forwarding-rules create 命令。 将 FWD_RULE_PORT 替换为 1 到 65535 之间的一个端口号。转发规则仅转发具有匹配目标端口的数据包。

    gcloud compute forwarding-rules create FORWARDING_RULE \
       --load-balancing-scheme=EXTERNAL_MANAGED \
       --network=NETWORK \
       --subnet=LB_SUBNET \
       --address=LB_IP_ADDRESS \
       --ports=FWD_RULE_PORT \
       --region=REGION \
       --target-tcp-proxy=TARGET_TCP_PROXY_NAME \
       --target-tcp-proxy-region=REGION
    

测试负载均衡器

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

  1. 获取负载均衡器的 IP 地址。

    要获取 IPv4 地址,请运行以下命令:

    gcloud compute addresses describe ADDRESS_NAME
    
  2. 通过运行以下命令将流量发送到负载均衡器。将 LB_IP_ADDRESS 替换为负载均衡器的 IPv4 地址。

    curl -m1 LB_IP_ADDRESS:FWD_RULE_PORT
    

后续步骤