Cloud CDN 利用您选择的全球外部应用负载均衡器或传统版应用负载均衡器来提供路由、健康检查和任播 IP 支持。由于全球外部应用负载均衡器可以有多种后端实例类型(Compute Engine 虚拟机实例、Google Kubernetes Engine pod、Cloud Storage 存储桶或 Google Cloud 之外的外部后端),因此您可以选择为哪些后端(源站)启用 Cloud CDN。
本设置指南介绍如何创建一个启用了 Cloud CDN 的外部应用负载均衡器。该示例使用以下资源:
- 默认 Virtual Private Cloud (VPC) 网络
- 默认网址映射
- 预留的外部 IP 地址
- 作为后端的 Cloud Storage 存储分区
- 一个负载平衡器后端存储分区,用作 Cloud Storage 存储分区的封装容器
后端存储分区支持以下功能:
如需了解 Cloud CDN 的工作原理,请参阅 Cloud CDN 概览。
默认情况下,Cloud Storage 使用 Cloud CDN 使用的同一缓存。如果您在后端存储桶上启用 Cloud CDN,则可以对内容使用 Cloud CDN 控件。Cloud CDN 控件包括缓存模式、签名网址和失效操作等。Cloud CDN 还允许您缓存大型内容(大于 10 MB)。如果您未在后端存储桶上启用 Cloud CDN,则只能使用源 Cache-Control
标头来控制由 Cloud Storage 元数据设置的较小内容的缓存。
负载均衡器后端
外部应用负载均衡器使用网址映射将来自指定网址的流量定向到指定服务。下表汇总了您可以在其中托管内容和服务的后端类型。
负载平衡器后端配置 | 典型媒体类型 | 后端类型 |
---|---|---|
后端服务 | 动态(如数据) |
|
后端存储分区 | 静态(如映像) |
|
准备工作
- 如果前端使用 HTTPS,请创建一个自行管理或由 Google 管理的SSL 证书。我们建议您使用 Google 管理的证书。
- 如果您使用的是 Google Cloud CLI,请参阅使用 gcloud 工具发现对象存储空间进行安装。
控制台
- 在 Google Cloud 控制台中,转到首页。
- 在 Google Cloud 的右侧,从下拉菜单中选择一个项目。
gcloud
gcloud config set project PROJECT_ID
将 PROJECT_ID
替换为您的 Google Cloud 项目 ID。
Terraform
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
创建 Cloud Storage 存储桶
如果您已有尚未分配给负载平衡器的 Cloud Storage 存储分区,则可以跳至下一步。
创建 Cloud Storage 存储桶以用作已启用 Cloud CDN 的外部应用负载均衡器的后端时,我们建议您选择一个多区域存储桶,它会自动跨多个 Google Cloud 区域复制对象。这可以提高内容的可用性,并提高应用的故障容忍度。
控制台
- 在 Google Cloud 控制台中,打开 Cloud Storage 存储桶页面。
- 点击创建存储桶。
为下表中的字段指定值,其他所有字段保留默认值:
属性 值(输入值或选择指定的选项) 名称 为每个存储分区输入一个全局唯一的名称。如果您输入的名称不是唯一的,则会看到一条消息,提示您尝试使用其他名称。 位置类型 多地区 位置 选择一个区域,例如 us(美国的多个区域)。 默认存储类别 标准版 访问权限控制 统一 点击创建。
记下新创建的 Cloud Storage 存储桶的名称,以执行下一步。
gcloud
gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access
Terraform
如需创建存储桶,请使用 google_storage_bucket
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将图形文件复制到 Cloud Storage 存储桶
将图形文件从公共 Cloud Storage 存储分区复制到自己的 Cloud Storage 存储分区,以便能够测试设置。
gcloud
在 Cloud Shell 中运行以下命令。将 BUCKET_NAME
替换为您的 Cloud Storage 存储分区的唯一名称:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/
Terraform
如需复制对象,请使用 local-exec
Provisioner
和 gcloud storage cp
命令。
resource "null_resource" "upload_image" { provisioner "local-exec" { command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive" } }
或者,如需上传对象,请使用 google_storage_bucket_object
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
在 Google Cloud 控制台中,点击刷新,以验证图形文件是否已复制。
将 Cloud Storage 存储桶设为公开
此示例使您的 Cloud Storage 存储分区可供公开读取。这是公开内容的推荐方法。如此设置时,互联网上的任何人都可以查看和列出您的对象及其元数据(不包括 ACL)。为了降低意外数据泄露的风险,您通常应为公开对象专门分配 Cloud Storage 存储分区。
以下是将整个 Cloud Storage 存储桶设为公开的其他方法:
将个别对象设为可公开读取。我们不建议采用这种方法,因为它使用的是 Cloud Storage 专用的旧版权限系统。
使用签名网址。
以下过程授予所有用户查看 Cloud Storage 存储分区中的对象的权限,使该存储分区可公开读取。
控制台
- 在 Google Cloud 控制台中,打开 Cloud Storage 存储桶页面。
- 导航到该存储分区,然后点击权限标签页。
- 点击添加主账号。
- 在新主账号中,输入
allUsers
。 - 对于角色,请选择 Cloud Storage > Storage Object Viewer。
- 点击保存。
gcloud
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer
Terraform
如需将您的 Cloud Storage 存储桶设为公开,请使用 google_storage_bucket_iam_member
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
保留外部 IP 地址
现在您的 Cloud Storage 存储分区已启动并运行,接下来请设置全局静态外部 IP 地址,您的客户将使用此地址访问负载平衡器。
此步骤是可选的,但建议执行,因为静态外部 IP 地址会提供单个地址以指向您的网域。
控制台
- 在 Google Cloud 控制台中,转到外部 IP 地址页面。
- 如需预留 IPv4 地址,请点击预留静态地址。
- 指定名称
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
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
创建外部应用负载均衡器
在此过程中,您将创建负载平衡器的后端存储分区,充当 Cloud Storage 存储分区的封装容器。创建或修改后端存储分区时,您可以启用 Cloud CDN。
控制台
开始外部应用负载均衡器配置过程
- 在 Google Cloud 控制台中,转到负载均衡页面。
- 在 HTTP(S) 负载平衡下,点击开始配置。
- 选择从互联网到我的虚拟机,然后点击继续。
- 在高级流量管理下,选择以下任一选项:
- 对于传统版应用负载均衡器,请选择传统版 HTTP(S) 负载均衡器。
- 对于全球外部应用负载均衡器,请选择具有高级流量管理的 HTTP(S) 负载均衡器。
- 将名称设置为
http-lb
,然后转到下一步。
配置后端并启用 Cloud CDN
创建负载平衡器的后端存储分区,将其用作 Cloud Storage 存储分区的封装容器。创建或修改后端存储分区时,您可以启用 Cloud CDN。
- 点击后端配置。
- 在后端服务和后端存储分区下,点击创建或选择后端服务和后端存储分区,然后点击后端存储分区 > 创建后端存储分区。
- 将名称设置为
cat-backend-bucket
。此名称不必全局唯一,并且可以与实际 Cloud Storage 存储分区的名称不同。 - 在 Cloud Storage 存储分区下,点击浏览。
- 选择您创建的 Cloud Storage 全局唯一
BUCKET_NAME
,然后点击选择。 点击启用 Cloud CDN。
点击创建。
配置主机规则和路径匹配器
主机规则和路径匹配器是外部应用负载均衡器网址映射的配置组件。
在主机和路径规则中,您可以保留默认设置。
如需查看自定义设置示例,请参阅将后端存储分区添加到负载平衡器。
如需详细了解主机规则和路径匹配器,请参阅网址映射概览。
配置前端
- 点击前端配置。
验证这些选项是否配置了以下值。
属性 值(按照说明输入值或选择选项) 协议 HTTP 网络服务层级 优质 IP 版本 IPv4 IP 地址 example-ip
端口 80 如果您希望创建 HTTPS 负载平衡器而不是 HTTP 负载平衡器,则必须拥有 SSL 证书 (
gcloud compute ssl-certificates list
),并且必须按如下所示填写相关字段。属性 值(按照说明输入值或选择选项) 协议 HTTPS 网络服务层级 优质 IP 版本 IPv4 IP 地址 example-ip
端口 443 证书 选择证书或创建新证书 点击完成。
检查配置
- 点击检查并最终确定。
- 检查后端存储分区、主机和路径规则和前端部分。
- 点击创建。
- 等待负载平衡器完成创建。
- 点击负载平衡器的名称 (http-lb)。
- 请记下负载均衡器的 IP 地址,以便在下一个任务中使用。它被称为
IP_ADDRESS
。
gcloud
配置后端
gcloud compute backend-buckets create cat-backend-bucket \ --gcs-bucket-name=BUCKET_NAME \ --enable-cdn \ --cache-mode=CACHE_MODE
通过将 CACHE_MODE 替换为以下项之一来设置缓存模式:
CACHE_ALL_STATIC
或USE_ORIGIN_HEADERS
:使用根据 Cloud Storage 中的缓存控制元数据设置的标头。Cloud Storage 始终向 Cloud CDN 提供Cache-Control
标头。如果未明确选择值,它会发送默认值。FORCE_CACHE_ALL
:缓存所有内容,并忽略 Cloud Storage 发送的Cache-Control
响应标头中的任何private
、no-store
或no-cache
指令。
配置网址映射
gcloud compute url-maps create http-lb \ --default-backend-bucket=cat-backend-bucket
配置目标代理
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=http-lb
配置转发规则
-
对于全球外部应用负载均衡器,请将 gcloud CLI 命令与
load-balancing-scheme=EXTERNAL_MANAGED
结合使用。此设置提供了高级流量管理功能。 - 对于经典版应用负载均衡器,请使用
load-balancing-scheme=EXTERNAL
。
gcloud compute forwarding-rules create http-lb-forwarding-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=example-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
Terraform
配置后端
如需配置后端,请使用 google_compute_backend_bucket
资源。
配置网址映射
如需配置后端,请使用 google_compute_url_map
资源。
配置目标代理
如需配置目标代理,请使用 google_compute_target_http_proxy
资源或 google_compute_target_https_proxy
资源。
配置转发规则
如需配置转发规则,请使用 google_compute_global_forwarding_rule
资源。
- 对于全球外部应用负载均衡器,请使用
load_balancing_scheme="EXTERNAL_MANAGED"
。 此设置提供了高级流量管理功能。 - 对于经典版应用负载均衡器,请使用
load_balancing_scheme="EXTERNAL"
。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
将流量发送到您的后端存储桶
创建全局转发规则后,您的配置可能需要几分钟时间才能传播到全球范围。几分钟后,您就可以开始将流量发送到负载平衡器的 IP 地址。
控制台
- 在 Google Cloud 控制台中,转到负载均衡页面。
点击
http-lb
,展开您刚创建的负载平衡器。在后端部分中,确认后端存储分区运行状况良好。您的后端存储分区旁边应该有一个绿色选中标记。否则,请先尝试重新加载页面。Google Cloud 控制台可能需要一段时间才能指示后端运行状况良好。
在 Google Cloud 控制台显示后端存储桶运行状况良好后,您可以使用网络浏览器转到
http://IP_ADDRESS/never-fetch/three-cats.jpg
来测试您的负载均衡器。将IP_ADDRESS
替换为负载平衡器的 IP 地址。您的浏览器应该会打开一个页面,其中包含呈现图形文件的内容。
gcloud
使用 curl
命令测试网址的响应。将 IP_ADDRESS
替换为负载平衡器的 IPv4 地址。
请记下预留的 IPv4 地址:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
发送 curl 请求:
curl http://IP_ADDRESS/never-fetch/three-cats.jpg
验证 Cloud CDN 是否正常运行
如果您连续多次重新加载 http://IP_ADDRESS/never-fetch/three-cats.jpg
页面,则应该有多次缓存命中。
以下日志条目显示了缓存命中。您可以通过在 Google Cloud 控制台中打开日志浏览器并按转发规则名称进行过滤来查看缓存命中。
日志浏览器
{ insertId: "1oek5rg3l3fxj7" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" cacheId: "SFO-fbae48ad" statusDetails: "response_from_cache" } httpRequest: { requestMethod: "GET" requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg" requestSize: "577" status: 254 responseSize: "157" userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" remoteIp: "CLIENT_IP_ADDRESS" cacheHit: true cacheLookup: true } resource: { type: "http_load_balancer" labels: { zone: "global" url_map_name: "URL_MAP_NAME" forwarding_rule_name: "FORWARDING_RULE_NAME" target_proxy_name: "TARGET_PROXY_NAME" backend_service_name: "" project_id: "PROJECT_ID" } } timestamp: "2020-06-08T23:41:25.078651Z" severity: "INFO" logName: "projects/PROJECT_ID/logs/requests" trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992" receiveTimestamp: "2020-06-08T23:41:25.588272510Z" spanId: "7b6537d3672e08e1" }
控制台
- 在 Google Cloud 控制台中,转到负载均衡页面。
点击
http-lb
,展开您刚创建的负载平衡器。在后端部分中,确认后端存储分区运行状况良好。您的后端存储分区旁边应该有一个绿色选中标记。否则,请先尝试重新加载页面。Google Cloud 控制台可能需要一段时间才能指示后端运行状况良好。
在 Google Cloud 控制台显示后端存储桶运行状况良好后,您可以使用网络浏览器转到
http://IP_ADDRESS/never-fetch/three-cats.jpg
来测试您的负载均衡器。将IP_ADDRESS
替换为负载平衡器的 IP 地址。您的浏览器应该会打开一个页面,其中包含呈现图形文件的内容。
gcloud
使用 curl
命令测试网址的响应。将 IP_ADDRESS
替换为负载平衡器的 IPv4 地址。
请记下预留的 IPv4 地址:
gcloud compute addresses describe example-ip \ --format="get(address)" \ --global
发送 curl 请求:
curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg
从 Cloud Storage 中获取内容,并由 Cloud CDN 缓存,然后在内容过期或从缓存中逐出时对其进行验证并重新获取。
来自缓存的内容的 Age
标头大于零。
需要在 TTL 之前刷新的内容可以失效,并可从 Cloud Storage 中重新抓取。
停用 Cloud CDN
控制台
为单个后端存储分区停用 Cloud CDN
- 在 Google Cloud 控制台中,转到 Cloud CDN 页面。
- 在源站所在行的右侧,点击菜单 ,然后选择修改。
- 取消选中您想要停止使用 Cloud CDN 的所有后端存储分区的复选框。
- 点击更新。
为某个源站的所有后端存储分区移除 Cloud CDN
- 在 Google Cloud 控制台中,转到 Cloud CDN 页面。
- 在源站所在行的右侧,点击菜单 ,然后选择移除。
- 点击移除进行确认。
gcloud
gcloud compute backend-buckets update BACKEND_BUCKET_NAME \ --no-enable-cdn
停用 Cloud CDN 后,系统不会使缓存失效或完全清除缓存。如果您关闭 Cloud CDN,然后重新开启 Cloud CDN,则大部分或所有缓存的内容仍可能会被缓存。为了防止缓存使用内容,您必须使该内容失效。
后续步骤
- 如需了解缓存的内容,请参阅缓存概览。
- 如需在 GKE 中使用 Cloud CDN,请参阅 Ingress 功能。
- 如需检查 Cloud CDN 是否正在从缓存传送响应,请参阅查看日志。
- 如需了解常见问题及解决方案,请参阅问题排查。
- 如需为您的内容配置过滤和访问权限控制政策,请参阅边缘安全政策。