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

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

  • 第一个示例中,负载均衡器的前端和后端组件在一个服务项目中创建。
  • 第二个示例中,负载均衡器的前端组件和网址映射在一个服务项目中创建,而负载均衡器的后端服务和后端在其他服务中创建。这种类型的部署(其中一个项目中的网址映射引用另一个项目中的后端服务)称为跨项目服务引用

这两个示例都需要相同的初始配置来授予权限、在宿主项目中配置网络和子网,并设置共享 VPC,然后才能开始创建负载均衡器。

这些不是全球外部应用负载均衡器唯一支持的共享 VPC 配置。如需了解其他有效的共享 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

引用跨项目后端服务

如果您的负载均衡器需要引用其他服务项目中的后端服务(也称为跨项目服务引用),则负载均衡器管理员将需要在其中创建后端服务的服务项目中的以下角色。

授予的服务项目中的角色
任务 所需角色
使用其他项目中的服务的权限 Load Balancer Services User

可以在项目级层或针对个别后端服务授予此角色。如需了解如何授予此角色,请参阅本页面上的跨项目服务引用示例

如需详细了解 IAM,请参阅以下指南:

前提条件

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

  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-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 12 (bookworm)。如有必要,请点击更改以更改映像。

  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-12 \
        --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,您的浏览器将显示警告。您必须明确指示浏览器接受自签名证书。

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

为跨项目后端服务配置负载均衡器

本部分介绍了如何在共享 VPC 环境中配置具有跨项目后端服务的负载均衡器。

准备工作

本页面上的上一个示例展示了如何设置所有负载均衡器组件及其后端都在一个服务项目中创建的共享 VPC 部署。借助全球外部应用负载平衡器,您还可以配置一个宿主项目或服务项目中的网址映射可引用位于共享 VPC 环境的多个服务项目中的后端服务(和后端)的共享 VPC 部署。

您可以参考本部分中的步骤来配置此处列出的任何受支持组合:

  • 宿主项目中的转发规则、目标代理和网址映射,以及服务项目中的后端服务
  • 一个服务项目中的转发规则、目标代理和网址映射,以及另一个服务项目中的后端服务

虽然本部分使用共享 VPC 环境来配置跨项目部署,但并非必须使用共享 VPC 环境。对于全球外部应用负载均衡器,负载均衡器前端可以引用同一组织中任何项目中的后端服务或后端存储分区。

设置要求

如果尚未执行此操作,您必须完成设置共享 VPC 的所有必要步骤,并配置此示例所需的网络、子网和防火墙规则。如需查看相关说明,请参阅本页面开头的以下部分:

在此设置中,转发规则、目标代理和网址映射位于一个服务项目中,而后端服务和后端位于另一个服务项目中。

  1. 在服务项目 B 中,您将配置以下后端资源:
    • 代管式实例组后端
    • 健康检查
    • 全球后端服务
  2. 在服务项目 A 中,您将配置以下前端资源:
    • IP 地址
    • 单个 SSL 证书
    • 网址映射
    • 目标代理
    • 转发规则

下图描绘了一个全球外部应用负载均衡器,其中,一个服务项目中的负载均衡器的后端服务由另一个服务项目中的网址映射引用。

不同服务项目中的负载均衡器前端和后端组件
图 2. 不同服务项目中的负载均衡器前端和后端

具有全球外部应用负载均衡器的跨项目服务引用不要求后端实例属于同一 VPC 网络或共享 VPC 网络。

在此示例中,服务项目中的后端虚拟机属于在宿主项目中创建的共享 VPC 网络。但是,您也可以在服务项目中设置独立的 VPC 网络(即非共享 VPC 网络)以及所需的防火墙规则。然后,您可以创建属于此独立 VPC 网络的后端实例(例如实例组)。创建后端实例后,您可以按照其余步骤操作(如以上示例所示),在服务项目中创建后端服务,然后使用跨项目服务引用将其连接到另一个服务项目中的网址映射。

在服务项目 B 中配置负载均衡器的后端组件

在本部分中,您需要在服务项目 B 中配置以下后端资源:

  • 托管式实例组
  • 健康检查
  • 全球后端服务

创建代管式实例组后端

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

控制台

创建实例模板

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

    转到“实例模板”

  2. 点击创建实例模板

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

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

  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-12 \
        --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_B_ID
    
  2. 创建托管式实例组并选择您在上一步中创建的实例模板:

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

    gcloud compute instance-groups set-named-ports lb-backend \
        --named-ports=http:80 \
        --zone=us-west1-a \
        --project=SERVICE_PROJECT_B_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_B_ID

创建全球后端服务

