配置来源

您可以通过多种方式为媒体 CDN 配置源站。本页面介绍了如何配置源站。

将 Cloud Storage 存储桶配置为来源

媒体 CDN 支持将 Cloud Storage 存储分区作为内容的后端。每项服务都可以通过为主机、路径和其他请求属性配置路由来引用多个存储分区。

Cloud Storage 存储桶是在创建源资源时使用存储桶网址(例如 gs://my-bucket)作为源地址进行配置的。

控制台

  1. 在 Google Cloud 控制台中,前往媒体 CDN 来源页面。

    转到“源站”

  2. 点击创建源站

  3. 输入来源的名称。例如:cloud-storage-origin

  4. 可选:输入说明。

  5. 对于源地址,选择选择 Google Cloud Storage 存储桶

  6. 浏览到您的 Cloud Storage 存储桶并选择它。

  7. 对于 Cloud Storage,请保留默认协议和端口设置。

  8. 可选:如需使源请求标头替换项优先于客户端发送的标头或路由级标头操作控制的标头,请执行以下操作:

    1. 选择启用源替换
    2. Headers 部分,通过添加一个或多个名称-值对来指定标头。
  9. 可选:选择一个故障切换来源,以便在此来源变得无法访问时尝试。您可以稍后更新此字段。

  10. 选择重定向条件

  11. 选择重试条件

  12. 对于尝试次数上限,请选择从此来源填充缓存的尝试次数上限。

  13. 可选:指定以下 timeout 值:

    1. 对于连接超时,选择等待建立源连接的最大时长。
    2. 对于响应超时,选择允许完成响应的最大时长。
    3. 对于读取超时,选择单个 HTTP 连接或数据流读取之间等待的最长时长。
  14. 可选:点击添加标签,然后指定一个或多个键值对。

  15. 点击创建源站

gcloud

使用 gcloud edge-cache origins create 命令

gcloud edge-cache origins create ORIGIN \
    --origin-address=ADDRESS

请替换以下内容:

  • ORIGIN:新来源的名称
  • ADDRESS:存储桶名称,例如 gs://my-bucket

无论存储桶是多区域位置、双区域位置还是单区域位置,这一点都相同。

配置服务时,您可以将视频点播内容路由到一个存储桶,将直播内容路由到第二个存储桶。如果每个工作流由不同的团队管理,这种做法会非常有用。如需缩短缓存填充延迟时间,您同样可以将 eu-media.example.com 区域路由到位于欧盟和 us-media.example.com 区域的多区域 Cloud Storage 存储桶(或匹配路径、标头或查询参数)到位于美国的存储桶。

媒体 CDN 存储分区。
媒体 CDN 存储分区(点击可放大)。

对于写入延迟时间至关重要的情况(例如低延迟实时流式传输),您可以在尽可能靠近用户的位置配置区域 Cloud Storage 端点。

对请求进行身份验证

如需确认请求是否来自媒体 CDN,请使用以下受支持的方法之一:

  • 验证连接的 IP 地址是否来自媒体 CDN 的缓存填充范围。这些范围在所有客户之间共享,但 EdgeCacheService 资源在连接到源站时始终使用这些范围。
  • 添加自定义请求标头,其中包含您在源站上验证的令牌值(例如,16 个字节的随机值)。然后,您的源可以拒绝不包含此值的请求。

如需了解如何为每个路由设置请求标头,请参阅自定义标头

配置源协议

对于仅支持 HTTPS(通过 TLS 的 HTTP/1.1)或 HTTP/1.1(无 TLS)的源站,请通过执行以下操作来明确设置 protocol 字段:

控制台

  1. 在 Google Cloud 控制台中,前往媒体 CDN 来源页面。

    转到“源站”

  2. 选择您的来源,然后点击修改

  3. 对于协议,请选择 HTTPSHTTP。对于 HTTP,还要将端口指定为 80

  4. 点击更新来源

gcloud

使用 gcloud edge-cache origins update 命令

gcloud edge-cache origins update LEGACY_ORIGIN \
    --protocol=HTTPS

如果您的源支持 HTTP/2,则无需明确设置协议。

配置专用 Cloud Storage 存储分区

媒体 CDN 可以从任何可通过互联网访问的 HTTP 或 HTTPS 端点拉取内容。在某些情况下,您可能需要进行身份验证,以便仅允许媒体 CDN 拉取内容并防止未经授权的访问。Cloud Storage 通过 IAM 权限支持此功能。

对于 Cloud Storage 源站,请执行以下操作:

  • 向媒体 CDN 服务帐号授予您用作源站的 Cloud Storage 存储分区的 objectViewer IAM 权限。
  • 移除 allUsers 权限。
  • 可选:移除 allAuthenticatedUsers 权限。

如需更改 Cloud Storage 存储桶的权限,您需要拥有 Storage Admin IAM 角色

媒体 CDN 服务帐号归媒体 CDN 项目所有,不会显示在您项目的服务帐号列表中。

服务帐号采用以下格式,仅授予对您明确允许的项目中的媒体 CDN 资源的访问权限。

service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com

如需授予媒体 CDN 访问存储桶的权限,请向该服务帐号授予 objectViewer 角色:

gsutil iam ch \
serviceAccount:service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com:objectViewer gs://BUCKET

如需移除给定存储桶的 allUsers 角色的所有权限,请运行以下命令:

gsutil iam ch -d allUsers gs://BUCKET

如需验证公开访问权限是否已移除,请打开无痕浏览器窗口并尝试使用 https://storage.googleapis.com/BUCKET/object.ext 访问存储桶对象。

要允许一个项目中的 EdgeCacheService 资源访问另一个项目中的 Cloud Storage 存储桶,您可以向该项目中的媒体 CDN 服务帐号授予访问该存储桶的权限。

为此,请确保 service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com 中的 PROJECT_NUM 是包含需要访问权限的 EdgeCacheService 资源的项目的编号。您可以对多个项目重复此操作,尤其是当其中一些项目包含不同的媒体 CDN 环境(如开发、预演或生产)并且单独的项目包含您的视频或媒体素材资源时。

您可以保护对 Cloud Storage 源站的访问,而无需为该路由启用签名请求

配置专用 Cloud Storage 不会阻止直接从媒体 CDN 访问缓存的内容。如需了解如何向单个用户发出签名请求,请参阅签名请求

将外部应用负载平衡器配置为来源

如果您需要跨 Compute Engine、GKE 或本地源站进行主动健康检查、轮循或负载感知型导向,可以配置外部应用负载平衡器作为源站。

这样,您就可以配置(例如)媒体 CDN 后面的实时流式传输打包器,或配置由 Cloud Service Mesh 管理的一组 Envoy 代理,以重新连接到本地基础架构。

通过负载平衡器,您可以为以下各项配置后端

将用于传送视频清单的外部应用负载平衡器来源和用于片段存储的 Cloud Storage 来源组合在一起的架构如下所示,其中两个来源映射到不同的路由。

边缘缓存部署。
边缘缓存部署(点击可放大)。

如需将外部应用负载均衡器配置为来源,您需要使用指向负载均衡器的转发规则的 IP 地址或公共主机名创建来源资源。首选公开主机名(域名),因为 SSL (TLS) 证书和现代 HTTP 版本(HTTP/2 和 HTTP/3)要求使用公开主机名(域名)。

您还必须确保:

  • 您的负载均衡器的路由与用于 EdgeCacheService 资源的主机名匹配,或者您已经为将负载均衡器配置为来源的路由配置了 urlRewrite.hostRewrite
  • 您的负载均衡器已为这些主机名配置了受大众信任的 SSL (TLS) 证书。

例如,如果指向负载均衡器的转发规则的公共域名是 origin-packager.example.com,则需要创建一个源站,并将 originAddress 设置为此名称。

控制台

  1. 在 Google Cloud 控制台中,前往媒体 CDN 来源页面。

    转到“源站”

  2. 点击创建源站

  3. 输入来源的名称。例如:load-balancer-origin

  4. 可选:输入说明。

  5. 对于源地址,选择指定 FQDN 或 IP 地址

  6. 输入 Google Cloud 负载均衡器的 FQDN 或 IP 地址。

  7. 可选:选择一个故障切换来源,以便在此来源变得无法访问时尝试。您可以稍后更新此字段。

  8. 选择重试条件

  9. 对于尝试次数上限,请选择从此来源填充缓存的尝试次数上限。

  10. 可选:指定以下 timeout 值:

    1. 对于连接超时,选择等待建立源连接的最大时长。
    2. 对于响应超时,选择允许完成响应的最大时长。
    3. 对于读取超时,选择单个 HTTP 连接或数据流读取之间等待的最长时长。
  11. 可选:点击添加标签,然后指定一个或多个键值对。

  12. 点击创建源站

gcloud

使用 gcloud edge-cache origins create 命令

gcloud edge-cache origins create LB_ORIGIN \
    --origin-address=LB_ADDRESS

请替换以下内容:

  • LB_ORIGIN:源站的名称
  • LB_ADDRESS:FQDN 或 IP 地址,例如 origin-packager.example.com

如果您使用转发规则的 IP 地址作为源地址,或者没有将 SSL 证书附加到负载均衡器,则可以将协议设置为 HTTP 以回退到未加密的连接。我们建议您仅在开发或测试时执行此操作。

配置源故障切换

以下各部分介绍了如何配置源故障切换行为

源故障切换无重定向跟随

以下是基本的故障切换 EdgeCacheOrigin 配置:

name: FAILOVER_ORIGIN
originAddress: FAILOVER_DOMAIN_NAME

媒体 CDN 最多重试路由的主要来源三次,然后才会尝试进行故障切换来源。在此配置中,尝试主来源三次后,媒体 CDN 会尝试向 FAILOVER_ORIGIN 发出单个请求。如果故障切换来源也无法成功响应,则媒体 CDN 会返回整个来源响应;如果未收到状态代码,则返回 HTTP 502 Bad Gateway 响应。

缓存填充延迟时间会随着重试次数和故障切换事件数的增加而增加。增加源站超时值(例如 connectTimeout)会进一步影响缓存填充延迟时间,因为它会增加等待过载或繁忙的源服务器响应所用的时间。

以下示例演示了向 MY_ORIGIN 发送填充请求的配置。此配置会导致媒体 CDN 在出现连接错误(例如 DNS、TCP 或 TLS 错误)、来自源站的 HTTP 5xx 响应或 HTTP 404 Not Found 时重试。两次尝试后,它会故障切换到 FAILOVER_ORIGIN

您配置的来源最多可以进行四次尝试:原始尝试加最多三次重试。您可以为每个源站配置 maxAttempts 值,以确定尝试进行故障切换之前重试的次数。

name: MY_ORIGIN
originAddress: DOMAIN_NAME
maxAttempts: 2 # the number of attempts to make before trying the failoverOrigin
failoverOrigin: FAILOVER_ORIGIN
# what conditions trigger a retry or failover
retryConditions:
- CONNECT_FAILURE
- HTTP_5xx # any HTTP 5xx response
- NOT_FOUND # retry on a HTTP 404
timeout:
  maxAttemptsTimeout: 10s # set a deadline for all retries and failover

如果您的来源需要特定于来源的主机重写或修改标头,请使用以下 originOverrideAction 配置示例进行设置:

name: FAILOVER_ORIGIN
originAddress: "FAILOVER_ORIGIN_HOST"
originOverrideAction:
  urlRewrite:
    hostRewrite: "FAILOVER_ORIGIN_HOST"
  headerAction:
    requestHeadersToAdd:
    - headerName: "Authorization"
      headerValue: "AUTH-KEY"
      replace: true

以下是已完成的配置:

name: MY_ORIGIN
originAddress: DOMAIN_NAME
maxAttempts: 2 # the number of attempts to make before trying the failoverOrigin
failoverOrigin: FAILOVER_ORIGIN
# what conditions trigger a retry or failover
retryConditions:
- CONNECT_FAILURE
- HTTP_5xx # any HTTP 5xx response
- NOT_FOUND # retry on a HTTP 404
timeout:
  maxAttemptsTimeout: 10s # set a deadline for all retries and failover
name: FAILOVER_ORIGIN
originAddress: "FAILOVER_ORIGIN_HOST"
originOverrideAction:
  urlRewrite:
    hostRewrite: "FAILOVER_ORIGIN_HOST"
  headerAction:
    requestHeadersToAdd:
    - headerName: "Authorization"
      headerValue: "AUTH-KEY"
      replace: true

在前面的示例中,originOverrideAction.hostRewrite 设置优先于在指向此源的路由上配置的任何现有标头重写

您可以使用由该特定来源请求且针对每个来源请求的唯一 requestHeadersToAdd 标头。一个常见的用例是添加静态 Authorization 标头。由于这些标头操作在源站请求期间运行,因此按源站添加的标头会替换或附加到具有相同字段名称的现有标头。默认情况下,媒体 CDN 会附加到现有标头。如需替换现有头文件,请将 headerAction.replace 设置为 true

具有重定向跟随的源故障切换

例如,假设您已配置以下 EdgeCacheOrigin 资源,并且您的 EdgeCacheService 资源的路由配置为使用 PrimaryOrigin 进行缓存填充:

name: PrimaryOrigin
originAddress: "primary.example.com"
maxAttempts: 2
failoverOrigin: "SecondaryOrigin"
retryConditions: [CONNECT_FAILURE]
originRedirect:
  redirectConditions: [FOUND, TEMPORARY_REDIRECT]
name: SecondaryOrigin
originAddress: "secondary.example.com"
maxAttempts: 3
originRedirect:
  redirectConditions: [FOUND, TEMPORARY_REDIRECT]

在此示例中,当媒体 CDN 执行缓存填充时,媒体 CDN 会读取 PrimaryOrigin 的配置并相应地做出响应。

假设媒体 CDN 通过第 1 次尝试联系源站连接到 primary.example.com。如果 primary.example.com 返回成功响应,媒体 CDN 会将该响应用于缓存填充。

假设现在 primary.example.comLocation: b.example.com 返回 HTTP 302 Found Redirect。然后,作为第 2 次尝试连接源站,媒体 CDN 会遵循重定向到 b.example.com 的重定向。在这种情况下,媒体 CDN 将执行以下操作:

  • 如果 b.example.com 返回成功响应,媒体 CDN 使用该响应进行缓存填充。
  • 如果 b.example.com 返回重定向或失败响应,媒体 CDN 会故障切换到配置的 SecondaryOrigin。这是因为,在此示例中,PrimaryOrigin 被配置为两个 maxAttempts

如果媒体 CDN 故障切换到 SecondaryOrigin,媒体 CDN 会使用 SecondaryOrigin 配置并尝试连接到 secondary.example.com。这是第 1 次尝试联系源站,这是第 3 次尝试。

在这种情况下,媒体 CDN 将执行以下操作:

  • 如果 secondary.example.com 返回成功响应,媒体 CDN 会将该响应用于缓存填充。
  • 如果 secondary.example.comLocation: c.example.com 返回 HTTP 302 Found Redirect,则媒体 CDN 会尝试联系 c.example.com。在此示例中,这是针对 SecondaryOrigin 的第 2 次尝试,总共是第 4 次尝试。

如果尝试联系 c.example.com 返回成功响应,媒体 CDN 使用该响应进行缓存填充。如果尝试返回媒体 CDN 配置为遵循的重定向,则媒体 CDN 会返回 HTTP 502 Bad Gateway 错误,因为它已达到联系源站的尝试次数上限。无论 EdgeCacheOrigin 配置如何,媒体 CDN 最多都会在所有源站上尝试四次。最后,如果媒体 CDN 未能联系到 c.example.com,则媒体 CDN 会返回 504 Gateway Timeout 响应或 502 Bad Gateway 响应。

如果您需要跨源进行健康检查、轮循或负载感知型导向,则可以将外部应用负载平衡器配置为主要来源。

配置以下源重定向

媒体 CDN 支持在缓存填充期间由源站在内部返回的以下重定向,而不是直接将重定向响应返回给客户端。将媒体 CDN 配置为跟踪源站重定向时,媒体 CDN 会先从重定向位置检索内容,然后再进行缓存并将重定向的响应返回给客户端。媒体 CDN 会跟踪跨网域重定向。

最佳做法是仅为您信任和控制的来源配置来源重定向。请确保您信任重定向链中的每个源站,因为每个源站都会生成由您的 EdgeCacheService 传送的内容。

如需启用以下来源重定向,请将以下配置添加到 EdgeCacheOrigin 资源中:

name: MY_ORIGIN
originAddress: "DOMAIN_NAME"
maxAttempts: 2
originRedirect:
  redirectConditions: [FOUND, TEMPORARY_REDIRECT]

媒体 CDN 使用重定向中指定的协议访问所有服务器。确保可能会重定向媒体 CDN 的所有服务器以支持您所需的协议。特别是,如果协议设置为 HTTPS、HTTP/2 或 HTTP/3,媒体 CDN 不会回退到 HTTP/1.1 连接以遵循不安全的重定向。发送到重定向来源的主机标头与重定向网址匹配。媒体 CDN 会在返回最终响应或评估重试或故障切换条件之前,每 EdgeCacheOrigin 尝试遵循一次重定向。

redirectConditions 设置指定哪些 HTTP 响应代码会使媒体 CDN 跟踪每个来源的重定向。

条件 说明
MOVED_PERMANENTLY 响应代码 HTTP 301 遵循重定向
FOUND 响应代码 HTTP 302 遵循重定向
SEE_OTHER 响应代码 HTTP 303 遵循重定向
TEMPORARY_REDIRECT 响应代码 HTTP 307 遵循重定向
PERMANENT_REDIRECT 响应代码 HTTP 308 遵循重定向

排查来源问题

如果来源的行为异常,请查看如何对来源进行问题排查

后续步骤