本文档介绍如何创建外部应用负载均衡器,以将针对静态内容的请求路由到 Cloud Storage 存储桶。使用后端存储桶配置负载均衡器后,对以 /love-to-fetch
开头的网址路径的请求会发送到 us-east1
Cloud Storage 存储桶,所有其他请求会发送到 europe-north1
Cloud Storage 存储桶(无论用户的区域如何)。
如果您的后端通过 HTTP(S) 提供动态内容,请考虑使用后端服务而不是后端存储桶。
如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示:
将 Cloud Storage 存储桶用作负载均衡器后端
外部应用负载均衡器使用网址映射将来自指定网址路径的流量定向到您的后端。
在下图中,负载均衡器将路径为 /love-to-fetch/
的流量发送到 us-east1
区域的 Cloud Storage 存储桶。所有其他请求都会转到 europe-north1
区域的 Cloud Storage 存储桶。
默认情况下,Cloud Storage 使用 Cloud CDN 使用的同一缓存。如果您在后端存储桶上启用 Cloud CDN,则可以对内容使用 Cloud CDN 控件。Cloud CDN 控件包括缓存模式、签名网址和失效操作等。Cloud CDN 还允许您缓存大型内容(大于 10 MB)。如果您未在后端存储桶上启用 Cloud CDN,则只能使用源 Cache-Control
标头来控制由 Cloud Storage 元数据设置的较小内容的缓存。
准备工作
确保您的设置符合以下前提条件。如果您使用的是 gcloud storage
实用程序,则可以按照使用 gcloud 工具发现对象存储空间中的说明进行安装。
设置默认项目
控制台
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
gcloud
gcloud config set project PROJECT_ID
将 PROJECT_ID
替换为您在本指南中使用的项目。
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
权限
要按照本指南操作,您需要在项目中创建 Cloud Storage 存储桶和负载均衡器。您应该是项目的 Owner 或 Editor,或者应具有下列 Compute Engine IAM 角色:
任务 | 所需角色 |
---|---|
创建负载均衡器组件 | Network Admin |
创建 Cloud Storage 存储桶 | Storage Object Admin |
如需了解详情,请参阅以下指南:
设置 SSL 证书资源
对于 HTTPS 负载均衡器,按照以下文档中的说明创建 SSL 证书资源:
我们建议您使用 Google 管理的证书。
此示例假设您已有一个名为 www-ssl-cert
的 SSL 证书资源。
准备 Cloud Storage 存储桶和内容
准备 Cloud Storage 存储桶的过程如下所示:
创建存储桶。
将内容复制到存储桶。
提供对存储桶的公开访问权限。
创建 Cloud Storage 存储桶
在此示例中,您将创建两个 Cloud Storage 存储桶以供负载均衡器访问。对于生产部署,我们建议您选择一个多区域存储桶,该存储桶会自动跨多个 Google Cloud 区域复制对象。这可以提高内容的可用性,并提高应用的故障容忍度。
记下您创建的 Cloud Storage 存储桶的名称,因为它们稍后会用到。在本指南中,它们被称为 BUCKET_1_NAME 和 BUCKET_2_NAME。
控制台
在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击创建存储桶。
在为存储桶命名框中,输入遵循命名准则的全局唯一名称。
点击选择数据存储位置。
将位置类型设置为区域。
将位置设置为 europe-north1。这是本指南中的 BUCKET_1_NAME。
点击创建。
点击存储桶以返回“Cloud Storage 存储桶”页面。按照上述说明创建第二个存储桶,但将位置设置为 us-east1。这是本指南中的 BUCKET_2_NAME。
gcloud
gcloud storage buckets create gs://BUCKET_1_NAME --project=PROJECT_ID --default-storage-class=standard --location=europe-north1 --uniform-bucket-level-access
gcloud storage buckets create gs://BUCKET_2_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
将 BUCKET_1_NAME
和 BUCKET_2_NAME
替换为您要创建的存储桶的名称。
Terraform
如需创建存储桶,请使用 google_storage_bucket
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将内容转移到 Cloud Storage 存储桶
为了方便稍后测试设置,请将以下映像从公共 Cloud Storage 存储桶复制到您自己的 Cloud Storage 存储桶。
gcloud
点击
激活 Cloud Shell。在 Cloud Shell 中运行以下命令,将存储桶名称变量替换为您的 Cloud Storage 存储桶名称:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET_2_NAME/love-to-fetch/
Terraform
如需将数据项复制到存储桶,您可以使用 google_storage_bucket_object
资源。
或者,您也可以使用 null_resource
资源。
resource "null_resource" "upload_cat_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/" } } resource "null_resource" "upload_dog_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/" } }
在 Google Cloud 控制台中,点击每个存储桶的详情页面上的刷新,以验证文件是否已成功复制。
将 Cloud Storage 存储桶设为可公开读取
当您将 Cloud Storage 存储桶设为可公开读取时,互联网上的任何人都可以列出和查看其对象,并查看其元数据(不包括 ACL)。请勿在您的公共存储桶中包含敏感信息。
为了降低意外泄露敏感信息的可能性,不要将公开对象和敏感数据存储在同一个存储桶中。
控制台
要授予所有用户查看存储桶中对象的权限,请对每个存储桶重复执行以下过程:
在 Google Cloud 控制台中,进入 Cloud Storage 存储桶页面。
点击相应存储桶名称,然后点击权限标签页。
点击添加。
在新的主账号框中,输入
allUsers
。在选择角色框中,选择 Cloud Storage > Storage Object Viewer。
点击保存。
点击允许公开访问。
gcloud
要授予所有用户查看存储桶中对象的权限,请运行以下命令:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
如需授予所有用户查看存储桶中对象的权限,请使用 google_storage_bucket_iam_member
资源并指定 allUsers
成员。
保留外部 IP 地址
设置 Cloud Storage 存储桶后,您可以预留全球静态外部 IP 地址,以供受众群体用来访问您的负载均衡器。
此步骤是可选的,但建议执行,因为静态外部 IP 地址会提供单个地址以指向您的网域。
控制台
在 Google Cloud 控制台中,转到外部 IP 地址页面。
点击保留静态地址。
在名称框中,输入
example-ip
。将网络服务层级设置为优质。
将 IP 版本设置为 IPv4。
将类型设置为全局。
点击预留。
gcloud
gcloud compute addresses create example-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global
请记下预留的 IPv4 地址:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
Terraform
如需预留外部 IP 地址,请使用 google_compute_global_address
资源。
创建使用后端存储桶的外部应用负载均衡器
以下说明介绍了如何创建 HTTP 或 HTTPS 负载均衡器。如需创建 HTTPS 负载均衡器,您必须向该负载均衡器的前端添加 SSL 证书资源。如需了解详情,请参阅 SSL 证书概览。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 在负载均衡器的类型字段中,选择应用负载均衡器 (HTTP/HTTPS),然后点击下一步。
- 在公共或内部字段中,选择公共(外部),然后点击下一步。
- 在全球或单个区域部署字段中,选择最适合全球性工作负载,然后点击下一步。
- 对于负载均衡器生成,选择经典版应用负载均衡器,然后点击下一步。
- 点击配置。
基本配置
- 在名称框中,输入
http-lb
。
配置后端
点击后端配置。
点击后端服务和后端存储桶框,然后点击创建后端存储桶。
在后端存储桶名称框中,输入
cats
。在 Cloud Storage 存储桶框中,点击浏览。
选择 BUCKET_1_NAME,然后点击选择。如果先创建
cats
后端存储桶,该存储桶将成为默认存储桶,所有不匹配的流量请求都将定向到此处。您无法在负载均衡器中更改默认后端存储桶的重定向规则。点击创建。
使用相同的过程创建名为
dogs
的后端存储桶,然后选择 BUCKET_2_NAME。点击确定。
配置路由规则
路由规则决定了流量的定向方式。如需配置路由,您需要设置主机规则和路径匹配器,即外部应用负载均衡器网址映射的配置组件。如需为此示例设置规则,请执行以下操作:
- 点击主机和路径规则。
- 对于
dogs
,在主机字段中输入*
,在路径字段中输入/love-to-fetch/*
。
配置前端
点击前端配置。
验证以下选项配置了这些值:
属性 值(按照说明输入值或选择选项) 协议 HTTP 网络服务层级 高级 IP 版本 IPv4 IP 地址 example-ip 端口 80 如果您希望创建 HTTPS 负载均衡器而不是 HTTP 负载均衡器,则必须拥有 SSL 证书 (
gcloud compute ssl-certificates list
),并且必须按如下所示填写相关字段。属性 值(按照说明输入值或选择选项) 协议 HTTP(S) 网络服务层级 优质 IP 版本 IPv4 IP 地址 example-ip 端口 443 证书 选择您在设置 SSL 证书资源部分创建的 www-ssl-cert
证书,或创建新证书。可选:启用从 HTTP 到 HTTPS 的重定向 使用此复选框可启用重定向。 启用此复选框会创建一个额外的部分 HTTP 负载均衡器,它使用与 HTTPS 负载均衡器相同的 IP 地址,并将 HTTP 请求重定向到负载均衡器的 HTTPS 前端。
只有在选择 HTTPS 协议并使用预留的 IP 地址时,才能选中此复选框。
点击完成。
检查配置
点击检查并最终确定。
检查前端、主机和路径规则以及后端存储桶。
点击创建,然后等待负载均衡器完成创建。
点击负载均衡器的名称 (http-lb)。
请记下负载均衡器的 IP 地址,以备在下一个任务中使用。在本指南中,它称为 IP_ADDRESS。
gcloud
配置后端
gcloud compute backend-buckets create cats \ --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \ --gcs-bucket-name=BUCKET_2_NAME
配置网址映射
gcloud compute url-maps create http-lb \ --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \ --path-matcher-name=path-matcher-2 \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=dogs" \ --default-backend-bucket=cats
配置目标代理
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=http-lb
配置转发规则
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=EXTERNAL \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
如需创建负载均衡器,请使用以下 Terraform 资源。
配置后端
如需创建后端,请使用 google_compute_backend_bucket
资源。
配置网址映射
如需创建网址映射,请使用 google_compute_url_map
资源。
配置目标代理
如需创建目标 HTTP 代理,请使用 google_compute_target_http_proxy
资源。
配置转发规则
如需创建转发规则,请使用 google_compute_global_forwarding_rule
资源。
注意:如需将模式更改为传统版应用负载均衡器,请将 load_balancing_scheme
属性设置为 "EXTERNAL"
,而不是 "EXTERNAL_MANAGED"
。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将流量发送到您的负载均衡器
配置负载均衡器的几分钟后,即可开始将流量发送到负载均衡器的 IP 地址。
控制台
在网络浏览器中,转到以下地址以测试负载均衡器,并将 IP_ADDRESS 替换为负载均衡器的 IP 地址:
http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
http://IP_ADDRESS/never-fetch/three-cats.jpg
如果您已设置 HTTP 负载均衡器,请确保您的浏览器不会自动重定向到 HTTPS。
gcloud
使用 curl
命令测试以下网址的响应。将 IP_ADDRESS
替换为负载均衡器的 IPv4 地址:
curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
限制
- 只有全球外部应用负载均衡器和传统版应用负载均衡器支持后端存储桶。区域级外部应用负载均衡器或任何其他负载均衡器类型不支持后端存储桶。
- Identity-Aware Proxy 不支持后端存储桶。
传统版应用负载均衡器不完全支持上传到 Cloud Storage 存储桶。特别是,在上传到 Cloud Storage 时,请求中的所有查询参数都会予以丢弃。
后续步骤