本文档介绍了如何创建全球外部应用负载均衡器,该负载均衡器的后端服务和后端存储桶位于与负载均衡器的前端和网址映射不同的项目中。这种部署模式称为跨项目服务引用。
本文档中使用的示例未采用共享 VPC 环境来配置跨项目服务引用。如需详细了解如何在共享 VPC 环境中配置跨项目服务引用,请参阅设置使用共享 VPC 的全球外部应用负载平衡器。
准备工作
确保您的设置符合以下前提条件。
所需的 IAM 角色和权限
如需按照本指南操作,您必须拥有以下 IAM 角色:
任务 | 所需角色 |
---|---|
创建项目 | Project Creator 角色 (roles/resourcemanager.projectCreator )
|
创建计算资源 | Compute Network Admin 角色 (roles/compute.networkAdmin )
|
创建 Cloud Storage 存储桶 | Storage Object Admin 角色 (roles/storage.objectAdmin )
|
使用其他项目中的资源 |
在此示例中,项目 B 的管理员必须向项目 A 的管理员授予 Compute Load Balancer Services User 角色 ( 如需详细了解如何分配此角色,请参阅向 Compute Load Balancer Admin 授予使用后端服务的权限。 |
创建 Trusted Cloud by S3NS 项目
对于本文档中的示例,请按照说明操作两次,以创建两个 Trusted Cloud by S3NS 项目。
控制台
如需创建新项目,请执行以下操作:
-
前往 Trusted Cloud 控制台中的管理资源页面。
其余步骤会显示在 Trusted Cloud 控制台中。
- 在页面顶部的选择组织下拉列表中,选择要在其中创建项目的组织资源。如果您使用的是免费试用版,请跳过此步骤,因为系统不会显示此列表。
- 点击创建项目。
- 在显示的新建项目窗口中,输入项目名称并选择适用的结算账号。项目名称只能包含字母、数字、英文单引号、连字符、空格或英文感叹号,且长度必须介于 4 到 30 个字符之间。
- 在位置框中输入父级组织或文件夹资源。该资源将是新项目的分层父级。如果可以选择无组织,那么您也可以选择该选项,将新项目作为其自身资源层次结构的顶层进行创建。
- 输入完新项目的详细信息后,点击创建。
gcloud
-
In the Trusted Cloud console, activate Cloud Shell.
At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
如需创建新项目,请使用
gcloud projects create
命令:gcloud projects create PROJECT_ID
其中 PROJECT_ID 是您要创建的项目的 ID。项目 ID 必须以小写字母开头,只能包含 ASCII 字母、数字和连字符,并且长度必须介于 6 到 30 个字符之间。
设置概览
如下图所示,全球外部应用负载均衡器的前端和网址映射是在与负载均衡器的后端服务和后端存储桶不同的项目中创建的。此类跨项目部署不使用共享 VPC 环境。
在此配置中,网址映射会将对静态内容 (/images/*
) 的请求路由到后端存储桶,而所有其他请求都会路由到默认后端服务。
下表简要介绍了在项目 A 和项目 B 中创建的资源。负载均衡器的前端和网址映射在项目 A 中创建,而后端组件在项目 B 中创建。
在项目 A 中创建的资源 | 在项目 B 中创建的资源 |
---|---|
|
|
在以下部分中,我们将配置上表中列出的不同资源,首先在项目 B 中为负载均衡器的后端虚拟机配置 VPC 网络和子网。
在项目 B 中为负载均衡器的后端虚拟机配置网络和子网
在此示例中,后端虚拟机是在以下网络和子网中创建的:
网络。网络是名为
lb-network
的自定义模式 VPC 网络。负载均衡器的后端虚拟机子网:
us-west1
区域中名为lb-backend-subnet
的子网使用10.1.2.0/24
作为其主要 IP 地址范围。子网的主要和次要 IPv4 地址范围是区域内部 IPv4 地址。如需了解详情,请参阅有效的 IPv4 范围。
控制台
在 Trusted Cloud 控制台中,前往 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
lb-network
。在子网部分中,将子网创建模式设置为自定义。
在新子网部分中,输入以下信息:
- 名称:
lb-backend-subnet
- 选择区域:
us-west1
- IP 地址范围:
10.1.2.0/24
- 名称:
点击完成。
点击创建。
gcloud
使用
gcloud compute networks create
命令创建一个名为lb-network
的自定义 VPC 网络。gcloud compute networks create lb-network \ --subnet-mode=custom \ --project=PROJECT_B_ID
使用
gcloud compute networks subnets create
命令在us-west1
区域的lb-network
VPC 网络中创建子网。gcloud compute networks subnets create lb-backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1 \ --project=PROJECT_B_ID
在项目 B 中配置后端服务
如需配置后端服务,您需要执行以下操作:
- 创建一个实例模板。
- 创建实例组。
- 创建健康检查。
- 创建防火墙规则。
- 创建后端服务。
创建实例模板
创建托管式实例组的前提是创建实例模板,该模板是一种可用于创建虚拟机 (VM) 实例的资源。来自客户端的流量在经过负载均衡处理后会传送到实例组中的虚拟机。托管式实例组提供了运行外部应用负载均衡器的后端服务器的虚拟机。在此示例中,后端会传送其各自的主机名。
控制台
在 Trusted Cloud 控制台中,前往 Compute Engine 的实例模板页面。
点击创建实例模板。
对于名称,输入
backend-template
。在启动磁盘部分,确保将该启动磁盘设置为 Debian 映像,例如 Debian GNU/Linux 12 (bookworm)。如有必要,请点击更改以更改映像。
展开高级选项部分。
展开网络并配置以下字段:
- 对于网络标记,请输入
load-balanced-backend
。 - 在网络接口部分中,配置以下字段:
- 网络:
lb-network
- 子网:
lb-backend-subnet
- IP 栈类型:IPv4
- 网络:
- 点击完成。
- 对于网络标记,请输入
展开管理。 在启动脚本字段中,输入以下脚本:
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl # Retrieve the instance name from metadata vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" # Create an index file echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html # Restart Apache to apply changes systemctl restart apache2' \
点击创建。
gcloud
创建一个实例模板。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --region=us-west1 \ --network=projects/PROJECT_B_ID/global/networks/lb-network \ --subnet=projects/PROJECT_B_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 # Retrieve the instance name from metadata vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" # Create an index file echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html # Restart Apache to apply changes systemctl restart apache2' \ --project=PROJECT_B_ID
创建代管式实例组
控制台
在 Trusted Cloud 控制台中,前往 Compute Engine 的实例组页面。
点击创建实例组。
从选项中选择新的托管式实例组(无状态)。
输入
lb-backend
作为该实例组的名称。从实例模板列表中,选择您在上一步中创建的实例模板
backend-template
。在位置部分中,选择单个可用区,然后输入以下值:
对于区域,请选择
us-west1
。对于可用区,请选择
us-west1-a
。
在自动扩缩部分中,输入以下值:
对于自动扩缩模式,选择“开启:在实例组中添加和移除实例”。
在实例数下限部分,选择
2
。在实例数上限部分,选择
3
。
在端口映射部分中,点击添加端口,然后输入以下值:
在端口名称部分,输入
http
。在端口号部分,输入
80
。
点击创建。
gcloud
创建托管式实例组并选择您在上一步中创建的实例模板:
gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --zone=us-west1-a \ --size=2 \ --template=INSTANCE_TEMPLATE_NAME \ --project=PROJECT_B_ID
向该实例组添加已命名端口:
gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME \ --named-ports=http:80 \ --zone=us-west1-a \ --project=PROJECT_B_ID
创建健康检查
健康检查是用来确认后端可用性的测试。创建一个健康检查,使其使用端口 80 上的 HTTP 协议和探测。稍后,您需要将此健康检查附加到负载均衡器引用的后端服务。
控制台
在 Trusted Cloud 控制台中,前往 Compute Engine 的健康检查页面。
输入
lb-health-check
作为该健康检查的名称。将协议设置为 HTTP。
点击创建。
gcloud
创建 HTTP 健康检查。
gcloud compute health-checks create http lb-health-check \ --use-serving-port \ --project=PROJECT_B_ID
创建防火墙规则
对于健康检查探测,您必须在网络级创建入站允许防火墙规则,在本示例中,该规则为 lb-network
。此防火墙规则允许健康检查探测到达您的后端实例。此示例使用以下防火墙规则:
fw-allow-health-check
。入站流量规则,适用于正在进行负载均衡的实例,允许来自 Trusted Cloud健康检查系统(130.211.0.0/22
和35.191.0.0/16
)的所有 TCP 流量。此示例使用目标标记load-balanced-backend
来标识该规则应该应用于的实例。
控制台
在 Trusted Cloud 控制台中,前往防火墙政策页面。
点击创建防火墙规则,以创建允许在客户端虚拟机上进行传入 SSH 连接的规则:
- 名称:
fw-allow-health-check
- 网络:
lb-network
- 流量方向:入站
- 对匹配项执行的操作:允许
- 目标:指定的目标标记
- 目标标记:
load-balanced-backend
- 来源过滤条件:IPv4 范围
- 来源 IPv4 范围:
130.211.0.0/22
和35.191.0.0/16
- 协议和端口:
- 选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
80
作为端口号。最佳实践是将此规则限制为仅使用与健康检查所使用的协议和端口匹配的协议和端口。如果您使用 tcp:80 作为协议和端口,则 Trusted Cloud by S3NS 可以使用 HTTP 协议通过端口 80 联系您的虚拟机,但无法使用 HTTPS 协议通过端口 443 联系这些虚拟机。
- 名称:
点击创建。
gcloud
创建
fw-allow-health-check
防火墙规则以允许Trusted Cloud 健康检查。本示例允许来自健康检查探测工具的所有 TCP 流量。但是,您可以根据自己的需求配置一组较小范围的端口。gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --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 \ --project=PROJECT_B_ID
创建后端服务
创建一个全球后端服务以在后端之间分配流量:在执行此步骤的过程中,您需要将创建的健康检查分配给此后端服务,并将实例组作为后端添加到此后端服务。
控制台
在 Trusted Cloud 控制台中,前往负载均衡页面。
前往后端部分。
点击创建后端服务。
对于全球后端服务,点击该服务旁边的创建按钮。
在后端服务名称部分,输入
cross-ref-backend-service
。对于后端类型,选择实例组。
将协议设置为 HTTP。
在已命名的端口字段中,输入
http
。 该名称与您在创建托管式实例组时输入的端口名称相同。如需将后端添加到后端服务,请执行以下操作:
在后端部分中,将实例组设置为
lb-backend
,即您在之前步骤中创建的托管式实例组。在端口号部分,输入
80
。如需添加后端,请点击完成。
如需添加健康检查,请在健康检查列表中,选择
lb-health-check
,即您之前创建的健康检查。如需创建后端服务,请点击创建。
gcloud
创建一个全球后端服务以在后端之间分配流量:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=HEALTH_CHECK_NAME \ --global \ --project=PROJECT_B_ID
将您的实例组作为后端添加到后端服务:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-zone=us-west1-a \ --global \ --project=PROJECT_B_ID
在项目 B 中配置后端存储桶
如需创建后端存储桶,您需要执行以下操作:
- 创建 Cloud Storage 存储桶。
- 将内容复制到存储桶。
- 将存储桶设为可公开访问。
- 创建后端存储桶并将其指向 Cloud Storage 存储桶。
创建 Cloud Storage 存储桶
控制台
gcloud
使用
gcloud storage buckets create
命令在us-east1
区域中创建存储桶。gcloud storage buckets create gs://BUCKET_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=PROJECT_B_ID
将变量 BUCKET_NAME 替换为您的 Cloud Storage 存储桶名称。
将图形文件复制到 Cloud Storage 存储桶
在 Cloud Shell 中运行以下命令,将存储桶名称变量替换为您的唯一 Cloud Storage 存储桶名称,以将图形文件从公共 Cloud Storage 存储桶复制到您自己的 Cloud Storage 存储桶中的 images/
文件夹:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/images/
将 Cloud Storage 存储桶设为可公开读取
如需将存储桶中的所有对象设为可供公共互联网上的所有人读取,请为主账号 allUsers
授予 Storage Object Viewer 角色 (roles/storage.objectViewer
)。
控制台
要授予所有用户查看存储桶中对象的权限,请对每个存储桶重复执行以下过程:
- 在 Trusted Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,点击您要设为公开的存储桶的名称。
选择页面顶部附近的权限标签。
在权限部分中,点击
授予访问权限按钮。 系统会显示授予访问权限对话框。在新的主账号字段中,输入
allUsers
。在选择角色字段的过滤条件框中输入
Storage Object Viewer
,然后从过滤后的结果中选择 Storage Object Viewer。点击保存。
点击允许公开访问。
gcloud
如需授予所有用户查看存储桶中对象的权限,请运行 buckets add-iam-policy-binding
命令。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
将存储桶名称变量替换为您的唯一 Cloud Storage 存储桶名称。
创建后端存储桶
后端存储分区充当您之前创建的 Cloud Storage 存储分区的封装容器。它们将传入的流量定向到 Cloud Storage 存储分区。
控制台
在 Trusted Cloud 控制台中,前往负载均衡页面。
前往后端部分。
点击创建后端存储桶。
为后端存储桶输入名称。
选择一个 Cloud Storage 存储桶,以指向您的后端存储桶。
点击创建。
gcloud
在项目 B 中使用 gcloud compute backend-buckets create
命令创建后端存储桶。
gcloud compute backend-buckets create BACKEND_BUCKET_NAME \ --gcs-bucket-name=BUCKET_NAME \ --project=PROJECT_B_ID
在项目 A 中配置负载均衡器的前端组件
本部分介绍了如何在项目 A 中配置以下负载均衡器前端组件:
- IP 地址
- 单个 SSL 证书
- 网址映射
- 目标代理
- 转发规则
预留负载均衡器的 IP 地址
预留一个可分配给负载均衡器的转发规则的全球静态外部 IP 地址。
控制台
在 Trusted Cloud 控制台中,前往 VPC 的 IP 地址页面。
点击预留外部静态 IP 地址。
对于名称,输入
cross-ref-ip-address
。将网络服务层级设置为优质。
将 IP 版本设置为 IPv4。
将类型设置为全局。
点击预留。
gcloud
创建全球静态外部 IP 地址。
gcloud compute addresses create IP_ADDRESS_NAME \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global \ --project=PROJECT_A_ID
设置 SSL 证书资源
在此示例中,您可以使用 HTTP 或 HTTPS 作为客户端与负载均衡器之间的请求和响应协议。如需创建 HTTPS 负载均衡器,您必须向该负载均衡器的前端添加 SSL 证书资源。
按照以下文档中的说明创建 SSL 证书资源:
我们建议您使用 Google 管理的证书。
创建证书后,您可以将证书附加到 HTTPS 目标代理。
配置全球外部应用负载平衡器的组件
控制台
选择负载均衡器类型
在 Trusted Cloud 控制台中,前往负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 在负载均衡器世代字段中,选择全球外部应用负载均衡器,然后点击下一步。
- 点击配置。
基本配置
- 输入负载均衡器的名称。
- 让页面保持打开状态以继续操作。
配置前端
对于 HTTP:
- 点击前端配置。
- 输入转发规则的名称。
- 将协议设置为
HTTP
。 - 选择您在预留负载均衡器的 IP 地址中创建的 IP 地址。
- 将端口设置为
80
。 - 点击完成。
对于 HTTPS:
如果您在客户端和负载平衡器之间使用 HTTPS,则需要一个或多个 SSL 证书资源来配置代理。如需了解如何创建 SSL 证书资源,请参阅 SSL 证书。
- 点击前端配置。
- 输入转发规则的名称。
- 在协议字段中,选择
HTTPS (includes HTTP/2)
。 - 选择您在预留负载均衡器的 IP 地址中创建的 IP 地址。
- 确保将端口设置为
443
,以允许 HTTPS 流量。 - 点击证书列表。
- 选择您之前创建的 SSL 证书的名称。
- 点击完成。
配置后端
- 点击后端配置。
- 点击跨项目后端服务。
- 对于项目 ID,输入项目 B 的项目 ID。
- 从选择后端服务列表中,选择您要使用的项目 B 中的后端服务。
- 点击确定。
配置路由规则
点击路由规则。
对于模式,选择高级主机和路径规则。
选择添加主机和路径规则。
在主机字段中,输入
*
以匹配所有主机名。在补丁匹配器部分中,输入以下 YAML 配置。
defaultService: projects/PROJECT_B_ID/global/backendServices/BACKEND_SERVICE_NAME name: PATH_MATCHER_NAME pathRules: - paths: - /images/* service: projects/PROJECT_B_ID/global/backendBuckets/BACKEND_BUCKET_NAME
在此示例中,路径匹配器由路径规则和默认服务组成。路径规则会将对
/images/*
的所有请求路由到后端存储桶。其他所有请求都会路由到默认后端服务。点击完成。
如需了解流量管理,请参阅流量管理概览。
检查并最终确定配置
查看您在前面的步骤中配置的负载均衡器的不同组件。您会注意到,后端部分同时引用了后端服务和后端存储桶。
点击创建。
gcloud
如需使用 gcloud CLI 创建上述负载均衡组件,请按照以下步骤操作:
使用
gcloud compute url-maps create
命令创建网址映射。gcloud compute url-maps create URL_MAP_NAME \ --default-service=projects/PROJECT_B_ID/global/backendServices/BACKEND_SERVICE_NAME \ --global \ --project=PROJECT_A_ID
为网址映射添加路径匹配器。在此示例中,路径匹配器由路径规则和默认服务组成。路径规则会将所有针对
/images/*
的请求路由到后端存储桶。其他所有请求都会路由到默认后端服务。gcloud compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=PATH_MATCHER_NAME \ --default-service=projects/PROJECT_B_ID/global/backendServices/BACKEND_SERVICE_NAME \ --backend-bucket-path-rules=/images/*=projects/PROJECT_B_ID/global/backendBuckets/BACKEND_BUCKET_NAME
使用
gcloud compute target-http-proxies create
命令创建目标代理。对于 HTTP 流量,请创建目标 HTTP 代理以将请求路由到网址映射:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --global \ --project=PROJECT_A_ID
对于 HTTPS 流量,请创建目标 HTTPS 代理以将请求路由到网址映射。该代理属于负载均衡器,包含用于 HTTPS 负载均衡器的 SSL 证书。创建证书后,您可以将该证书附加到 HTTPS 目标代理。
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --url-map=URL_MAP_NAME \ --ssl-certificates=CERTIFICATE_NAME \ --global \ --project=PROJECT_A_ID
将
CERTIFICATE_NAME
替换为 SSL 证书的名称。使用
gcloud compute forwarding-rules create
命令创建全局转发规则。对于 HTTP 流量,请创建全球转发规则以将传入请求路由到 HTTP 目标代理:
gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --address=IP_ADDRESS_NAME \ --global \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --ports=80 \ --project=PROJECT_A_ID
对于 HTTPS 流量,请创建全球转发规则以将传入请求路由到 HTTPS 目标代理:
gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --address=IP_ADDRESS_NAME \ --global \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --ports=443 \ --project=PROJECT_A_ID
测试负载均衡器
负载均衡器可能需要几分钟时间才能完成配置,之后您便可以向负载均衡器发送请求。在此示例中,请求会发送到负载均衡器的 HTTP 转发规则。
获取负载均衡器的 HTTP 转发规则的 IP 地址。
gcloud compute forwarding-rules describe HTTP_FORWARDING_RULE_NAME \ --global
如果您将浏览器指向 http://IP_ADDRESS,请求会路由到后端服务,该服务会返回一个包含后端实例最少信息的网页。
不过,如果您将浏览器指向 http://IP_ADDRESS/images/three-cats.jpg,对 /images/*
的请求会路由到后端存储桶,后者会返回图形文件。