设置使用共享 VPC 的全球外部应用负载均衡器

本文档展示了在共享 VPC 环境中设置具有虚拟机实例组后端的全球外部应用负载均衡器的示例配置。

示例中,负载均衡器的前端和后端组件在一个服务项目中创建。

如果您不想使用共享 VPC 网络,请参阅设置具有虚拟机实例组后端的全球外部应用负载均衡器

须知事项

所需权限

在共享 VPC 网络上设置负载均衡器需要管理员进行一些初始设置和预配。完成初始设置后,服务项目所有者可执行以下操作之一:

  • 在服务项目中部署负载均衡器的所有组件及其后端。
  • 在可由其他服务或宿主项目中的网址映射引用的服务项目中部署负载均衡器的后端组件(后端服务和后端)。

本部分汇总了按照本指南在共享 VPC 网络上设置负载均衡器所需的权限。

设置共享 VPC

以下任务需要以下角色:

  1. 执行一次性管理任务,例如设置共享 VPC 和启用宿主项目。
  2. 执行管理任务:每次您想要添加新的服务项目时都必须重复执行这些管理任务。这包括关联服务项目、预配和配置网络资源以及向服务项目管理员授予访问权限。

这些任务必须在共享 VPC 宿主项目中执行。我们建议 Shared VPC Admin 也成为共享 VPC 宿主项目的所有者。这将自动授予 Network Admin 和 Security Admin 角色。

任务 所需角色
设置共享 VPC,启用宿主项目并向服务项目管理员授予访问权限 Shared VPC Admin
在共享 VPC 宿主项目中创建子网并向服务项目管理员授予访问权限 Network Admin
添加和移除防火墙规则 Security Admin

预配子网后,宿主项目所有者必须将宿主项目中的 Network User 角色授予需要使用这些资源的任何人(通常是服务项目管理员、开发者或服务账号)。

任务 所需角色
使用属于宿主项目的 VPC 网络和子网 Network User

可以在项目级层或针对单个子网授予此角色。我们建议您针对单个子网授予此角色。如果针对项目授予此角色,则将向您授予权限来访问宿主项目的 VPC 网络中的所有当前子网和未来子网。

部署负载均衡器和后端

服务项目管理员需要服务项目中的以下角色才能创建负载均衡资源和后端。这些权限会自动授予给服务项目所有者或编辑者。

授予的服务项目中的角色
任务 所需角色
创建负载均衡器组件 Network Admin
创建实例 Instance Admin
创建和修改 SSL 证书 Security Admin

前提条件

在此部分,您需要执行以下步骤:

  1. 在宿主项目中配置网络和子网
  2. 在宿主项目中设置共享 VPC

您无需在每次创建新负载均衡器时都执行本部分中的步骤。但是,在继续创建负载均衡器之前,您必须确保可以访问此处所述的资源。

在宿主项目中配置网络和子网

您需要一个包含用于负载均衡器后端的子网的共享 VPC 网络。

此示例使用以下网络、区域和子网:

  • 网络。网络名为 lb-network

  • 用于负载均衡器的后端的子网。us-west1 区域中名为 lb-backend-subnet 的子网使用 10.1.2.0/24 作为其主要 IP 地址范围。

为负载均衡器的后端配置子网

您无需在每次创建新负载均衡器时都执行此步骤。您只需确保服务项目有权访问共享 VPC 网络中的子网。

本部分中的所有步骤都必须在宿主项目中执行。

控制台

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

    转到 VPC 网络页面

  2. 点击创建 VPC 网络
  3. 对于名称,输入 lb-network
  4. 子网部分中执行以下操作:

    1. 子网创建模式设置为自定义
    2. 新子网部分中,输入以下信息:

      • 名称lb-backend-subnet
      • 区域us-west1

      • IP 地址范围10.1.2.0/24

    3. 点击完成

  5. 点击创建

gcloud

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

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. us-west1 地区的 lb-network 网络中创建子网:

    gcloud compute networks subnets create lb-frontend-and-backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

