媒体 CDN 提供内容分发、缓存分流、源站防护 请求授权并与 Google Cloud 集成 外部应用负载平衡器、Logging 监控平台。
媒体 CDN 提供多种 REST API 资源:
EdgeCacheService
,负责面向客户端的配置 (TLS、IP 地址)、路由 CDN 配置 (缓存模式、TTL、签名)以及 安全政策。EdgeCacheOrigin
,负责针对每个源站进行配置 基于 HTTP 的来源,以及内容不是 可用或可访问。例如,作为冗余视频打包器的一部分 配置。- (可选)
EdgeCacheKeyset
,其中包含使用的一组公钥 用于 验证客户端请求是否已签名 基础设施 / CMSEdgeCacheKeysets
已关联 与EdgeCacheService
相关联,并且可以在多项服务中使用。
这些资源在以下示例中表示,该示例显示了
EdgeCacheService
会终止流量,然后路由到其他
EdgeCacheOrigins
.
EdgeCacheService
的配置示例
终止流量,使用可选的
EdgeCacheKeyset
,并将请求路由到
EdgeCacheOrigins
。权限
您必须拥有创建所需的 Identity and Access Management 权限 媒体 CDN 资源。媒体 CDN 拥有以下预定义 IAM 角色:
roles/networkservices.edgeCacheAdmin
roles/networkservices.edgeCacheUser
roles/networkservices.edgeCacheViewer
启用所需的服务
如需配置和部署媒体 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 文档。
配置示例
下面的资源列表介绍了 媒体 CDN 配置:
一个
EdgeCacheOrigin
:- 基于 Cloud Storage 的源站(可重试缓存) 针对备用来源 (AWS S3) 进行提取(如果对象不在 Cloud Storage(例如 HTTP 404)或 5xx 错误 错误。
一个
EdgeCacheKeyset
,其中包含:- 两个 Ed25519 公钥,用于验证 签名请求。
- 在示例配置中,您可以每月轮替密钥, 同时在生产环境中保留两个密钥
一个
EdgeCacheService
和两条路由,包括:- 与 Cloud Storage 源关联的清单路由,具有 短缓存 TTL。
- 视频片段路由(受签名请求保护),以及 与 Cloud Storage 源相关联,配置为缓存 所有响应。
IPv4、IPv6、启用日志记录(默认)和托管式 SSL 证书 已配置
以下示例展示了此配置的 gcloud
输出:
gcloud edge-cache origins describe prod-media-origin
id: "2295067926314745283" creationTimestamp: "2019-11-13T09:53:48.757-08:00" name: "prod-media-origin" description: "" originAddress: "gs://bucket_name/" failoverOrigin: "s3-origin" retryConditions: [HTTP_5XX, NOT_FOUND] originProtocol: HTTP2 timeouts: connectTimeout: 5s maxAttemptsTimeout: 10 responseTimeout: 6s
id: "2295067926314745283" creationTimestamp: "2019-11-13T09:53:48.757-08:00" name: "s3-origin" description: "" originAddress: "media.example.com.s3.amazonaws.com" retryConditions: [HTTP_5XX, NOT_FOUND] originProtocol: HTTP2
gcloud edge-cache keysets describe prod-keyset
id: "2295067926314745283" creationTimestamp: "2019-11-13T09:53:48.757-08:00" name: "prod-keyset" publicKeys: - name: "sept-2020-key" value: "DThVLjhAKm3VYOvLBAwFZ5XbjVyF98Ias8NZU0WEM9w=" - name: "aug-2020-key" value: "3nQa82ScYgDDAxJrKCqumSEg60VNODGR5dGAveJWsw4="
gcloud edge-cache services describe prod-media-service
name: "prod-media-service" edgeSslCertificates: - "media-example-com-cert" - "video-serving-example-com-cert" requireTls: true routing: hostRules: - description: "prod hostnames" hosts: - "media.example.com" - "video-serving.example.net" pathMatcher: "routes" pathMatchers: - name: "routes" routeRules: - priority: 1 description: "prod video segments" origin: "prod-media-origin" matchRules: - pathTemplateMatch: "/**.ts" # HLS segments - pathTemplateMatch: "/**.m4s" # DASH / CMAF segments routeAction: cdnPolicy: cacheMode: "FORCE_CACHE_ALL" clientTtl: 3600s defaultTtl: 86400s signedRequestMode: REQUIRE_SIGNATURES signedRequestKeySet: "prod-keyset" headerAction: responseHeadersToAdd: - headerName: cache-status headerValue: "{cdn_cache_status}" - headerName: proxy-status headerValue: "{proxy_status}" - priority: 2 description: "prod manifest endpoints" origin: "prod-media-origin" matchRules: - pathTemplateMatch: "/**.m3u8" # HLS playlists - pathTemplateMatch: "/**.mpd" # DASH manifests routeAction: urlRewrite: pathPrefixRewrite: "/output/manifests" cdnPolicy: cacheMode: "CACHE_ALL_STATIC" clientTtl: 10s defaultTtl: 30s maxTtl: 120s headerAction: responseHeadersToAdd: - headerName: cache-status headerValue: "{cdn_cache_status}" - headerName: proxy-status headerValue: "{proxy_status}" - priority: 3 # catch all routes should be the lowest priority route description: "catch all route" origin: "prod-media-origin" matchRules: - prefixMatch: / headerAction: responseHeadersToAdd: - headerName: cache-status headerValue: "{cdn_cache_status}" - headerName: proxy-status headerValue: "{proxy_status}"
媒体 CDN 的配置选项
如需配置媒体 CDN,您可以使用以下工具:
- Google Cloud 控制台
- 导入的 YAML 或 JSON 文件
- API 直接
使用 Google Cloud 控制台
有关如何配置媒体 CDN 的说明,请参阅 Google Cloud 控制台,请参阅快速入门。
导入和导出配置
借助 gcloud CLI,您可以从 YAML 或 JSON 文件,可实现与持续交付系统或 使用基础架构即代码 工具。您可以复制配置并在 然后更新生产环境和快照 部署到版本控制中
仅限输出的字段不会导入,并且会在导入时隐式排除 配置。具体而言:
- IP 地址专用于每项服务,因此不会被导入。 服务无法共享 IP 地址。
- 资源的
selfLink
,基于资源名称。 - 资源的
id
,是自动生成的。
如需导出服务(EdgeCacheOrigin
或 EdgeCacheKeyset
),请使用 export
子命令。例如,要导出服务配置,请使用以下代码:
gcloud edge-cache services export SERVICE_NAME \ --destination=my-service.yaml
Exported [projects/my-project/locations/global/edgeCacheServices/SERVICE_NAME] to 'my-service.yaml'.
同样,您也可以导入现有服务配置 服务或现有服务的就地更新:
gcloud edge-cache services import new-staging-service \ --source=my-service.yaml
使用异步 API 操作
默认情况下,用于创建、更新或删除资源的 gcloud
命令
并且仅在任务完成后返回(无论是成功还是
)。默认情况下,REST API 是异步的。
在某些情况下,您可能希望异步发出这些请求。您可以
提供 --async
标志,这会使命令立即返回
以及操作 ID。您可以使用此 ID 进行检查和轮询以确认
任务是否成功,是否返回错误,以及
之前的消息是。
您(按 ID)检查单个操作,以了解
。例如,如果您配置了 logConfig.sampleRate
,但未同时配置
设置 logConfig.enable = true
,则会出现以下错误
返回:
gcloud edge-cache operations describe operation-1611525680496-5b9ac8fbb7f58-90a7a822-f0c1e8c6
done: true error: message: "Logs sample rate must not be specified without enabling logging." name: projects/my-project/locations/global/operations/operation-1611525680496-5b9ac8fbb7f58-90a7a822-f0c1e8c6
要查看最近的所有操作、操作状态和完成情况,您可以 以下命令:
gcloud edge-cache operations list
END_TIME ID TARGET DONE operation-1611095421009-5b9486244bf21-cc6b5924-628b8e2a True operation-1611096056610-5b94888273fe6-2da85286-8c810f8e True operation-1611095551517-5b9486a0c251e-c2e1bbbb-de4aa8a5 True