设置具有混合连接的全球外部应用负载均衡器

本页面介绍如何部署全球外部应用负载均衡器,以将流量负载均衡到在本地或在其他公有云中可通过混合连接访问的网络端点。

完成这些任务后,您可以选择探索启用其他服务(例如 Cloud CDN 和 Google Cloud Armor)和高级流量管理功能。

如果您尚未设置混合连接性 NEG,请查看混合连接性 NEG 概览,以了解设置混合负载均衡的网络要求。

设置概览

本页面上的示例设置以下示例部署:

混合连接的外部应用负载均衡器示例。
混合连接的外部应用负载均衡器示例(点击可放大)。

您必须先配置混合连接,然后再尝试设置混合负载均衡部署。本主题不包含混合连接设置。

根据您选择的混合连接产品(Cloud VPN 或 Cloud Interconnect [专用或合作伙伴]),按照相关产品文档进行配置。

权限

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

  • 在 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 概览中所述的行为。

设置防火墙规则

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

  • 创建入站流量允许防火墙规则,以允许来自 Google 的健康检查探测的流量到达端点。要允许的来源 IP 地址范围包括 35.191.0.0/16130.211.0.0/22。如需了解详情,请参阅探测 IP 范围和防火墙规则

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

  • Google 的健康检查探测所使用的范围:35.191.0.0/16130.211.0.0/22

设置 Google Cloud 环境

对于以下步骤,请确保使用用于在环境之间配置混合连接的同一 VPC 网络(在此过程中称为 NETWORK)。

为后端创建子网

此子网用于创建负载均衡器的可用区级 NEG 后端、前端和内部 IP 地址。

在用于配置环境之间的混合连接的 NETWORK 网络中创建子网。

Cloud 控制台

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

gcloud

在用于配置环境之间的混合连接的 NETWORK 网络中创建子网。

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

创建防火墙规则

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

  • fw-allow-health-check:入站流量规则,它适用于要进行负载均衡的 Google Cloud 实例,允许来自负载均衡器和 Google Cloud 健康检查系统(130.211.0.0/2235.191.0.0/16)的流量。此示例使用目标标记 allow-health-check 来标识应该应用此规则的后端虚拟机。

控制台

  1. 在 Google Cloud 控制台中,转到防火墙页面。
    前往“防火墙政策”
  2. 点击创建防火墙规则
    1. 输入 fw-allow-health-check 作为名称
    2. 网络下,选择 NETWORK
    3. 目标下,选择指定的目标标记
    4. 使用 allow-health-check 填充目标标记字段。
    5. 来源过滤条件设置为 IPv4 范围
    6. 来源 IPv4 范围设置为 130.211.0.0/2235.191.0.0/16
    7. 协议和端口下,选择指定的协议和端口
    8. 选中 TCP 旁边的复选框,然后输入端口号 80
    9. 点击创建

gcloud

  1. 创建 fw-allow-health-check-and-proxy 规则,以允许负载均衡器和 Google Cloud 健康检查与 TCP 端口 80 上的后端实例进行通信:

    NETWORK 替换为用于配置混合连接的 VPC 网络的名称。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80
    

设置可用区级 NEG

对于基于 Google Cloud 的后端,我们建议您在配置混合连接的同一区域中配置多个可用区级 NEG。

在此示例中,我们在 REGION 区域中设置了一个可用区级 NEG(具有 GCE_VM_IP_PORT 类型的端点)。首先在 GCP_NEG_ZONE 可用区创建虚拟机。然后,在同一 GCP_NEG_ZONE 中创建可用区级 NEG,并将虚拟机的网络端点添加到 NEG。

创建虚拟机

