本快速入门介绍了如何在 Cloud Storage 存储桶前面设置媒体 CDN 服务。您可以将此配置用于测试,也可以将其作为生产环境的基础。
如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示:
本页介绍了以下步骤:
- 创建 Cloud Storage 存储桶以存储内容。
- 启用所需服务。
- 创建
EdgeCacheOrigin资源,以将媒体 CDN 连接到您的存储桶。 - 创建
EdgeCacheService资源,以配置源站中内容的请求路由和缓存。 - 测试是否正在缓存响应。
准备工作
确保您满足以下要求:
对媒体 CDN 的访问权限 ,适用于您的当前项目。
已安装 Google Cloud CLI。请使用 345.0.0 或更高版本。
如果需要,请使用
gcloud version检查版本,并使用gcloud components update更新已安装的 gcloud CLI。gcloud CLI 提供了
gcloud edge-cache子命令组 ,用于管理新的和现有的媒体 CDN 配置。创建媒体 CDN 资源所需的 Identity and Access Management (IAM) 权限 。
所需的角色
如需获得完成本文档中的任务所需的权限,请让管理员为您授予以下角色:
roles/networkservices.edgeCacheAdmin:有权创建、更新、删除和管理所有 Edge Cache 资源。roles/networkservices.edgeCacheUser:有权查看和使用 Edge Cache 资源。roles/networkservices.edgeCacheViewer:对 Edge Cache 资源的只读权限。
如需创建存储桶
- Storage Admin 角色
(
roles/storage.admin)
如需在媒体 CDN 上启用 SSL
- Certificate Manager Editor 角色 (
roles/certificatemanager.editor)
您也可以通过自定义 角色或其他预定义 角色来获取所需的权限。
创建 Cloud Storage 存储桶
媒体 CDN 内容可以源自 Cloud Storage 存储桶、第三方存储位置或负载平衡器等位置。
在本快速入门中,我们将内容存储在 Cloud Storage 存储桶中。
创建一个可公开访问的 Cloud Storage 存储桶 并将其命名为
my-bucket。如果您不想让 Cloud Storage 存储桶可公开访问,则必须向媒体 CDN 授予访问该存储桶的权限。如需了解详情,请参阅 使用私有 Cloud Storage 存储分区。
将文件上传到存储桶。
启用所需服务
如需配置和部署媒体 CDN 服务,您需要为项目同时启用 Network Services API 和Certificate Manager API 。
控制台
gcloud
启用 Network Services API:
gcloud services enable networkservices.googleapis.com启用 Certificate Manager API:
gcloud services enable certificatemanager.googleapis.com
如需详细了解如何启用和停用服务,请参阅 Service Usage 文档。
创建 EdgeCacheOrigin 资源
创建一个指向 Cloud Storage 存储桶的源站。
控制台
在 Google Cloud 控制台中,前往媒体 CDN 页面。
点击来源 标签页。
点击创建源站 。
将源站的名称输入为
cloud-storage-origin。可选:输入源站的说明。
在来源地址 部分,选中选择 Google Cloud Storage 存储桶 ,浏览到名为
my-bucket的 Cloud Storage 存储桶, 然后点击选择 。如果您有外部源站,请改为选择指定 FQDN 或 IP 地址,然后输入 FQDN 或 IP 地址。
点击创建源站 。
大约 10 分钟后,新创建的 EdgeCacheOrigin 资源会显示在来源 页面上项目的源站列表中。
如需更新源站地址,请点击源站,然后点击 修改。
gcloud
使用 gcloud edge-cache origins create 命令:
gcloud edge-cache origins create ORIGIN \
--origin-address="ADDRESS"
替换以下内容:
ORIGIN:新源站的名称ADDRESS:存储桶名称,gs://my-bucket
如果您有外部源站,请改为将 ADDRESS 替换为 FQDN 或 IP 地址。
如需查看新创建的源站,请使用
gcloud edge-cache origins list 命令。
如需更新源站地址,请使用
gcloud edge-cache origins update 命令。
API
使用 edgeCacheOrigins.create 方法:
POST https://networkservices.googleapis.com/v1/PARENT/edgeCacheOrigins?edgeCacheOriginId=ORIGIN_ID
{
"name": "ORIGIN_ID",
"originAddress: "ADDRESS"
}
替换以下内容:
PARENT:父级资源,格式为projects/PROJECT/locations/globalORIGIN_ID:新源站的简称ADDRESS:存储桶名称,gs://my-bucket如果您有外部源站,请改为将
ADDRESS替换为 FQDN 或 IP 地址。
如需查看新创建的源站,请使用
edgeCacheOrigins.list 方法。
如需更新源站地址,请使用
edgeCacheOrigins.patch 方法。
Terraform
创建 EdgeCacheService 资源
EdgeCacheService 资源用于配置路由、证书和缓存设置,并且可以指向 EdgeCacheOrigin 资源。
创建一个基本的 EdgeCacheService 资源,该资源执行以下操作:
- 将配置的源站的所有响应缓存一小时
- 设置
x-cache-status响应标头,该标头会返回缓存状态(例如HIT或MISS)
控制台
在 Google Cloud 控制台中,前往媒体 CDN 页面。
点击 Services (服务)标签页。
点击创建服务 。
为您的服务输入一个唯一名称(例如
my-service),然后点击下一步 。在路由 部分,点击添加主机规则,然后输入一个 或多个主机域名。
对于主机,请输入主机域名,例如
web.example.com。点击添加路由规则。
- 对于优先级,指定
1。 - 点击添加匹配条件,对于路径匹配,指定
/,然后点击完成。 - 选择从来源提取,然后选择您配置的源站。
- 点击附加操作。
- 在标头操作中,点击添加内容。然后,执行以下操作:
- 对于类型,选择要添加的响应标头。
- 点击添加标头 。
- 对于名称,请指定
x-cache-status;对于值,请指定{cdn_cache_status}。 - 点击完成 。
- 对于路由操作,点击添加内容。然后,执行以下操作:
- 对于类型,选择 CDN 政策。
- 对于缓存模式,选择 FORCE_CACHE_ALL。
- 点击完成。
- 点击保存。
- 对于优先级,指定
点击创建服务 。
新创建的 EdgeCacheService 资源会显示在服务 页面上项目的服务列表中。
gcloud
在 Cloud Shell 中,使用文本编辑器创建一个名为
my-service.yaml的本地文件。此类文件表示以下内容:
- 路由的工作方式:先匹配主机,然后匹配路径
- 缓存的工作方式:基于缓存模式和 TTL
- 如何修改请求和响应:例如,通过将
cdn_cache_status变量插入响应标头
将以下示例内容粘贴到文件中,然后保存:
name: SERVICE routing: hostRules: - hosts: - DOMAIN pathMatcher: routes pathMatchers: - name: routes routeRules: - priority: 1 matchRules: - prefixMatch: / origin: ORIGIN routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC defaultTtl: 3600s headerAction: responseHeadersToAdd: - headerName: "x-cache-status" headerValue: "{cdn_cache_status}"替换以下内容:
SERVICE:服务的名称DOMAIN:新服务的网域如果您指定了域名,则媒体 CDN 会针对其他主机返回
404错误。ORIGIN:相关源站的名称
使用
gcloud edge-cache services import命令 和 YAML 文件:gcloud edge-cache services import SERVICE \ --source=my-service.yaml如需在项目的
EdgeCacheService资源列表中查看新创建的服务,请使用gcloud edge-cache services list命令。
API
使用 edgeCacheServices.create 方法:
POST https://networkservices.googleapis.com/v1/PARENT/edgeCacheServices?edgeCacheServiceId=SERVICE_NAME
{
"name": "SERVICE_NAME",
"routing": {
"hostRules": [
{
"hosts": ["DOMAIN"],
"pathMatcher": "routes"
}
],
"pathMatchers": [
{
"name": "routes",
"routeRules": [
{
"priority": "1",
"matchRules": [
{
"prefixMatch": "/"
}
],
"origin": "ORIGIN",
"routeAction": {
"cdnPolicy": {
"cacheMode": "CACHE_ALL_STATIC",
"defaultTtl": "3600s"
}
}
"headerAction": {
"responseHeadersToAdd": [
{
"headerName": "x-cache-status",
"headerValue": "{cdn_cache_status}"
}
]
},
}
]
}
]
}
}
替换以下内容:
PARENT:父级资源,格式为projects/PROJECT/locations/globalSERVICE_NAME:服务的名称DOMAIN:新服务的网域如果您指定了域名,则媒体 CDN 会针对其他主机返回
404错误。ORIGIN_NAME:相关源站的名称
如需在项目的 EdgeCacheService 资源
列表中查看新创建的服务,请使用
edgeCacheServices.list 方法。
Terraform
创建第一个服务可能需要几分钟时间。 媒体 CDN 会预配专用 IP 地址,并将您的配置推送到数千个边缘位置。对服务的后续更新(例如更改路由配置或匹配参数)会更快。
检索 IP 地址
如需查看新创建的服务的 IP 地址,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往媒体 CDN 页面。
点击 Services (服务)标签页。
如需查看服务的 IP 地址,请参阅地址 单元格。
如果该单元格为空,请刷新浏览器。
gcloud
使用 gcloud edge-cache services describe 命令:
gcloud edge-cache services describe SERVICE
将 SERVICE 替换为服务的名称。
输出会显示分配给服务的 IP 地址:
ipv4Addresses:
IPV4_ADDRESS
ipv6Addresses:
IPV6_ADDRESS
name: projects/my-project/locations/global/edgeCacheServices/SERVICE
...
API
GET https://networkservices.googleapis.com/v1/SERVICE_NAME
将 SERVICE_NAME 替换为服务的完整名称。请使用以下格式:
projects/PROJECT/locations/global/edgeCacheServices/SERVICE_NAME
将 SERVICE_NAME 替换为服务的简称。
检索到的详细信息包括分配给服务的 IP 地址:
ipv4Addresses:
IPV4_ADDRESS
ipv6Addresses:
IPV6_ADDRESS
测试是否正在缓存响应
在测试服务之前,请确保源站中存储了可缓存 内容,以便 媒体 CDN 可以检索该内容。
如需测试服务是否已正确配置为缓存内容,请使用 curl 命令行工具发出请求并检查响应。您还可以在 Cloud Shell 中使用 curl
控制台。 Google Cloud
如果您想将 EdgeCacheService 与您的网域搭配使用,可以将 EdgeCacheService 的 IP
地址分配给网域记录。如需了解相关说明,请参阅使用 Cloud DNS 设置网域。设置网域后,请使用以下
curl 命令访问您的内容:
curl -svo /dev/null "http://DOMAIN_NAME/FILENAME"
如果您未配置 DNS 以指向预配的 IP 地址,请使用 resolve 选项替换 curl 使用的地址。
curl -svo /dev/null --resolve DOMAIN_NAME:80:IP_ADDRESS "http://DOMAIN_NAME/FILENAME"
替换以下内容:
DOMAIN_NAME:您在创建服务时指定的主机域名IP_ADDRESS:服务在服务列表的地址列中显示的 IP 地址FILENAME:您上传到 存储桶的文件的名称
示例:
curl -svo /dev/null --resolve web.example.com:80:34.104.37.129 "http://web.example.com/file.mp4"
该命令最初会生成类似于以下内容的输出,状态为 miss,因为媒体 CDN 还没有从源站检索到请求的数据:
< HTTP/2 200 OK
...
< x-cache-status: den;miss
...
当您多次提交同一请求时,它会生成类似于以下内容的输出,状态为 hit:
< HTTP/2 200 OK
...
< x-cache-status: den;hit
...
如果未显示状态 hit,请检查以下各项:
- 响应可缓存。
- 配置的缓存模式允许缓存内容。
- 源站未设置阻止缓存的缓存指令。如需了解更多 信息,请参阅缓存配置。
您现在已测试了可在全球范围内提供内容的基本 EdgeCacheService 资源。生产级服务可能需要 SSL (TLS)
证书、多个源站和
Google Cloud Armor 安全政策。
可选:清理
删除您不打算再次使用的任何资源。
控制台
在 Google Cloud 控制台中,前往媒体 CDN 页面。
点击 Services (服务)标签页。
选择您的服务,然后点击删除 。
点击来源 标签页。
选择您的源站,然后点击删除 。
gcloud
如需列出您创建的资源,请使用
gcloud edge-cache origins list命令 和gcloud edge-cache services list命令。如需删除服务,请使用
gcloud edge-cache services delete命令:gcloud edge-cache services delete SERVICE将
SERVICE替换为服务的名称。如需删除源站,请使用
gcloud edge-cache origins delete命令:gcloud edge-cache origins delete ORIGIN将
ORIGIN替换为源站的名称。
API
如需列出您创建的资源,请使用
edgeCacheServices.list方法 和edgeCacheOrigins.list方法。如需删除服务,请使用
edgeCacheServices.delete方法:DELETE https://networkservices.googleapis.com/v1/SERVICE_NAME将
SERVICE_NAME替换为服务的完整名称。请使用以下格式:projects/PROJECT/locations/global/edgeCacheServices/SERVICE_NAME
将
SERVICE_NAME替换为服务的简称。如需删除源站,请使用
edgeCacheOrigins.delete方法:DELETE https://networkservices.googleapis.com/v1/ORIGIN将
ORIGIN替换为源站的完整名称。请使用以下格式:projects/PROJECT/locations/global/edgeCacheOrigins/ORIGIN_ID
将
ORIGIN_ID替换为源站的简称。
对于您创建且不打算再次使用的任何其他资源(例如 Cloud Storage 存储桶),重复此过程。
后续步骤
- 颁发并附加 SSL (TLS) 证书
到您的
EdgeCacheService。 - 查看请求日志 使用 Cloud Logging。
- 配置已签名请求 以保护您的内容。
- 优化缓存键和 TTL 并提高缓存命中率。
- 配置高级路由匹配 并创建其他源站。