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

区域级内部代理网络负载均衡器是一种基于代理的区域第 4 层负载均衡器,可让您在只能由同一 Virtual Private Cloud (VPC) 网络中的客户端或连接到您的 VPC 网络的客户端访问的内部 IP 地址后面运行和扩缩 TCP 服务流量。如果您希望服务可供其他 VPC 网络中的客户端使用,则可以使用 Private Service Connect 发布服务

本页面介绍如何配置区域级内部代理网络负载均衡器,以将流量负载均衡到使用混合连接连接的本地或其他云环境中的后端。配置混合连接以将网络连接到 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 代理。代理会终结来自客户端的连接并创建与后端的新连接。

代理专用子网用于 NETWORK VPC 网络的 REGION 区域内所有基于 Envoy 的区域负载均衡器

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

控制台

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

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

  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=NETWORK \
    --range=PROXY_ONLY_SUBNET_RANGE

预留负载均衡器的 IP 地址

默认情况下,每个转发规则使用一个 IP 地址。您可以预留一个共享 IPv4 地址,这样就可以将同一 IPv4 地址用于多条转发规则。但是,如果要使用 Private Service Connect 发布负载均衡器,请不要为转发规则使用共享 IPv4 地址。

如需为负载均衡器预留静态内部 IPv4 地址,请参阅预留新的静态内部 IPv4 或 IPv6 地址

设置混合连接 NEG

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

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

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

控制台

如需创建混合连接 NEG,请执行以下操作:

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

    进入“网络端点组”

  2. 点击创建网络端点组

  3. 输入混合 NEG 的名称。在此过程中称为 HYBRID_NEG_NAME

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

  5. 选择网络NETWORK

  6. 选择子网LB_SUBNET

  7. 选择可用区HYBRID_NEG_ZONE

  8. 输入默认端口

  9. 点击创建

将端点添加到混合连接 NEG:

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

    进入“网络端点组”

  2. 点击上一步中创建的网络端点组的名称 (HYBRID_NEG_NAME)。随即会出现网络端点组详情页面。

  3. 此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。

  4. 输入新网络端点的 IP 地址

  5. 选择端口类型

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

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

gcloud

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

    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_NAME
  3. 输入 IP 地址范围PROXY_ONLY_SUBNET_RANGE
  4. 点击添加

后端配置

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

前端配置

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

检查并最终确定

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

gcloud

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

    gcloud compute health-checks create tcp TCP_HEALTH_CHECK_NAME \
        --region=REGION \
        --use-serving-port
    

    混合 NEG 后端的健康检查探测源自代理专用子网中的 Envoy 代理。

  2. 创建后端服务。

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
       --load-balancing-scheme=INTERNAL_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=INTERNAL_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
    

测试负载均衡器

如需测试负载均衡器,请在负载均衡器所在的区域中创建客户端虚拟机。然后,将流量从客户端发送到负载均衡器。

创建客户端虚拟机

在负载均衡器所在的区域中创建客户端虚拟机 (client-vm)。

控制台

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到虚拟机实例

  2. 点击创建实例

  3. 名称设置为 client-vm

  4. 地区设置为 CLIENT_VM_ZONE

  5. 点击高级选项

  6. 点击网络并配置以下字段:

    1. 对于网络标记,请输入 allow-ssh
    2. 对于网络接口,请选择以下内容:
      • 网络NETWORK
      • 子网LB_SUBNET
  7. 点击创建

gcloud

客户端虚拟机必须与负载均衡器位于同一 VPC 网络和区域中。它无需位于同一子网或可用区中。客户端使用与后端虚拟机相同的子网。

gcloud compute instances create client-vm \
    --zone=CLIENT_VM_ZONE \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=LB_SUBNET

允许 SSH 流量进入测试虚拟机

在此示例中,您将创建以下防火墙规则:

  • fw-allow-ssh:一个入站流量规则,用于允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更高的源 IP 地址范围;例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 地址范围。此示例使用目标标记 allow-ssh 来标识应该应用该规则的测试客户端虚拟机。

控制台

  1. 在 Google Cloud 控制台中,转到防火墙页面。 前往“防火墙政策”
  2. 点击创建防火墙规则,以创建允许传入 SSH 连接的规则:
    1. 名称fw-allow-ssh
    2. 网络NETWORK
    3. 优先级1000
    4. 流量方向:入站
    5. 对匹配项执行的操作:允许
    6. 目标:指定的目标标记
    7. 目标标记allow-ssh
    8. 来源过滤条件IPv4 范围
    9. 来源 IPv4 范围0.0.0.0/0
    10. 协议和端口:选择指定的协议和端口,然后输入 tcp:22
    11. 点击创建

gcloud

  1. 创建 fw-allow-ssh 防火墙规则,允许通过 SSH 连接到网络标记为 allow-ssh 的虚拟机。

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    

将流量发送到负载均衡器

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

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

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

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

      gcloud compute addresses describe LB_IP_ADDRESS \
        --region=REGION
      

      记下 IP 地址。

    2. 将流量发送到创建负载均衡器转发规则时指定的 IP 地址和端口上的负载均衡器。测试混合 NEG 后端是否响应请求取决于非 Google Cloud 端点上运行的服务。

可选:使用 Private Service Connect 发布服务

借助具有混合连接的区域内部代理网络负载均衡器,您可以将托管在本地或其他云环境中的服务提供给 VPC 网络中的客户端。

如果您希望使混合服务在其他 VPC 网络中可用,则可以使用 Private Service Connect 发布服务。通过将服务连接置于区域级内部代理网络负载均衡器之前,您可以让其他 VPC 网络中的客户端访问在本地或其他云环境中运行的混合服务。

使用 Private Service Connect 发布混合服务。
使用 Private Service Connect 发布混合服务(点击可放大)。

后续步骤