向服务项目管理员授予对后端子网的访问权限

服务项目管理员需要 lb-backend-subnet 子网的访问权限,以便他们可以预配负载均衡器的后端。

共享 VPC 管理员必须向服务项目管理员(或者部署使用该子网的资源和后端的开发者)授予后端子网的访问权限。如需查看相关说明,请参阅有权访问部分子网的服务项目管理员

在宿主项目中配置防火墙规则

此示例使用以下防火墙规则:
  • fw-allow-health-check。适用于负载均衡实例的入站规则,该规则允许来自 Google Cloud 健康检查系统(130.211.0.0/2235.191.0.0/16)的所有 TCP 流量。此示例使用目标标记 load-balanced-backend 来标识它应该应用到的实例。
如果不使用此防火墙规则,则默认拒绝入站流量规则会阻止传入后端实例的流量。

本部分中的所有步骤都必须在宿主项目中执行。

控制台

  1. 在 Google Cloud 控制台中,转到防火墙页面。

    前往“防火墙政策”

  2. 点击创建防火墙规则以创建允许 Google Cloud 健康检查的规则:
    • 名称fw-allow-health-check
    • 网络lb-network
    • 流量方向:入站
    • 匹配时执行的操作:允许
    • 目标:指定的目标标记
    • 目标标记load-balanced-backend
    • 来源过滤条件:IPv4 范围
    • 来源 IPv4 范围130.211.0.0/2235.191.0.0/16
    • 协议和端口
      • 选择指定的协议和端口
      • 勾选 TCP,然后输入 80 作为端口号。
      • 最佳实践是将此规则限制为仅使用与健康检查所使用的协议和端口匹配的协议和端口。如果您使用 tcp:80 协议和端口,则 Google Cloud 可以使用 HTTP 通过端口 80 访问您的虚拟机,但无法使用 HTTPS 通过端口 443 访问这些虚拟机。

  3. 点击创建

gcloud

  1. 创建 fw-allow-health-check 防火墙规则以允许 Google Cloud 健康检查。本示例允许来自健康检查探测器的所有 TCP 流量。但是,您可以根据自己的需求配置一组较小范围的端口。

    gcloud compute firewall-rules create fw-allow-health-check \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=load-balanced-backend \
       --rules=tcp
    

在宿主项目中设置共享 VPC

此步骤涉及启用共享 VPC 宿主项目、共享宿主项目的子网,并将服务项目关联到宿主项目,以便服务项目可以使用共享 VPC 网络。如需在宿主项目中设置共享 VPC,请参阅以下页面:

这些说明的其余部分假定您已设置共享 VPC。这包括为您的组织设置 IAM 政策,以及指定宿主项目和服务项目。

在设置共享 VPC 并启用宿主项目和服务项目之前,请勿继续操作。

在一个服务项目中配置负载均衡器

在宿主项目中配置 VPC 网络并设置共享 VPC 后,您便可以将注意力转移到服务项目,您需要在其中创建所有负载均衡组件(后端服务、网址映射、目标代理和转发规则)以及后端。

本部分假定您已在宿主项目中执行上一部分所述的前提步骤。在本部分中,负载均衡器的前端和后端组件以及后端都在一个服务项目中创建。

下图描绘了一个服务项目中的全球外部应用负载均衡器的组件,该服务项目关联到共享 VPC 网络中的宿主项目。

一个服务项目中的负载均衡器前端和后端组件
图 1. 一个服务项目中的负载均衡器前端和后端组件

这些步骤应由服务项目管理员(或在服务项目中操作的开发者)执行,无需宿主项目管理员参与。本部分中的步骤与设置全球外部应用负载均衡器的标准步骤类似。

本页面上的示例会明确设置为全球外部应用负载均衡器的转发规则预留的 IP 地址,而不是允许分配临时 IP 地址。我们建议的最佳实践是,为转发规则预留 IP 地址。

创建代管式实例组后端

