配置来源

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

将 Cloud Storage 存储桶配置为来源

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

若要配置 Cloud Storage 存储桶,请在创建来源资源时将存储桶网址(例如 gs://my-bucket)用作来源地址。

控制台

  1. 在 Google Cloud 控制台中,前往 Media CDN Origins(来源)页面。

    前往“来源”页面

  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. 可选:指定以下超时值:

    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 区域路由到位于欧盟的多区域 Cloud Storage 存储桶,并将 us-media.example.com 区域(或匹配路径、标头或查询参数)路由到美国境内的存储桶。

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

对于写入延迟时间至关重要的情况(例如低延迟直播),您可以配置尽可能靠近用户的区域性 Cloud Storage 端点。

对请求进行身份验证

如需确认请求来自 Media CDN,请使用以下某种受支持的方法:

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

配置来源协议

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

控制台

  1. 在 Google Cloud 控制台中,前往 Media CDN Origins(来源)页面。

    前往“来源”页面

  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 存储分区

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

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

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

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

Media CDN 服务账号归 Media CDN 项目所有,不会显示在项目的服务账号列表中。

该服务账号采用以下格式,并且仅会授予对您明确允许的项目中的 Media CDN 资源的访问权限。

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

如需向 Media CDN 授予对存储桶的访问权限,请向服务账号授予 objectViewer 角色:

gcloud storage buckets add-iam-policy-binding gs://BUCKET \
--member=serviceAccount:service-PROJECT_NUM@gcp-sa-mediaedgefill.iam.gserviceaccount.com \
--role=roles/storage.objectViewer

使用 gcloud storage buckets remove-iam-policy-binding 命令移除为给定存储桶授予 allUsers 角色的权限。例如,如果存储桶向 allUsers 授予了 objectViewer 角色,请使用以下命令移除授予:

gcloud storage buckets remove-iam-policy-binding gs://BUCKET \
--member=allUsers --role=roles/storage.objectViewer

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

如需允许一个项目中的 EdgeCacheService 资源访问另一个项目中的 Cloud Storage 存储桶,您可以向该项目中的 Media CDN 服务账号授予对该存储桶的访问权限。

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

您无需为该路线启用签名请求,即可保护对 Cloud Storage 源的访问。

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

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

如果您需要在 Compute Engine、GKE 或本地来源之间执行主动健康检查、轮询或负载感知型转送,可以将外部应用负载平衡器配置为来源

这样,您就可以配置(例如)Media 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 控制台中,前往 Media CDN Origins(来源)页面。

    前往“来源”页面

  2. 点击创建源站

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

  4. 可选:输入说明。

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

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

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

  8. 选择重试条件

  9. 尝试次数上限部分,选择尝试填充此来源的缓存的最大次数。

  10. 可选:指定以下超时值:

    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

Media CDN 最多会重试路线的主来源三次,然后再尝试故障切换来源。在此配置中,在尝试主源站三次后,Media CDN 会尝试对 FAILOVER_ORIGIN 发出单次请求。如果故障切换源也未能成功响应,Media CDN 会返回整个源响应,或者在未收到状态代码时返回 HTTP 502 Bad Gateway 响应。

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

以下示例演示了向 MY_ORIGIN 发送填充请求的配置。此配置会导致 Media 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

来源故障切换并跟踪重定向

例如,假设您配置了以下 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 连接到 primary.example.com 作为尝试 1 来与来源联系。如果 primary.example.com 返回成功响应,Media CDN 会将该响应用于缓存填充。

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

  • 如果 b.example.com 返回成功响应,Media CDN 会将该响应用于缓存填充。
  • 如果 b.example.com 返回重定向或失败响应,Media CDN 会故障转移到配置的 SecondaryOrigin。这是因为在此示例中,PrimaryOrigin 配置为两个 maxAttempts

如果媒体 CDN 故障转移到 SecondaryOrigin,则媒体 CDN 会使用 SecondaryOrigin 配置并尝试连接到 secondary.example.com。这是尝试与来源联系的第 1 次,也是总共尝试的第 3 次。

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

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

如果尝试与 c.example.com 联系返回成功响应,Media CDN 会将该响应用于缓存填充。如果尝试返回了媒体 CDN 配置为遵循的重定向,则媒体 CDN 会返回 HTTP 502 Bad Gateway 错误,因为它已耗尽与源站联系的最大尝试次数。无论 EdgeCacheOrigin 配置如何,Media CDN 最多会对所有源站进行四次尝试。最后,如果 Media CDN 无法与 c.example.com 联系,则会返回 504 Gateway Timeout 响应或 502 Bad Gateway 响应。

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

配置跟随来源重定向

Media CDN 支持在缓存填充期间跟随源服务器在内部返回的重定向,而不是直接将重定向响应返回给客户端。将 Media CDN 配置为遵循源重定向后,Media CDN 会先从重定向位置检索内容,然后再将缓存的内容和重定向响应返回给客户端。Media CDN 会跟踪跨网域的重定向。

最佳实践是仅为您信任且控制的来源配置来源重定向。请确保您信任重定向链中的每个来源,因为每个来源都会生成由 EdgeCacheService 提供的内容。

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

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

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

redirectConditions 设置用于指定哪些 HTTP 响应代码会导致 Media CDN 针对每个源站遵循重定向。

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

配置特定于源的托管重写或标头修改

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

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

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

排查起源

如果某个来源未按预期运行,请参阅如何排查来源问题

后续步骤