控制台

  1. 转到 Google Cloud 控制台中的“虚拟机实例”页面。
    转到“虚拟机实例”
  2. 点击创建实例
  3. 名称设置为 vm-a1
  4. 对于区域,选择 REGION,然后选择任何可用区。在此过程中,此项称为 GCP_NEG_ZONE
  5. 启动磁盘部分中,确保为启动磁盘选项选择了 Debian 操作系统和 10 (Buster) 版本。如有必要,请点击选择以更改映像。
  6. 点击高级选项并进行以下更改:

    • 点击网络并添加以下网络标记allow-health-check
    • 点击网络接口下的修改 按钮并进行以下更改,然后点击完成
      • 网络NETWORK
      • 子网LB_SUBNET_NAME
      • 主要内部 IP:临时(自动)
      • 外部 IP:临时
    • 点击管理。在启动脚本字段中,复制并粘贴以下脚本内容。所有四个虚拟机的脚本内容均相同:

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  7. 点击创建

  8. 重复执行下列步骤,使用以下名称和可用区组合创建第二个虚拟机:

    • 名称:vm-a2,可用区:GCP_NEG_ZONE

gcloud

使用虚拟机名称及其可用区的这些组合运行以下命令两次来创建虚拟机。两个虚拟机的脚本内容相同。

  • VM_NAMEvm-a1 和您选择的任何 GCP_NEG_ZONE 可用区
  • VM_NAMEvm-a2 和同一 GCP_NEG_ZONE 可用区

    gcloud compute instances create VM_NAME \
        --zone=GCP_NEG_ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-health-check \
        --subnet=LB_SUBNET_NAME \
        --metadata=startup-script='#! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    

创建可用区级 NEG

控制台

如需创建可用区级网络端点组,请执行以下操作:

  1. 转到 Google Cloud 控制台中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 点击创建网络端点组
  3. 输入可用区级 NEG 的名称。在此过程中称为 GCP_NEG_NAME
  4. 选择网络端点组类型网络端点组(可用区级)
  5. 选择网络NETWORK
  6. 选择子网LB_SUBNET_NAME
  7. 选择可用区GCP_NEG_ZONE
  8. 输入默认端口80
  9. 点击创建

将端点添加到可用区级 NEG:

  1. 转到 Google Cloud 控制台中的“网络端点组”页面。
    进入“网络端点组”
  2. 点击上一步中创建的网络端点组的名称 (GCP_NEG_NAME)。随即会出现网络端点组详情页面。
  3. 此组中的网络端点部分,点击添加网络端点。您会看到添加网络端点页面。
  4. 选择一个虚拟机实例,将其内部 IP 地址添加为网络端点。网络接口部分会显示虚拟机的名称、可用区和子网。
  5. 输入新网络端点的 IP 地址
  6. 选择端口类型
    1. 如果您选择默认,端点会使用网络端点组中所有端点的默认端口 80。这足以满足我们的示例需求,因为 Apache 服务器在端口 80 处理请求。
    2. 如果您选择自定义,请输入要供端点使用的端口号
  7. 如需添加更多端点,请点击添加网络端点,并重复上述步骤。
  8. 添加所有端点后,点击创建

gcloud

  1. 使用 gcloud compute network-endpoint-groups create 命令创建可用区级 NEG(具有 GCE_VM_IP_PORT 端点):

    gcloud compute network-endpoint-groups create GCP_NEG_NAME \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=GCP_NEG_ZONE \
        --network=NETWORK \
        --subnet=LB_SUBNET_NAME
    

    您可以在创建 NEG 时指定 --default-port,也可以为每个端点指定端口号,如下一步所示。

  2. 将端点添加到 GCP_NEG_NAME

    gcloud compute network-endpoint-groups update GCP_NEG_NAME \
        --zone=GCP_NEG_ZONE \
        --add-endpoint='instance=vm-a1,port=80' \
        --add-endpoint='instance=vm-a2,port=80'
    

设置混合连接 NEG

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

此外,如果您使用的是 Cloud Interconnect,则用于创建 NEG 的 ZONE 应位于配置混合连接 Cloud Interconnect VLAN 连接所在的同一区域中。

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

控制台

