本快速入门介绍如何设置媒体 CDN 服务,使其位于 Cloud Storage 存储分区前面。您可以将此配置用于测试,也可以将其作为生产环境的基础。
如需在 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子命令组,用于管理新的和现有的 Media CDN 配置。创建 Media 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 存储桶
Media CDN 内容可来自 Cloud Storage 存储分区、第三方存储位置或负载平衡器等位置。
在此快速入门中,我们将内容存储在 Cloud Storage 存储分区中。
创建一个可公开访问的 Cloud Storage 存储分区,并将其命名为
my-bucket。如果您不想让 Cloud Storage 存储分区可公开访问,则必须向 Media CDN 授予访问该存储分区的权限。如需了解详情,请参阅使用私有 Cloud Storage 存储分区。
将文件上传到存储分区。
启用必需服务
如需配置和部署 Media 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
如需详细了解如何启用和停用服务,请参阅服务使用工具文档。
创建 EdgeCacheOrigin 资源
创建指向 Cloud Storage 存储分区的来源。
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
点击来源标签页。
点击创建源站。
输入来源的名称,即
cloud-storage-origin。可选:输入来源的说明。
在来源地址部分,选中选择 Google Cloud Storage 存储桶,浏览到名为
my-bucket的 Cloud Storage 存储桶,然后点击选择。如果您有外部来源,请选择指定 FQDN 或 IP 地址,然后输入 FQDN 或 IP 地址。
点击创建源站。
大约 10 分钟后,新创建的 EdgeCacheOrigin 资源会显示在项目“源站”页面 (Origins) 的源站列表中。
如需更新发货地址,请点击相应发货地址,然后点击修改。
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 控制台中,前往 Media 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:新服务的网域如果您指定了域名,Media 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_ID
{
"name": "SERVICE_ID",
"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_ID:服务的名称DOMAIN:新服务的网域如果您指定了域名,Media CDN 会针对其他主机返回
404错误。ORIGIN_NAME:相关来源的名称
如需在项目的 EdgeCacheService 资源列表中查看新创建的服务,请使用 edgeCacheServices.list 方法。
Terraform
创建第一个服务可能需要几分钟时间。 媒体 CDN 会预配专用 IP 地址,并将您的配置推送到数千个边缘位置。后续对服务进行的更新(例如更改路由配置或匹配参数)速度更快。
检索 IP 地址
如需查看新创建的服务的 IP 地址,请按以下步骤操作:
控制台
在 Google Cloud 控制台中,前往 Media 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_ID
将 SERVICE_ID 替换为相应服务的简称。
检索到的详细信息包括分配给服务的 IP 地址:
ipv4Addresses:
IPV4_ADDRESS
ipv6Addresses:
IPV6_ADDRESS
测试是否正在缓存响应
在测试服务之前,请确保您的源站中存储了可缓存的内容,以便 Media CDN 可以检索到这些内容。
如需测试您的服务是否已正确配置为缓存内容,请使用 curl 命令行工具发出请求并检查响应。curl 在 Google Cloud 控制台的 Cloud Shell 中也可用。
如果您想将 EdgeCacheService 与您的网域搭配使用,可以将 EdgeCacheService 的 IP 地址分配给网域记录。如需了解相关说明,请参阅使用 Cloud DNS 设置网域。
设置好网域后,您可以使用以下 curl 命令访问内容:
curl -svo /dev/null "http://DOMAIN_NAME/FILE_NAME"
如果您未配置 DNS 以指向已预配的 IP 地址,请使用 resolve 选项来替换 curl 使用的地址。
curl -svo /dev/null --resolve DOMAIN_NAME:80:IP_ADDRESS "http://DOMAIN_NAME/FILE_NAME"
替换以下内容:
DOMAIN_NAME:您在创建服务时指定的托管域名IP_ADDRESS:服务在服务列表的地址列中显示的 IP 地址FILE_NAME:您上传到存储分区的文件的名称
示例:
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 控制台中,前往 Media 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_ID
将
SERVICE_ID替换为服务的简称。如需删除来源,请使用
edgeCacheOrigins.delete方法:DELETE https://networkservices.googleapis.com/v1/ORIGIN将
ORIGIN替换为来源的完整名称。请使用以下格式:projects/PROJECT/locations/global/edgeCacheOrigins/ORIGIN_ID
将
ORIGIN_ID替换为来源的简称。
对于您创建的任何其他不打算再次使用的资源(例如 Cloud Storage 存储分区),请重复此过程。
后续步骤
- 为您的
EdgeCacheService颁发并附加 SSL (TLS) 证书。 - 使用 Cloud Logging 查看请求日志。
- 配置已签名请求以保护您的内容。
- 优化缓存键和 TTL,并提高缓存命中率。
- 配置高级路由匹配并创建其他来源。