创建一个全球后端服务以在后端之间分配流量:在执行此步骤的过程中,您需要将创建的健康检查分配给此后端服务,并将实例组作为后端添加到此后端服务。

控制台

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

    进入“负载均衡”

  2. 前往后端部分。

  3. 点击创建后端服务

  4. 对于全球后端服务,点击该服务旁边的创建按钮。

  5. 在后端服务名称部分,输入 cross-ref-backend-service

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

  7. 协议设置为 HTTP

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

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

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

    2. 端口号部分,输入 80

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

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

  11. 可选:在添加权限部分,输入其他项目中具有 Compute Load Balancer Admin 角色 (roles/compute.loadBalancerAdmin) 的 IAM 主账号(通常是电子邮件地址),以便他们能够为自己项目中的负载平衡器使用此后端服务。如果没有添加此权限,则无法进行跨项目服务引用。

    如果您无权为此项目中的后端服务设置访问权限控制政策,现在仍可以创建后端服务,并且授权用户稍后可以执行此步骤,如向 Compute Load Balancer 管理员授予使用后端服务的权限部分中所述。本部分还介绍了如何授予对此项目中全部后端服务的访问权限,这样就避免了每次创建新的后端服务时都需要单独授予访问权限这一繁琐步骤。

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

gcloud

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

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

    gcloud compute backend-services add-backend cross-ref-backend-service \
        --instance-group=lb-backend \
        --instance-group-zone=us-west1-a \
        --global \
        --project=SERVICE_PROJECT_B_ID
    

在服务项目 A 中配置负载均衡器的前端组件

在本部分中,您需要在服务项目 A 中配置以下前端资源:

  • IP 地址
  • 单个 SSL 证书
  • 网址映射
  • 目标代理
  • 转发规则

预留负载均衡器的 IP 地址

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

控制台

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

    转到“IP 地址”

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

  3. 对于名称,输入 cross-ref-ip-address

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

  5. IP 版本设置为 IPv4

  6. 类型设置为全局

  7. 点击预留

gcloud

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

gcloud compute addresses create cross-ref-ip-address \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global \
    --project=SERVICE_PROJECT_A_ID

设置 SSL 证书资源

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

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

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

创建前端组件

控制台

开始配置

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

    转到“负载均衡”

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

基本配置

  1. 输入负载均衡器的名称cross-ref-lb-shared-vpc
  2. 让页面保持打开状态以继续操作。

配置前端

对于 HTTP

  1. 点击前端配置
  2. 输入转发规则的名称cross-ref-http-forwarding-rule
  3. 协议设置为 HTTP
  4. 选择您在预留负载均衡器的 IP 地址步骤创建的 IP 地址(即 cross-ref-ip-address)。
  5. 端口设置为 80
  6. 点击完成

对于 HTTPS

如果您在客户端和负载均衡器之间使用 HTTPS,则需要一个或多个 SSL 证书资源来配置代理。如需了解如何创建 SSL 证书资源,请参阅 SSL 证书。区域级外部应用负载均衡器不支持 Google 管理的证书。

  1. 点击前端配置
  2. 输入转发规则的名称cross-ref-https-forwarding-rule
  3. 协议字段中,选择 HTTPS (includes HTTP/2)
  4. 选择您在预留负载均衡器的 IP 地址步骤创建的 IP 地址(即 cross-ref-ip-address)。
  5. 确保将端口设置为 443,以允许 HTTPS 流量。
  6. 点击证书列表。
    1. 如果您已经拥有要用作主要 SSL 证书的自行管理的 SSL 证书资源,请从菜单中选择该证书。
    2. 否则,请选择创建新证书
      1. 输入 SSL 证书的名称
      2. 在相应字段中上传您的 PEM 格式的文件:
        • 公钥证书
        • 证书链
        • 私钥
      3. 点击创建
  7. 如需添加除了主要 SSL 证书资源之外的其他证书资源,请执行以下操作:
    1. 点击添加证书
    2. 证书列表中选择一个证书,或点击创建新证书并按照上述说明操作。
  8. 点击完成

配置后端

  1. 点击后端配置
  2. 点击跨项目后端服务
  3. 对于项目 ID,输入服务项目 B 的项目 ID
  4. 选择后端服务列表中,选择您要使用的服务项目 B 中的后端服务。对于此示例,输入 cross-ref-backend-service
  5. 点击确定

配置路由规则

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

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

检查并最终确定配置

  • 点击创建