如需创建混合连接网络端点组,请执行以下操作:

  1. 转到 Google Cloud 控制台中的“网络端点组”页面。
    进入“网络端点组”
  2. 点击创建网络端点组
  3. 输入混合 NEG 的名称。在此过程中称为 ON_PREM_NEG_NAME
  4. 选择网络端点组类型混合连接网络端点组(可用区级)
  5. 选择网络NETWORK
  6. 选择子网LB_SUBNET_NAME
  7. 选择可用区ON_PREM_NEG_ZONE
  8. 输入默认端口
  9. 点击创建

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

  1. 转到 Google Cloud 控制台中的“网络端点组”页面。
    转到“网络端点组”页面
  2. 点击上一步中创建的网络端点组的名称 (ON_PREM_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 ON_PREM_NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ON_PREM_NEG_ZONE \
        --network=NETWORK
    
  2. 将端点添加到 on-prem-neg

    gcloud compute network-endpoint-groups update ON_PREM_NEG_NAME \
        --zone=ON_PREM_NEG_ZONE \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_1,port=PORT_1" \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_2,port=PORT_2"
    

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

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

配置负载均衡器

控制台

gcloud

  1. 创建外部客户端将流量发送至的全球静态外部 IP 地址。
      gcloud compute addresses create LB_IP_ADDRESS_NAME \
          --network-tier=PREMIUM \
          --global
      
  2. 为后端创建健康检查
      gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \
          --use-serving-port
      
  3. 创建后端服务。您可以将可用区级 NEG 和混合连接 NEG 作为后端添加到此后端服务。
      gcloud compute backend-services create BACKEND_SERVICE \
          --health-checks=HTTP_HEALTH_CHECK_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --global
      
  4. 将可用区级 NEG 作为后端添加到此后端服务:
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --global \
          --balancing-mode=RATE \
          --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \
          --network-endpoint-group=GCP_NEG_NAME \
          --network-endpoint-group-zone=GCP_NEG_ZONE
       
    如需详细了解如何配置均衡模式,请参阅 gcloud CLI 文档中的 --max-rate-per-endpoint 参数。
  5. 将混合 NEG 作为后端添加到此后端服务。
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --global \
          --balancing-mode=RATE \
          --max-rate-per-endpoint=MAX_REQUEST_RATE_PER_ENDPOINT \
          --network-endpoint-group=ON_PREM_NEG_NAME \
          --network-endpoint-group-zone=ON_PREM_NEG_ZONE
      
  6. 创建网址映射以将传入的请求路由到此后端服务。
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service BACKEND_SERVICE
      
  7. 仅在您想要创建 HTTPS 负载均衡器时执行此步骤。HTTP 负载均衡器不需要执行此操作。
    如需创建 HTTPS 负载均衡器,您必须具有要在 HTTPS 目标代理中使用的 SSL 证书资源。您可以使用 Google 管理的 SSL 证书或自行管理的 SSL 证书创建 SSL 证书资源。建议使用 Google 管理的证书,因为 Google Cloud 会自动获取、管理和续订这些证书。

    如需创建 Google 管理的证书,您必须拥有一个网域。如果您没有网域,则可以使用自签名 SSL 证书进行测试。

    如需创建 Google 管理的 SSL 证书资源,请运行以下命令:
    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --domains DOMAIN
    
    如需创建自行管理的 SSL 证书资源,请运行以下命令:
    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --certificate CRT_FILE_PATH \
        --private-key KEY_FILE_PATH
    
  8. 创建目标 HTTPS 代理以将请求路由到您的网址映射:

    对于 HTTP 负载均衡器,请创建 HTTP 目标代理:
    gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --url-map=URL_MAP_NAME
    
    对于 HTTPS 负载均衡器,请创建 HTTPS 目标代理。 该代理属于负载均衡器,用于保存 HTTPS 负载均衡所需的 SSL 证书,因此您还需要在此步骤中加载您的证书。
    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --ssl-certificates=SSL_CERTIFICATE_NAME \
        --url-map=URL_MAP_NAME
    

    请替换以下内容:

    • TARGET_HTTP_PROXY_NAME:目标 HTTP 代理的名称。
    • TARGET_HTTPS_PROXY_NAME:目标 HTTPS 代理的名称。
    • HTTP_KEEP_ALIVE_TIMEOUT_SEC:可选字段,用于指定客户端 HTTP keepalive 超时。超时值必须介于 5 到 1200 秒之间。默认值为 610 秒。
    • SSL_CERTIFICATE_NAME:SSL 证书的名称。
    • URL_MAP_NAME:网址映射的名称。
  9. 创建转发规则以将传入请求路由到代理。

    对于 HTTP 负载均衡器:
    gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=LB_IP_ADDRESS_NAME \
        --target-http-proxy=TARGET_HTTP_PROXY_NAME \
        --global \
        --ports=80
    
    对于 HTTPS 负载均衡器:
    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=PREMIUM \
        --address=LB_IP_ADDRESS_NAME \
        --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
        --global \
        --ports=443
    

将您的网域连接到负载均衡器

创建负载均衡器后,请记好与负载均衡器关联的 IP 地址,例如 30.90.80.100。如需将您的网域指向负载均衡器,请使用您的网域注册服务创建 A 记录。如果您向 SSL 证书添加了多个网域,则必须为每个网域添加一条 A 记录,所有网域均指向负载均衡器的 IP 地址。例如,如需为 www.example.comexample.com 创建 A 记录,请使用以下命令:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

如果您使用 Cloud DNS 作为 DNS 提供商,请参阅添加、修改和删除记录

测试负载均衡器

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

  1. 转到 Google Cloud 控制台中的“负载均衡”页面。
    转到“负载均衡”页面
  2. 点击刚刚创建的负载均衡器。
  3. 记下负载均衡器的 IP 地址
  4. 将流量发送到负载均衡器。

    • 如果您创建了 HTTP 负载均衡器,则可以使用网络浏览器转到 http://IP_ADDRESS 来测试您的负载均衡器。将 IP_ADDRESS 替换为负载均衡器的 IP 地址。系统应该会将您定向到通过端点公开的服务。

    • 如果您创建了 HTTPS 负载均衡器,则可以使用 curl 来测试您的负载均衡器,如下所示:将 IP_ADDRESS 替换为负载均衡器的 IP 地址。系统应该会将您定向到通过端点公开的服务。

      curl -k https://IP_ADDRESS
      

      如果此操作无效并且您使用的是 Google 管理的证书,请确认证书资源的状态为“有效”。如需了解详情,请参阅 Google 管理的 SSL 证书资源状态。 然后测试指向负载均衡器的 IP 地址的网域。例如:

      curl -s https://test.example.com
      
  5. 测试非 Google Cloud 端点取决于您通过混合 NEG 端点公开的服务。

其他配置

本部分对配置示例进行了扩展,以提供一些额外的替代配置选项。所有任务均为可选任务。您可以按任意顺序执行这些任务。

更新客户端 HTTP keepalive 超时

前面步骤中创建的负载均衡器已配置客户端 HTTP keepalive 超时的默认值。如需更新客户端 HTTP keepalive 超时,请按照以下说明操作。

控制台

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

    转到“负载均衡”

  2. 点击要修改的负载均衡器的名称。
  3. 点击修改
  4. 点击前端配置
  5. 展开高级功能。对于 HTTP keepalive 超时,请输入 5 到 1,200 秒的超时值。
  6. 点击更新
  7. 如需查看更改,请点击查看并最终确定,然后点击更新

gcloud

对于 HTTP 负载均衡器,请使用 gcloud compute target-http-proxies update 命令更新目标 HTTP 代理:

    gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

对于 HTTPS 负载均衡器,请使用 gcloud compute target-https-proxies update 命令更新目标 HTTPS 代理:

    gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

请替换以下内容:

  • TARGET_HTTP_PROXY_NAME:目标 HTTP 代理的名称。
  • TARGET_HTTPS_PROXY_NAME:目标 HTTPS 代理的名称。
  • HTTP_KEEP_ALIVE_TIMEOUT_SEC:HTTP keepalive 超时值(5 到 1200 秒)。

后续步骤