本文档介绍了如何创建区域级外部应用负载平衡器,以将针对静态内容的请求路由到 Cloud Storage 存储分区。
准备工作
确保您的设置符合以下前提条件。
安装 Google Cloud CLI
本指南中的某些说明只能使用 Google Cloud CLI 执行。如需安装,请参阅安装 gcloud CLI。
您可以在 API 和 gcloud CLI 参考文档中找到与负载均衡相关的命令。
所需的角色
如果您是项目创建者,则会被授予 Owner 角色 (roles/owner)。默认情况下,Owner 角色 (roles/owner) 或 Editor 角色 (roles/editor) 可提供遵循本文档所需的权限。
如果您不是项目创建者,则必须向相应的主账号授予项目的必需权限。例如,主账号可以是 Google 账号(针对最终用户)或服务账号。 <0x0A
如需获得创建 Cloud Storage 存储分区和网络资源所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
创建 VPC 网络和负载均衡组件:Compute Network Admin 角色 (
roles/compute.networkAdmin) -
创建 Cloud Storage 存储分区:
Storage Object Admin 角色 (
roles/storage.objectAdmin)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
如需详细了解 Cloud Load Balancing 的角色和权限,请参阅角色和权限。如需详细了解如何定义 IAM 政策以针对转发规则授予有条件授权,请参阅适用于转发规则的 IAM Conditions。
设置 SSL 证书资源
对于使用 HTTPS 作为请求和响应协议的区域级外部应用负载平衡器,您可以使用 Compute Engine SSL 证书或 Certificate Manager 证书创建 SSL 证书资源。
在此示例中,请按照以下其中一个文档中的说明使用 Certificate Manager 创建 SSL 证书资源:
创建证书后,您可以将证书附加到 HTTPS 目标代理。
我们建议您使用 Google 管理的证书。
限制
当 Cloud Storage 存储分区用作区域级外部应用负载平衡器的后端时,会受到以下限制:
不支持专用存储桶访问,因此后端存储桶必须可通过互联网公开访问。
不支持签名网址。
为区域级外部应用负载平衡器创建后端存储分区时,无法使用 Cloud CDN 集成。
使用区域级外部应用负载平衡器访问后端存储分区时,仅支持 HTTP
GET方法。您可以从存储分区下载内容,但无法通过区域级外部应用负载平衡器将内容上传到存储分区。对于区域级外部应用负载平衡器,仅支持配置负载平衡器的区域中的 Cloud Storage 存储分区。不支持双区域或多区域存储分区。
设置概览
下图展示了区域级外部应用负载平衡器,其后端存储分区与负载平衡器位于同一区域。
区域级外部应用负载平衡器的转发规则具有外部 IP 地址。
在接下来的部分中,您将配置上图所示的不同资源。
配置网络和代理专用子网
此示例使用以下 VPC 网络、区域和代理专用子网:
网络。网络是名为
lb-network的自定义模式 VPC 网络。Envoy 代理的子网。
us-east1区域中名为proxy-only-subnet-us的子网使用10.129.0.0/23作为其主要 IP 范围。
配置自定义模式 VPC 网络
控制台
在 Google Cloud 控制台中,前往 VPC 网络页面。
点击创建 VPC 网络。
对于名称,输入
lb-network。点击创建。
gcloud
使用
gcloud compute networks create命令创建一个名为lb-network的自定义 VPC 网络。gcloud compute networks create lb-network --subnet-mode=custom
配置代理专用子网
代理专用子网提供了一组 IP 地址,供 Google Cloud 用于代表您运行 Envoy 代理。代理会终结来自客户端的连接并创建与后端的新连接。
此代理专用子网用于与 VPC 网络位于同一区域的所有基于 Envoy 的区域级负载均衡器。在每个网络中,每个区域只能有一个活跃代理专用子网用于给定用途。
控制台
在 Google Cloud 控制台中,前往 VPC 网络页面。
点击您创建的 VPC 网络的名称。
在子网标签页中,点击添加子网。
请输入以下信息:
- 名称:
proxy-only-subnet-us - 区域:
us-east1 - 用途:区域级托管式代理
- IP 地址范围:
10.129.0.0/23
- 名称:
点击添加。
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
配置 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使用
gcloud storage buckets create命令在us-east1区域中创建第二个存储分区。gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access
将变量 BUCKET1_NAME 和 BUCKET2_NAME 替换为您的 Cloud Storage 存储分区名称。
将图形文件复制到 Cloud Storage 存储桶
将图形文件从公共 Cloud Storage 存储桶复制到自己的 Cloud Storage 存储桶,以便能够测试设置。
在 Cloud Shell 中运行以下命令,将存储桶名称变量替换为您的唯一 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 地址。
控制台
在 Google Cloud 控制台中,前往预留静态地址页面。
为新地址选择一个名称。
对于 IP 版本,请选择 IPv4。
对于类型,请选择区域。
对于地区,选择 us-east1。
将附加目标选项设置为无。创建负载均衡器后,此 IP 地址会关联到负载均衡器的转发规则。
点击预留以预留该 IP 地址。
gcloud
如需预留静态外部 IP 地址,请使用
gcloud compute addresses create命令。gcloud compute addresses create ADDRESS_NAME \ --region=us-east1
请替换以下内容:
ADDRESS_NAME:您要为此地址指定的名称。
使用
gcloud compute addresses describe命令可以查看结果:gcloud compute addresses describe ADDRESS_NAME
返回的 IP 地址在下文中称为 RESERVED_IP_ADDRESS。
使用后端存储桶配置负载均衡器
本部分介绍了如何为区域级外部应用负载平衡器创建以下资源:
- 两个后端存储桶。后端存储桶充当您之前创建的 Cloud Storage 存储桶的封装容器。
- 网址映射
- 目标代理
- 使用区域级 IP 地址的转发规则。转发规则具有外部 IP 地址。
在此示例中,您可以使用 HTTP 或 HTTPS 作为客户端与负载均衡器之间的请求和响应协议。如需创建 HTTPS 负载均衡器,您必须向该负载均衡器的前端添加 SSL 证书资源。
如需使用 gcloud CLI 创建上述负载均衡组件,请按照以下步骤操作:
使用
gcloud beta compute backend-buckets create命令在us-east1区域中创建两个后端存储分区。 后端存储分区的负载均衡方案为EXTERNAL_MANAGED。gcloud beta compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1gcloud beta compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1将变量
BUCKET1_NAME和BUCKET2_NAME替换为您的 Cloud Storage 存储分区名称。使用
gcloud beta compute url-maps create命令创建网址映射,以将传入请求路由到后端存储桶。gcloud beta compute url-maps create URL_MAP_NAME \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1将变量
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将变量
URL_MAP_NAME替换为网址映射的名称。使用
gcloud compute target-http-proxies create命令创建目标代理。对于 HTTP 流量,请创建目标 HTTP 代理以将请求路由到网址映射:
gcloud compute target-http-proxies create http-proxy \ --url-map=URL_MAP_NAME \ --region=us-east1将变量
URL_MAP_NAME替换为网址映射的名称。对于 HTTPS 流量,请创建目标 HTTPS 代理以将请求路由到网址映射。该代理属于负载均衡器,包含用于 HTTPS 负载均衡器的 SSL 证书。创建证书后,您可以将该证书附加到 HTTPS 目标代理。
如需附加 Certificate Manager 证书,请运行以下命令:
gcloud compute target-https-proxies create https-proxy \ --url-map=URL_MAP_NAME \ --certificate-manager-certificates=CERTIFICATE_NAME \ --region=us-east1替换以下内容:
URL_MAP_NAME:网址映射的名称CERTIFICATE_NAME:您使用 Certificate Manager 创建的 SSL 证书的名称。
使用
gcloud compute forwarding-rules create命令创建一条转发规则,该规则使用us-east1区域中的 IP 地址。对于 HTTP 流量,请创建区域转发规则以将传入请求路由到 HTTP 目标代理:
gcloud compute forwarding-rules create http-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --region=us-east1 \ --target-http-proxy=http-proxy \ --target-http-proxy-region=us-east1对于 HTTPS 流量,请创建区域转发规则以将传入请求路由到 HTTPS 目标代理:
gcloud compute forwarding-rules create https-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --region=us-east1 \ --target-https-proxy=https-proxy \ --target-https-proxy-region=us-east1
向负载均衡器发送 HTTP 请求
现在,负载均衡服务已运行,您可以向负载平衡器的转发规则发送请求。
获取负载均衡器转发规则 (
http-fw-rule) 的 IP 地址,该 IP 地址位于us-east1区域。gcloud compute forwarding-rules describe http-fw-rule \ --region=us-east1复制返回的 IP 地址,以便在下一步中用作
FORWARDING_RULE_IP_ADDRESS。使用 curl 向转发规则的虚拟 IP 地址 (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