gcloud

  1. 可选:在创建包含交叉引用后端服务的负载均衡器之前,请先确定您要引用的后端服务是否可以使用网址映射进行引用:

    gcloud compute backend-services list-usable \
        --global \
        --project=SERVICE_PROJECT_B_ID
    
  2. 创建网址映射以将传入请求路由到相应后端服务:

    gcloud compute url-maps create cross-ref-url-map \
        --default-service=projects/SERVICE_PROJECT_B_ID/global/backendServices/cross-ref-backend-service \
        --global \
        --project=SERVICE_PROJECT_A_ID
    
  3. 创建目标代理。

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

    gcloud compute target-http-proxies create cross-ref-http-proxy \
        --url-map=cross-ref-url-map \
        --global \
        --project=SERVICE_PROJECT_A_ID
    

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

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

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

    gcloud compute forwarding-rules create cross-ref-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=cross-ref-ip-address \
        --global \
        --target-http-proxy=cross-ref-http-proxy \
        --ports=80 \
        --project=SERVICE_PROJECT_A_ID
    

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

    gcloud compute forwarding-rules create cross-ref-https-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=cross-ref-ip-address \
        --global \
        --target-https-proxy=cross-ref-https-proxy \
        --ports=443 \
        --project=SERVICE_PROJECT_A_ID
    

向 Compute Load Balancer 管理员授予使用后端服务的权限

如果您希望负载均衡器引用其他服务项目中的后端服务,则 Load Balancer Admin 必须具有 compute.backendServices.use 权限。如需授予此权限,您可以使用名为 Compute Load Balancer Services User (roles/compute.loadBalancerServiceUser) 的预定义 IAM 角色。此角色必须由服务项目管理员授予,可以在项目级层或个别后端服务级层应用。

如果您在创建后端服务时已在后端服务级层授予了所需的权限,则不需要执行此步骤。您可以跳过此部分,也可以继续阅读此部分以了解如何授予对项目中所有后端服务的访问权限,这样您就无需在每次创建新的后端服务时都授予访问权限。

在此示例中,服务项目 B 中的 Service Project Admin 必须运行以下任一命令,以向服务项目 A 中的 Load Balancer Admin 授予 compute.backendServices.use 权限。可以在项目级层(针对项目中的所有后端服务)授予该权限,也可以针对个别后端服务授予该权限。

控制台

项目级权限

请按照以下步骤授予对项目中所有后端服务的权限。

您需要拥有 compute.backendServices.setIamPolicyresourcemanager.projects.setIamPolicy 权限才能完成此步骤。

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

    转到 IAM

  2. 选择您的项目。

  3. 点击 授予访问权限

  4. 新的主账号字段中,输入主账号的电子邮件地址或其他标识符。

  5. 选择角色列表中,选择 Compute Load Balancer Services User

  6. 可选:为角色添加条件

  7. 点击保存

针对个别后端服务的资源级权限

请按照以下步骤授予对项目中个别后端服务的权限。

您需要拥有 compute.backendServices.setIamPolicy 权限才能完成此步骤。

  1. 在 Google Cloud 控制台中,前往后端页面。

    前往“后端”

  2. 从后端列表中,选择要授予访问权限的后端服务,然后点击 权限

  3. 点击 添加主账号

  4. 新的主账号字段中,输入主账号的电子邮件地址或其他标识符。

  5. 选择角色列表中,选择 Compute Load Balancer Services User

  6. 点击保存

gcloud

项目级权限

请按照以下步骤授予对项目中所有后端服务的权限。

您需要拥有 compute.backendServices.setIamPolicyresourcemanager.projects.setIamPolicy 权限才能完成此步骤。

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser"

针对个别后端服务的资源级权限

在后端服务级层,服务项目管理员可以使用以下任一命令来授予 Compute Load Balancer Services User 角色 (roles/compute.loadBalancerServiceUser)

您需要拥有 compute.backendServices.setIamPolicy 权限才能完成此步骤。

gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/us-west1/backend-services/BACKEND_SERVICE_NAME",title=Shared VPC condition'

gcloud compute backend-services add-iam-policy-binding BACKEND_SERVICE_NAME \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --project=SERVICE_PROJECT_B_ID \
    --region=us-west1

如需使用这些命令,请将 LOAD_BALANCER_ADMIN 替换为用户的主账号,例如 test-user@gmail.com

通过使用条件并指定条件特性,您还可以配置 IAM 权限,使其仅应用于部分区域后端服务。

测试负载均衡器

配置负载均衡器可能需要几分钟的时间。当负载均衡服务运行时,您可以将流量发送到服务项目 A 中的转发规则,并发现流量被分散到服务项目 B 中的不同虚拟机实例。

控制台

  1. 在 Google Cloud 控制台中,进入服务项目 A 中的负载均衡页面。

    进入“负载均衡”

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

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

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

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

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

gcloud

请记下预留的 IP 地址:

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

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

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

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

后续步骤