本文档展示了在共享 VPC 环境中设置regional internal Application Load Balancer (使用 Cloud Storage 存储分区)的两种示例配置:
- 第一个示例是在一个服务项目中创建所有负载均衡器组件和后端。
- 第二个示例是在一个服务项目中创建负载均衡器的前端组件和网址映射,而在其他服务项目中创建负载均衡器的后端存储桶和 Cloud Storage 存储桶。
这两个示例都需要相同的初始配置来授予所需角色并设置共享 VPC,然后才能开始创建负载平衡器。
如需详细了解其他有效的共享 VPC 架构,请参阅共享 VPC 架构。
如果您不想使用共享 VPC 网络,请参阅设置具有 Cloud Storage 存储分区的 regional internal Application Load Balancer 。
准备工作
确保您的设置符合以下前提条件。
创建 Google Cloud 项目
为 1 个宿主项目和 2 个服务项目创建 Google Cloud 项目。
所需的角色
如需获得在具有 Cloud Storage 存储分区的共享 VPC 环境中设置 regional internal Application Load Balancer 所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
设置共享 VPC,启用宿主项目并向服务项目管理员授予访问权限:
宿主项目中的 Compute Shared VPC Admin (
roles/compute.xpnAdmin) -
添加和移除防火墙规则:宿主项目的 Compute Security Admin (
roles/compute.securityAdmin) 角色 -
服务项目管理员使用共享 VPC 网络的权限:
宿主项目中的 Compute Network User (
roles/compute.networkUser) -
创建负载均衡资源:服务项目的 Compute Network Admin (
roles/compute.networkAdmin) -
创建 Compute Engine 实例:服务项目的 Compute Instance Admin (
roles/compute.instanceAdmin.v1) -
创建和修改 Compute Engine SSL 证书:
服务项目的 Compute Security Admin (
roles/compute.securityAdmin) 角色 -
创建和修改 Certificate Manager SSL 证书:
服务项目中的 Certificate Manager 所有者 (
roles/certificatemanager.owner) -
允许负载均衡器引用其他服务项目中的后端存储分区:
服务项目中的 Compute Load Balancer Services User (
roles/compute.loadBalancerServiceUser)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
设置共享 VPC 环境
如需设置共享 VPC 环境,请在宿主项目中完成以下步骤:
您无需在每次创建新负载均衡器时都执行本部分中的步骤。不过,在继续创建负载均衡器之前,您必须确保可以访问此处所述的资源。
此示例使用以下 VPC 网络、区域和代理专用子网:
网络。网络是名为
lb-network的自定义模式 VPC 网络。负载均衡器的子网。
us-east1区域中名为subnet-us的子网使用10.1.2.0/24作为其主要 IP 范围。Envoy 代理的子网。
us-east1区域中名为proxy-only-subnet-us的子网使用10.129.0.0/23作为其主要 IP 范围。
为宿主项目配置 VPC
为宿主项目配置自定义模式 VPC,并在需要配置负载平衡器转发规则的同一区域中创建子网。
您无需在每次创建新负载均衡器时都执行此步骤。您只需确保服务项目可以访问共享 VPC 网络中的子网(以及代理专用子网)。
控制台
在 Google Cloud 控制台中,前往 VPC 网络页面。
点击创建 VPC 网络。
在名称字段中,输入
lb-network。对于子网创建模式,选择自定义。
在新子网部分中,提供以下信息:
- 在名称字段中,输入
subnet-us。 - 在区域列表中,选择
us-east1。 - 在 IPv4 范围字段中,输入
10.1.2.0/24 - 点击完成。
- 在名称字段中,输入
点击创建。
gcloud
使用
gcloud compute networks create命令创建一个名为lb-network的自定义 VPC 网络。gcloud compute networks create lb-network \ --subnet-mode=custom \ --project=HOST_PROJECT_ID将
HOST_PROJECT_ID替换为分配给在共享 VPC 环境中启用为宿主项目的项目的Google Cloud 项目 ID。使用
gcloud compute networks subnets create命令在us-east1区域的lb-networkVPC 网络中创建子网。gcloud compute networks subnets create subnet-us \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-east1 \ --project=HOST_PROJECT_ID
在宿主项目中配置代理专用子网
代理专用子网提供了一组 IP 地址,供 Google Cloud 用于代表您运行 Envoy 代理。代理会终结来自客户端的连接并创建与后端的新连接。
此代理专用子网用于与 VPC 网络位于同一区域的所有基于 Envoy 的区域级负载均衡器。在每个网络中,每个区域只能有一个活跃代理专用子网用于给定用途。
在此示例中,我们将在 us-east1 区域中创建代理专用子网。
控制台
在 Google Cloud 控制台中,前往 VPC 网络页面。
点击您创建的 VPC 网络的名称。
在子网标签页中,点击添加子网,然后提供以下信息:
- 在名称字段中,输入
proxy-only-subnet-us。 - 在区域列表中,选择
us-east1。 - 对于用途,请选择 Regional Managed Proxy。
- 在 IPv4 范围字段中,输入
10.129.0.0/23。
- 在名称字段中,输入
点击 Add(添加)。
gcloud
使用
gcloud compute networks subnets create命令在us-east1区域中创建代理专用子网。gcloud compute networks subnets create proxy-only-subnet-us \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-east1 \ --network=lb-network \ --range=10.129.0.0/23 \ --project=HOST_PROJECT_ID
在宿主项目中配置防火墙规则
此示例使用 fw-allow-ssh 入站防火墙规则,该规则允许从任何地址到 TCP 端口 22 的传入 SSH 连接。您可以为此规则选择限制性更强的来源 IP 地址范围。例如,您可以仅指定要从中启动 SSH 会话的系统的 IP 范围。此示例使用目标标记 allow-ssh 来标识该防火墙规则应该应用于的虚拟机 (VM)。如果不使用上述防火墙规则,则默认拒绝入站规则会阻止传入后端实例的流量。
控制台
在 Google Cloud 控制台中,前往防火墙政策页面。
点击创建防火墙规则,以创建允许Google Cloud 健康检查的规则。
提供以下信息:
- 在名称字段中,输入
fw-allow-ssh。 - 在网络列表中,选择 lb-network。
- 对于流量方向,选择入站。
- 对于对匹配项执行的操作,选择允许。
- 在目标列表中,选择指定的目标标记。
- 在目标标记字段中,输入
allow-ssh。 - 在来源过滤条件列表中,选择 IPv4 范围。
- 在来源 IPv4 范围字段中,输入
0.0.0.0/0。 - 对于协议和端口,选择指定的协议和端口。
- 选中 TCP 复选框,然后输入
22作为端口号。
- 在名称字段中,输入
点击创建。
gcloud
创建
fw-allow-ssh防火墙规则,允许通过 SSH 连接到网络标记为allow-ssh的虚拟机。 如果省略source-ranges,则Google Cloud 会将规则解读为表示任何来源。gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22 \ --project=HOST_PROJECT_ID
在宿主项目中设置共享 VPC
启用共享 VPC 宿主项目,并将服务项目关联到宿主项目,以便服务项目可以使用共享 VPC 网络。如需在宿主项目中设置共享 VPC,请参阅以下页面:
完成上述步骤后,请完成以下任一设置:
在服务项目中配置负载均衡器
此示例会创建一个 regional internal Application Load Balancer ,其中所有负载均衡组件(转发规则、目标代理、网址映射和后端存储桶)和 Cloud Storage 存储桶都在服务项目中创建。
regional internal Application Load Balancer的网络资源(例如代理专用子网)是在宿主项目中创建的。
本部分介绍如何设置负载均衡器和后端。
此页面上的示例明确设置 regional internal Application Load Balancer转发规则的预留 IP 地址,而不是允许分配临时 IP 地址。根据最佳实践,我们建议为转发规则预留 IP 地址。
配置 Cloud Storage 存储桶
配置 Cloud Storage 存储桶的过程如下所示:
- 创建 Cloud Storage 存储分区。
- 将内容复制到存储桶。
- 将存储分区设为可公开读取。
创建 Cloud Storage 存储桶
在此示例中,您将在 us-east1 区域中创建两个 Cloud Storage 存储分区。
控制台
gcloud
使用
gcloud storage buckets create命令在us-east1区域中创建存储分区。gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_ID
gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_ID替换以下内容:
BUCKET1_NAME:您的第一个 Cloud Storage 存储桶的名称BUCKET2_NAME:第二个 Cloud Storage 存储桶的名称SERVICE_PROJECT_ID:分配给服务项目的 Google Cloud 项目 ID
将内容复制到 Cloud Storage 存储分区
如需填充 Cloud Storage 存储桶,请将图形文件从公共 Cloud Storage 存储桶复制到您自己的 Cloud Storage 存储桶。
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
将 Cloud Storage 存储桶设为可公开读取
如需将存储桶中的所有对象设为可供公共互联网上的所有人读取,请为主账号 allUsers 授予 Storage Object Viewer 角色 (roles/storage.objectViewer)。
控制台
要授予所有用户查看存储桶中对象的权限,请对每个存储桶重复执行以下过程:
- 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,选中您要设为公开的每个存储桶对应的复选框。
点击权限按钮。 系统会显示权限对话框。
在权限对话框中,点击 添加主账号按钮。 系统会显示授予访问权限对话框。
在新的主账号字段中,输入
allUsers。在选择角色字段的过滤条件框中输入
Storage Object Viewer,然后从过滤后的结果中选择 Storage Object Viewer。点击保存。
点击允许公开访问。
gcloud
如需授予所有用户查看存储桶中对象的权限,请运行 buckets add-iam-policy-binding 命令。
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME \
--member=allUsers \
--role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME \
--member=allUsers \
--role=roles/storage.objectViewer
预留静态内部 IP 地址
为负载均衡器的转发规则预留静态内部 IP 地址。如需了解详情,请参阅预留静态内部 IP 地址。
控制台
在 Google Cloud 控制台中,前往预留内部静态 IP 地址页面。
在名称字段中,输入新地址的名称。
在 IP 版本列表中,选择 IPv4。
在网络列表中,选择 lb-network。
在子网列表中,选择 subnet-us。
对于地区,选择 us-east1。
在静态 IP 地址列表中,选择自动分配。创建负载均衡器后,此 IP 地址会关联到负载均衡器的转发规则。
点击预留以预留该 IP 地址。
gcloud
如需使用
gcloud compute预留静态内部 IP 地址,请使用compute addresses create命令。gcloud compute addresses create ADDRESS_NAME \ --region=REGION \ --subnet=subnet-us \ --project=SERVICE_PROJECT_ID替换以下内容:
ADDRESS_NAME:您要用于调用此地址的名称。REGION:您要预留此地址的区域。此区域应与负载均衡器所在的区域相同。例如us-east1。SERVICE_PROJECT_ID:分配给服务项目的 Google Cloud项目 ID。
使用
compute addresses describe命令可以查看结果:gcloud compute addresses describe ADDRESS_NAME
复制返回的 IP 地址,以便在后续部分中用作
RESERVED_IP_ADDRESS。
设置 SSL 证书资源
对于使用 HTTPS 作为请求和响应协议的 regional internal Application Load Balancer ,您可以使用 Compute Engine SSL 证书或 Certificate Manager 证书创建 SSL 证书资源。
在此示例中,请按照以下其中一个文档中的说明使用 Certificate Manager 创建 SSL 证书资源:
创建证书后,您可以将证书附加到 HTTPS 目标代理。
我们建议您使用 Google 管理的证书,以减少运营开销,例如与手动证书管理相关的安全风险。
使用后端存储桶配置负载均衡器
本部分介绍如何为regional internal Application Load Balancer创建以下资源:
- 两个后端存储桶。后端存储桶充当您之前创建的 Cloud Storage 存储桶的封装容器。
- 网址映射
- 目标代理
- 使用区域级 IP 地址的转发规则。转发规则会从为负载平衡器的转发规则创建的子网中分配 IP 地址。如果您尝试为代理专用子网中的转发规则分配 IP 地址,则无法创建转发规则。
在此示例中,您可以使用 HTTP 或 HTTPS 作为客户端与负载均衡器之间的请求和响应协议。如需创建 HTTPS 负载均衡器,您必须向该负载均衡器的前端添加 SSL 证书资源。
如需使用 gcloud CLI 创建上述负载均衡组件,请按照以下步骤操作:
使用
gcloud beta compute backend-buckets create命令在us-east1区域中创建两个后端存储分区。 后端存储分区的负载均衡方案为INTERNAL_MANAGED。gcloud beta compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --region=us-east1 \ --project=SERVICE_PROJECT_IDgcloud beta compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --region=us-east1 --project=SERVICE_PROJECT_ID使用
gcloud beta compute url-maps create命令创建网址映射,以将传入请求路由到后端存储桶。gcloud beta compute url-maps create URL_MAP_NAME \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1 \ --project=SERVICE_PROJECT_ID将
URL_MAP_NAME替换为网址映射的名称。使用
gcloud beta compute url-maps add-path-matcher命令配置网址映射的主机和路径规则。在此示例中,默认后端存储桶为
backend-bucket-cats,它会处理其中存在的所有路径。不过,任何以http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg为目标的请求都会使用backend-bucket-dogs后端。例如,如果默认后端 (backend-bucket-cats) 中也存在/love-to-fetch/文件夹,负载均衡器会优先使用backend-bucket-dogs后端,因为/love-to-fetch/*有特定的路径规则。gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1 \ --project=SERVICE_PROJECT_ID使用
gcloud compute target-http-proxies create命令创建目标代理。HTTP
对于 HTTP 流量,请创建目标 HTTP 代理以将请求路由到网址映射:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_ID将
TARGET_HTTP_PROXY_NAME替换为目标 HTTP 代理的名称。HTTPS
对于 HTTPS 流量,请创建目标 HTTPS 代理以将请求路由到网址映射。该代理属于负载均衡器,包含用于 HTTPS 负载均衡器的 SSL 证书。创建证书后,您可以将证书附加到 HTTPS 目标代理。
如需附加 Certificate Manager 证书,请运行以下命令:
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --url-map=URL_MAP_NAME \ --certificate-manager-certificates=CERTIFICATE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_ID替换以下内容:
TARGET_HTTPS_PROXY_NAME:目标 HTTPS 代理的名称CERTIFICATE_NAME:您使用 Certificate Manager 创建的 SSL 证书的名称
使用
gcloud compute forwarding-rules create命令创建一条转发规则,该规则使用us-east1区域中的 IP 地址。对于 HTTP 转发规则,预留 IP 地址是可选的;但对于 HTTPS 转发规则,您需要预留 IP 地址。
在此示例中,临时 IP 地址与负载均衡器的 HTTP 转发规则关联。转发规则存在时,临时 IP 地址保持不变。如果您需要删除转发规则并重新创建,则转发规则可能会收到新的 IP 地址。
HTTP
对于 HTTP 流量,请创建区域转发规则以将传入请求路由到 HTTP 目标代理:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=subnet-us \ --subnet-region=us-east1 \ --address=RESERVED_IP_ADDRESS --ports=80 \ --region=us-east1 \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=us-east1 \ --project=SERVICE_PROJECT_ID替换以下内容:
FORWARDING_RULE_NAME:转发规则的名称RESERVED_IP_ADDRESS:您在预留静态内部 IP 地址部分中复制的预留 IP 地址
HTTPS
对于 HTTPS 流量,请创建区域转发规则以将传入请求路由到 HTTPS 目标代理:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=subnet-us \ --subnet-region=us-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --region=us-east1 \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --target-https-proxy-region=us-east1 \ --project=SERVICE_PROJECT_ID替换以下内容:
FORWARDING_RULE_NAME:转发规则的名称RESERVED_IP_ADDRESS:您在预留静态内部 IP 地址部分中复制的预留 IP 地址
向负载均衡器发送 HTTP 请求
现在,负载均衡服务已在运行,请从内部客户端虚拟机向负载均衡器的转发规则发送请求。
获取负载均衡器转发规则的 IP 地址,该 IP 地址位于
us-east1区域。gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_ID复制返回的 IP 地址,以用作
FORWARDING_RULE_IP_ADDRESS。在
us-east1区域中创建客户端虚拟机。gcloud compute instances create client-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=lb-network \ --subnet=subnet-us \ --zone=us-east1-c \ --tags=allow-ssh建立与客户端虚拟机的 SSH 连接。
gcloud compute ssh client-a --zone=us-east1-c
在此示例中, regional internal Application Load Balancer 在 VPC 网络的
us-east1区域中具有前端虚拟 IP 地址 (VIP)。使用 curl 向相应区域中的 VIP 发出 HTTP 请求。curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
将
FORWARDING_RULE_IP_ADDRESS替换为您在第一步中复制的 IP 地址。
配置具有跨项目配置的负载均衡器
本页面上的上一个示例展示了如何设置共享 VPC 部署,其中所有负载均衡器组件及其后端都在服务项目中创建。
借助区域级内部应用负载平衡器,您还可以配置共享 VPC 部署,其中,一个宿主项目或服务项目中的网址映射可引用位于共享 VPC 环境中的多个服务项目的后端存储分区。
您可以参考本部分中的步骤来配置此处列出的任何受支持组合:
- 宿主项目中的转发规则、目标代理和网址映射,以及一个服务项目中的后端存储分区
- 服务项目中的转发规则、目标代理和网址映射,以及另一个服务项目中的后端存储分区
本部分将以第二种配置为例进行说明。
设置概览
此示例在两个不同的服务项目中配置负载均衡器及其前端和后端。
如果尚未执行此操作,您必须完成设置共享 VPC 的所有必要步骤,并配置此示例所需的网络、子网和防火墙规则。如需查看相关说明,请参阅本页面中的以下部分:
在服务项目 B 中配置 Cloud Storage 存储分区和后端存储分区
本部分中的所有步骤都必须在服务项目 B 中执行。
如需创建后端存储桶,您需要执行以下操作:
- 创建 Cloud Storage 存储分区。
- 将内容复制到存储桶。
- 将存储分区设为可公开读取。
- 创建后端存储桶并将其指向 Cloud Storage 存储桶。
创建 Cloud Storage 存储桶
在此示例中,请在 us-east1 区域中创建 Cloud Storage 存储桶。
控制台
gcloud
使用 gcloud storage buckets create 命令在 us-east1 区域中创建存储分区。
gcloud storage buckets create gs://BUCKET1_NAME \
--default-storage-class=standard \
--location=us-east1 \
--uniform-bucket-level-access \
--project=SERVICE_PROJECT_B_ID
gcloud storage buckets create gs://BUCKET2_NAME \
--default-storage-class=standard \
--location=us-east1 \
--uniform-bucket-level-access \
--project=SERVICE_PROJECT_B_ID
替换以下内容:
BUCKET1_NAME:第一个 Cloud Storage 存储桶的名称BUCKET2_NAME:第二个 Cloud Storage 存储桶的名称SERVICE_PROJECT_B_ID:分配给服务项目 B 的 Google Cloud 项目 ID
将图形文件复制到 Cloud Storage 存储桶
将图形文件从公共 Cloud Storage 存储桶复制到自己的 Cloud Storage 存储桶,以便能够测试设置。
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
将 Cloud Storage 存储桶设为可公开读取
如需将存储桶中的所有对象设为可供公共互联网上的所有人读取,请为主账号 allUsers 授予 Storage Object Viewer 角色 (roles/storage.objectViewer)。
控制台
要授予所有用户查看存储桶中对象的权限,请对每个存储桶重复执行以下过程:
- 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。
在存储桶列表中,选中您要设为公开的每个存储桶对应的复选框。
点击权限按钮。 系统会显示权限对话框。
在权限对话框中,点击 添加主账号按钮。 系统会显示授予访问权限对话框。
在新的主账号字段中,输入
allUsers。在选择角色字段的过滤条件框中输入
Storage Object Viewer,然后从过滤后的结果中选择 Storage Object Viewer。点击保存。
点击允许公开访问。
gcloud
如需授予所有用户查看存储桶中对象的权限,请运行 buckets add-iam-policy-binding 命令。
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME \
--member=allUsers \
--role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME \
--member=allUsers \
--role=roles/storage.objectViewer
使用后端存储桶配置负载均衡器
如需创建后端存储分区,请按以下步骤操作:
使用
gcloud beta compute backend-buckets create命令在us-east1区域中创建两个后端存储分区。 后端存储分区的负载均衡方案为INTERNAL_MANAGED。gcloud beta compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --region=us-east1 \ --project=SERVICE_PROJECT_B_IDgcloud beta compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --region=us-east1 --project=SERVICE_PROJECT_B_ID
在服务项目 A 中配置负载均衡器的前端组件
本部分中的所有步骤都必须在服务项目 A 中执行。
在服务项目 A 中,创建以下前端负载均衡组件:
- 设置附加到目标代理的 SSL 证书资源。 如需了解详情,请参阅本文档中的设置 SSL 证书资源。
- 为负载均衡器的转发规则创建并预留静态内部 IP 地址。如需了解详情,请参阅本文档中的预留静态内部 IP 地址 。
使用
gcloud beta compute url-maps create命令创建网址映射,以将传入请求路由到服务项目 B 中的后端存储桶。gcloud beta compute url-maps create URL_MAP_NAME \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID替换以下内容:
URL_MAP_NAME:网址映射的名称SERVICE_PROJECT_A_ID:分配给服务项目 A 的 Google Cloud项目 ID
使用
gcloud beta compute url-maps add-path-matcher命令配置网址映射的主机和路径规则。在此示例中,默认后端存储桶为
backend-bucket-cats,它会处理其中存在的所有路径。不过,任何以http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg为目标的请求都会使用backend-bucket-dogs后端。例如,如果默认后端 (backend-bucket-cats) 中也存在/love-to-fetch/文件夹,负载均衡器会优先使用backend-bucket-dogs后端,因为/love-to-fetch/*有特定的路径规则。gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=projects/SERVICE_PROJECT_B_ID/regional/backendBuckets/backend-bucket-dogs" \ --default-backend-bucket=projects/SERVICE_PROJECT_B_ID/regional/backendBuckets/backend-bucket-cats \ --region=us-east1 --project=SERVICE_PROJECT_A_ID使用
gcloud compute target-http-proxies create命令创建目标代理。HTTP
对于 HTTP 流量,请创建目标 HTTP 代理以将请求路由到网址映射:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID将
TARGET_HTTP_PROXY_NAME替换为目标 HTTP 代理的名称。HTTPS
对于 HTTPS 流量,请创建目标 HTTPS 代理以将请求路由到网址映射。该代理属于负载均衡器,包含用于 HTTPS 负载均衡器的 SSL 证书。创建证书后,您可以将该证书附加到 HTTPS 目标代理。
如需附加 Certificate Manager 证书,请运行以下命令:
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --url-map=lb-map \ --certificate-manager-certificates=CERTIFICATE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID替换以下内容:
TARGET_HTTPS_PROXY_NAME:目标 HTTPS 代理的名称CERTIFICATE_NAME:您使用 Certificate Manager 创建的 SSL 证书的名称。
使用
gcloud compute forwarding-rules create命令创建一条转发规则,该规则使用us-east1区域中的 IP 地址。对于 HTTP 转发规则,预留 IP 地址是可选的;但对于 HTTPS 转发规则,您需要预留 IP 地址。
在此示例中,临时 IP 地址与负载均衡器的 HTTP 转发规则关联。转发规则存在时,临时 IP 地址保持不变。如果您需要删除转发规则并重新创建,则转发规则可能会收到新的 IP 地址。
HTTP
对于 HTTP 流量,请创建区域转发规则以将传入请求路由到 HTTP 目标代理:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=subnet-us \ --address=RESERVED_IP_ADDRESS --ports=80 \ --region=us-east1 \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=us-east1 \ --project=SERVICE_PROJECT_A_ID替换以下内容:
FORWARDING_RULE_NAME:转发规则的名称RESERVED_IP_ADDRESS:预留的 IP 地址
HTTPS
对于 HTTPS 流量,请创建区域转发规则以将传入请求路由到 HTTPS 目标代理:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=subnet-us \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --region=us-east1 \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --target-https-proxy-region=us-east1 \ --project=SERVICE_PROJECT_A_ID替换以下内容:
FORWARDING_RULE_NAME:转发规则的名称RESERVED_IP_ADDRESS:预留的 IP 地址
向 Compute Load Balancer Admin 授予使用后端存储桶的权限
如果您希望负载均衡器引用其他服务项目中的后端存储分区,则负载均衡器管理员必须具有 compute.backendBuckets.use 权限。如需授予此权限,您可以使用名为 Compute Load Balancer Services User (roles/compute.loadBalancerServiceUser) 的预定义 IAM 角色。此角色必须由服务项目管理员授予,可以在服务项目级层或个别后端存储桶级层应用。
在此示例中,服务项目 B 中的 Service Project Admin 必须运行以下任一命令,以向服务项目 A 中的 Load Balancer Admin 授予 compute.backendBuckets.use 权限。可以在项目级层(针对项目中的所有后端存储桶)授予该权限,也可以针对个别后端存储桶授予该权限。
控制台
项目级权限
请按照以下步骤授予对项目中所有后端存储分区的权限。
您需要拥有 compute.regionBackendBuckets.setIamPolicy 和 resourcemanager.projects.setIamPolicy 权限才能完成此步骤。
在 Google Cloud 控制台中,前往 IAM 页面。
选择您的项目。
点击授予访问权限。
在新的主账号字段中,输入主账号的电子邮件地址或其他标识符。
在分配角色部分,点击添加角色。
在选择角色对话框的搜索角色字段中,输入
Compute Load Balancer Services User。选中 Compute Load Balancer Services User 复选框。
点击应用。
可选:为角色添加条件。
点击保存。
针对个别后端存储分区的资源级权限
请按照以下步骤授予对项目中个别后端存储分区的权限。
您需要拥有 compute.regionBackendBuckets.setIamPolicy 权限才能完成此步骤。
在 Google Cloud 控制台中,前往后端页面。
从后端列表中,选择要授予访问权限的后端存储桶,然后点击权限。
点击添加主账号。
在新的主账号字段中,输入主账号的电子邮件地址或其他标识符。
在选择角色列表中,选择 Compute Load Balancer Services User。
点击保存。
gcloud
项目级权限
请按照以下步骤授予对项目中所有后端存储分区的权限。
您需要拥有 compute.regionBackendBuckets.setIamPolicy 和 resourcemanager.projects.setIamPolicy 权限才能完成此步骤。
gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser"
替换以下内容:
SERVICE_PROJECT_B_ID:分配给服务项目 B 的 Google Cloud项目 IDLOAD_BALANCER_ADMIN:要添加绑定的主账号
针对个别后端存储分区的资源级权限
在后端存储桶级层,服务项目管理员可以使用以下任一命令来授予 Compute Load Balancer Services User 角色 (roles/compute.loadBalancerServiceUser):
使用 gcloud projects add-iam-policy-binding 命令授予 Compute Load Balancer Services User 角色。
您需要拥有 compute.regionBackendBuckets.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/REGION/backendBuckets/BACKEND_BUCKET_NAME",title=Shared VPC condition'
SERVICE_PROJECT_B_ID:分配给服务项目 B 的 Google Cloud项目 IDLOAD_BALANCER_ADMIN:要添加绑定的主账号REGION:后端存储桶所在的 Google Cloud 区域BACKEND_BUCKET_NAME:后端存储桶的名称
gcloud compute backend-buckets add-iam-policy-binding 命令来授予 Compute Load Balancer Services User 角色。
gcloud compute backend-buckets add-iam-policy-binding BACKEND_BUCKET_NAME \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser" \
--project=SERVICE_PROJECT_B_ID \
--region=REGION
向负载均衡器发送 HTTP 请求
现在,负载均衡服务已在运行,请从内部客户端虚拟机向负载均衡器的转发规则发送请求。
获取负载均衡器转发规则的 IP 地址,该 IP 地址位于
us-east1区域。gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID复制返回的 IP 地址,以用作
FORWARDING_RULE_IP_ADDRESS。在
us-east1区域中创建客户端虚拟机。gcloud compute instances create client-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=lb-network \ --subnet=subnet-us \ --zone=us-east1-c \ --tags=allow-ssh建立与客户端虚拟机的 SSH 连接。
gcloud compute ssh client-a --zone=us-east1-c
在此示例中, regional internal Application Load Balancer 在 VPC 网络中的
us-east1区域中具有前端 VIP。使用 curl 向相应区域中的 VIP 发出 HTTP 请求。curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
将
FORWARDING_RULE_IP_ADDRESS替换为您在第一步中复制的 IP 地址。