配置概览

媒体 CDN 提供内容分发、缓存分流、源站防护 请求授权并与 Google Cloud 集成 外部应用负载平衡器、Logging 监控平台。

媒体 CDN 提供多种 REST API 资源:

  • EdgeCacheService,负责面向客户端的配置 (TLS、IP 地址)、路由 CDN 配置 (缓存模式、TTL、签名)以及 安全政策
  • EdgeCacheOrigin,负责针对每个源站进行配置 基于 HTTP 的来源,以及内容不是 可用或可访问。例如,作为冗余视频打包器的一部分 配置。
  • (可选)EdgeCacheKeyset,其中包含使用的一组公钥 用于 验证客户端请求是否已签名 基础设施 / CMSEdgeCacheKeysets已关联 与 EdgeCacheService 相关联,并且可以在多项服务中使用。

这些资源在以下示例中表示,该示例显示了 EdgeCacheService会终止流量,然后路由到其他 EdgeCacheOrigins.

<ph type="x-smartling-placeholder">
</ph> 包含终止命令的“EdgeCacheService”的配置示例
   使用可选的“EdgeCacheKeyset”检查有无签名请求,以及
   将请求路由到三个不同的“EdgeCacheOrigins”。
包含 EdgeCacheService 的配置示例 终止流量,使用可选的 EdgeCacheKeyset,并将请求路由到 EdgeCacheOrigins

权限

您必须拥有创建所需的 Identity and Access Management 权限 媒体 CDN 资源。媒体 CDN 拥有以下预定义 IAM 角色:

  • roles/networkservices.edgeCacheAdmin
  • roles/networkservices.edgeCacheUser
  • roles/networkservices.edgeCacheViewer

启用所需的服务

如需配置和部署媒体 CDN 服务,您需要启用 Network Services APICertificate Manager API

控制台

  1. 启用 Network Services API。

    启用该 API

  2. 启用 Certificate Manager API。

    启用该 API

gcloud

  1. 启用 Network Services API:

    gcloud services enable networkservices.googleapis.com
    
  2. 启用 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

有关如何配置媒体 CDN 的说明,请参阅 Google Cloud 控制台,请参阅快速入门

导入和导出配置

借助 gcloud CLI,您可以从 YAML 或 JSON 文件,可实现与持续交付系统或 使用基础架构即代码 工具。您可以复制配置并在 然后更新生产环境和快照 部署到版本控制中

仅限输出的字段不会导入,并且会在导入时隐式排除 配置。具体而言:

  • IP 地址专用于每项服务,因此不会被导入。 服务无法共享 IP 地址。
  • 资源的 selfLink,基于资源名称。
  • 资源的 id,是自动生成的。

如需导出服务(EdgeCacheOriginEdgeCacheKeyset),请使用 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