创建代管式实例组的前提是创建实例模板,该模板是一种可用于创建虚拟机 (VM) 实例的资源。来自客户端的流量在经过负载均衡处理后会传送到实例组中的虚拟机。代管式实例组提供了运行外部应用负载均衡器的后端服务器的虚拟机。在此示例中,后端会传送其各自的主机名。

控制台

创建实例模板

  1. 在 Google Cloud 控制台中,前往 Compute Engine 实例模板页面。

    转到“实例模板”

  2. 点击创建实例模板

  3. 对于名称,输入 backend-template

  4. 启动磁盘部分,确保将该启动磁盘设置为 Debian 映像,例如 Debian GNU/Linux 10 (buster)。如有必要,请点击更改以更改映像。

  5. 展开高级选项部分。

  6. 展开网络部分,然后在网络标记字段中输入 load-balanced-backend

  7. 网络接口字段中,选择与我共享的网络(通过宿主项目:HOST_PROJECT_ID

  8. 共享子网列表中,从 lb-network 网络中选择 lb-backend-subnet 子网。

  9. 展开管理部分,然后在自动化字段中指定以下启动脚本:

     #! /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
    
  10. 点击创建

创建代管式实例组

  1. 在 Google Cloud 控制台中,前往 Compute Engine 实例组页面。

    转到“实例组”

  2. 点击创建实例组

  3. 从选项中选择新的代管式实例组(无状态)

  4. 输入 lb-backend 作为该实例组的名称。

  5. 实例模板列表中,选择您在上一步中创建的实例模板 backend-template

  6. 位置部分中,选择单个可用区,然后输入以下值:

    • 对于区域,请选择 us-west1

    • 对于可用区,请选择 us-west1-a

  7. 自动扩缩部分中,输入以下值:

    • 对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”

    • 实例数下限部分,选择 2

    • 实例数上限部分,选择 3

  8. 端口映射部分中,点击添加端口,然后输入以下值:

    • 端口名称部分,输入 http

    • 端口号部分,输入 80

  9. 点击创建

gcloud

  1. 创建实例模板。

    gcloud compute instance-templates create backend-template \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-backend-subnet \
        --tags=load-balanced-backend \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --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' \
        --project=SERVICE_PROJECT_ID
    
  2. 创建托管式实例组并选择您在上一步中创建的实例模板:

    gcloud compute instance-groups managed create lb-backend \
        --zone=us-west1-a \
        --size=2 \
        --template=backend-template \
        --project=SERVICE_PROJECT_ID
    
  3. 向该实例组添加已命名端口:

    gcloud compute instance-groups set-named-ports lb-backend \
        --named-ports=http:80 \
        --zone=us-west1-a \
        --project=SERVICE_PROJECT_ID
    

创建健康检查

健康检查是用来确认后端可用性的测试。创建一个健康检查,使其使用端口 80 上的 HTTP 协议和探测。 稍后,您需要将此健康检查附加到负载均衡器引用的后端服务。

控制台

  1. 在 Google Cloud 控制台中,前往 Compute Engine 健康检查页面。

    转到“健康检查”

  2. 输入 lb-health-check 作为该健康检查的名称。

  3. 将协议设置为 HTTP

  4. 点击创建

gcloud

创建 HTTP 健康检查。

gcloud compute health-checks create http lb-health-check \
  --use-serving-port \
  --project=SERVICE_PROJECT_ID

预留负载均衡器的 IP 地址

预留一个可分配给负载均衡器的转发规则的全球静态外部 IP 地址。

控制台

  1. 在 Google Cloud 控制台中,前往 VPC IP 地址页面。

    转到“IP 地址”

  2. 点击预留外部静态 IP 地址

  3. 对于名称,输入 lb-ipv4-1

  4. 网络服务层级设置为优质

  5. IP 版本设置为 IPv4

  6. 类型设置为全局

  7. 点击预留

gcloud

创建全球静态外部 IP 地址。

gcloud compute addresses create lb-ipv4-1 \
  --ip-version=IPV4 \
  --network-tier=PREMIUM \
  --global
  --project=SERVICE_PROJECT_ID

设置 SSL 证书资源

对于使用 HTTPS 作为请求和响应协议的负载均衡器,请按照以下资源中的说明创建 SSL 证书资源:

我们建议您使用 Google 管理的证书。

此示例假定您已创建一个名为 lb-ssl-cert 的 SSL 证书。该 SSL 证书会附加到您将在以下某个步骤中创建的目标代理。

配置负载平衡器

本部分介绍了如何为全球外部应用负载均衡器创建以下资源:

  • 将代管实例组用作后端的后端服务
  • 网址映射
  • SSL 证书(仅对于 HTTPS 是必需的)
  • 目标代理
  • 转发规则

在此示例中,您可以使用 HTTP 或 HTTPS 作为客户端与负载均衡器之间的请求和响应协议。对于 HTTPS,您需要使用 SSL 证书资源来配置代理。我们建议您使用 Google 管理的证书。

控制台

开始配置

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

    转到“负载均衡”

  2. 点击创建负载均衡器
  3. 负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步
  4. 公共或内部字段中,选择公共(外部),然后点击下一步
  5. 全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步
  6. 负载均衡器世代字段中,选择全球外部应用负载均衡器,然后点击下一步
  7. 点击配置

基本配置

  1. 在负载均衡器名称字段中,输入 l7-xlb-shared-vpc

配置负载均衡器前端

对于 HTTP 流量

  1. 点击前端配置

  2. 在负载均衡器前端名称部分,输入 http-fw-rule

  3. 对于协议,选择 HTTP

  4. IP 版本设置为 IPv4

  5. IP 地址部分,选择 lb-ipv4-1,即您之前预留的 IP 地址。

  6. 端口设置为 80,以允许 HTTP 流量。

  7. 如需完成前端配置,请点击完成

  8. 先验证前端配置旁边是否有蓝色对勾标记,然后再继续操作。

对于 HTTPS 流量

  1. 点击前端配置

  2. 在负载均衡器前端名称部分,输入 https-fw-rule

  3. 对于协议,选择 HTTPS

  4. IP 版本设置为 IPv4

  5. IP 地址部分,选择 lb-ipv4-1,即您之前预留的 IP 地址。

  6. 端口设置为 443,以允许 HTTPS 流量。

  7. 证书列表中,选择您创建的 SSL 证书

  8. 如需完成前端配置,请点击完成

  9. 先验证前端配置旁边是否有蓝色对勾标记,然后再继续操作。

配置后端

  1. 点击后端配置

  2. 后端服务和后端存储桶菜单中,点击创建后端服务

  3. 在后端服务名称部分,输入 lb-backend-service

  4. 对于后端类型,选择实例组

  5. 协议设置为 HTTP

  6. 已命名的端口字段中,输入 http。 该名称与您在创建代管式实例组时输入的端口名称相同。

  7. 如需将后端添加到后端服务,请执行以下操作:

    1. 后端部分中,将实例组设置为 lb-backend,即您在之前步骤中创建的代管式实例组。

    2. 端口号部分,输入 80

    3. 如需添加后端,请点击完成

  8. 如需添加健康检查,请在健康检查列表中,选择 lb-health-check,即您之前创建的健康检查。

  9. 如需创建后端服务,请点击创建

  10. 先验证后端配置旁边是否有蓝色对勾标记,然后再继续操作。

配置路由规则

  • 点击路由规则。确保 lb-backend-service 是任何不匹配的主机和任何不匹配的路径的默认后端服务。

如需了解流量管理,请参阅设置流量管理

检查并最终确定配置

  1. 点击检查并最终确定

  2. 查看负载均衡器的前端和后端设置,确保它们已根据需要进行配置。

  3. 点击创建,然后等待负载均衡器创建完毕。

gcloud

  1. 创建一个后端服务以在后端之间分配流量:

    gcloud compute backend-services create lb-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=lb-health-check \
        --global \
        --project=SERVICE_PROJECT_ID
    
  2. 将您的实例组作为后端添加到后端服务:

    gcloud compute backend-services add-backend lb-backend-service \
        --instance-group=lb-backend \
        --instance-group-zone=us-west1-a \
        --global \
        --project=SERVICE_PROJECT_ID
    
  3. 创建网址映射以将传入请求路由到相应后端服务:

    gcloud compute url-maps create lb-map \
        --default-service=lb-backend-service \
        --global \
        --project=SERVICE_PROJECT_ID
    
  4. 创建目标代理。

    对于 HTTP 流量,请创建目标 HTTP 代理以将请求路由到网址映射:

    gcloud compute target-http-proxies create http-proxy \
        --url-map=lb-map \
        --global \
        --project=SERVICE_PROJECT_ID
    

    对于 HTTPS 流量,请创建目标 HTTPS 代理以将请求路由到网址映射。该代理属于负载均衡器,包含用于 HTTPS 负载均衡器的 SSL 证书,因此您还需要在此步骤中加载 SSL 证书

    gcloud compute target-https-proxies create https-proxy \
        --url-map=lb-map \
        --ssl-certificates=lb-ssl-cert
        --global \
        --project=SERVICE_PROJECT_ID
    
  5. 创建转发规则。

    对于 HTTP 流量,请创建全球转发规则以将传入请求路由到目标代理:

    gcloud compute forwarding-rules create http-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=lb-ipv4-1 \
        --global \
        --target-http-proxy=http-proxy \
        --ports=80 \
        --project=SERVICE_PROJECT_ID
    

    对于 HTTPS 流量,请创建全球转发规则以将传入请求路由到目标代理:

    gcloud compute forwarding-rules create https-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=lb-ipv4-1 \
        --global \
        --target-https-proxy=https-proxy \
        --ports=443 \
        --project=SERVICE_PROJECT_ID
    

测试负载均衡器

当负载均衡服务运行时,您可以将流量发送到转发规则并会发现流量被分散到不同的实例。

控制台

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

    进入“负载均衡”

  2. 点击您刚刚创建的负载均衡器。

  3. 记下负载均衡器的 IP 地址。此 IP 地址在后续步骤中称为 LB_IP_ADDRESS

  4. 后端部分中,确认虚拟机健康状况良好。

    健康状况良好列应该会填充相应信息,指示虚拟机健康状况良好,例如,如果创建了两个实例,您应该会看到一条指示 2 of 2 的消息,且该消息旁边显示绿色对勾标记。如果看不到,请先尝试重新加载页面。Google Cloud 控制台可能需要一些时间才能指示虚拟机健康状况良好。如果几分钟后后端似乎仍健康状况不佳,请查看防火墙配置以及分配给后端虚拟机的网络标记。

  5. 在 Google Cloud 控制台显示后端实例健康状况良好后,您可以通过将网络浏览器指向 https://LB_IP_ADDRESS(或 http://LB_IP_ADDRESS)来测试负载均衡器。将 LB_IP_ADDRESS 替换为负载均衡器的 IP 地址

  6. 如果您使用自签名证书来测试 HTTPS,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。

  7. 浏览器应该会呈现一个页面,其中的内容显示传送该页面的实例的名称(例如,Page served from: lb-backend-example-xxxx)。如果浏览器未呈现此页面,请查看本指南中的配置设置。

gcloud

请记下预留的 IP 地址:

gcloud compute addresses describe IP_ADDRESS_NAME \
    --format="get(address)" \
    --global

您可以通过将网络浏览器指向 https://LB_IP_ADDRESS(或 http://LB_IP_ADDRESS)来测试负载均衡器。将 LB_IP_ADDRESS 替换为负载均衡器的 IP 地址

如果您使用自签名证书来测试 HTTPS,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。

您的浏览器应会打开一个页面,其中包含有关后端实例的极少量信息。如果您的浏览器没有打开此页面,请检查本指南中的配置设置。

后续步骤