您可以通过多种方式为 Media CDN 配置源。本页介绍了如何配置来源。
将 Cloud Storage 存储桶配置为来源
Media CDN 支持将 Cloud Storage 存储桶作为内容的后端。每项服务都可以通过为主机、路径和其他请求属性配置路由来引用多个存储桶。
创建来源资源时,Cloud Storage 存储桶会使用存储桶网址(例如 gs://my-bucket)配置为来源地址。
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
点击来源标签页。
点击 Create origin。
输入来源的名称。例如:
cloud-storage-origin。可选:输入说明。
在来源地址部分,选择选择 Google Cloud Storage 存储桶。
浏览到您的 Cloud Storage 存储桶并选择它。
对于 Cloud Storage,请保留默认的协议和端口设置。
可选:如需使来源请求标头替换项优先于客户端发送的标头或路由级标头操作控制的标头,请执行以下操作:
- 选择启用源替换项。
- 在 Headers 部分中,通过添加一个或多个名称-值对来指定标头。
可选:选择在无法访问此来源时尝试使用的故障切换来源。您可以在稍后更新此字段。
选择重定向条件。
选择重试条件。
对于最大尝试次数,请选择尝试填充此来源的缓存的最大次数。
可选:指定以下超时值:
- 对于连接超时,请选择等待建立源连接的最长时长。
- 对于响应超时,请选择允许完成响应的最长时长。
- 对于读取超时,请选择单个 HTTP 连接或流的读取之间等待的最大时长。
可选:点击添加标签,然后指定一个或多个键值对。
点击创建源站。
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 区域(或根据路径、标头或查询参数进行匹配)路由到位于美国的存储桶。
对于写入延迟时间至关重要的情形(例如低延迟直播),您可以配置尽可能靠近用户的区域 Cloud Storage 端点。
对请求进行身份验证
如需确认请求来自 Media CDN,请使用以下任一受支持的方法:
- 验证连接 IP 地址是否来自 Media CDN 的缓存填充范围。这些范围在所有客户之间共享,但在连接到源时始终由
EdgeCacheService资源使用。 - 添加一个自定义请求标头,其中包含您在来源中验证的令牌值(例如,一个随机的 16 字节值)。然后,您的来源可以拒绝不包含此值的请求。
配置来源协议
如果源站支持 HTTP/2,则无需明确设置协议。对于仅支持 HTTPS(通过 TLS 的 HTTP/1.1)或 HTTP/1.1(不含 TLS)的来源,请通过执行以下操作来明确设置 protocol 字段:
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
点击来源标签页。
选择源站,然后点击修改。
对于协议,请选择 HTTPS 或 HTTP。对于 HTTP,还要将端口指定为
80。点击更新来源。
gcloud
使用 gcloud edge-cache origins update 命令:
gcloud edge-cache origins update LEGACY_ORIGIN \
--protocol=HTTPS
将 LEGACY_ORIGIN 替换为来源的名称。
配置私密 Cloud Storage 存储桶
媒体 CDN 可以从任何可访问互联网的 HTTP 或 HTTPS 端点拉取内容。在某些情况下,您可能需要进行身份验证,以便仅允许 Media CDN 拉取内容,并防止未经授权的访问。Cloud Storage 通过 IAM 权限支持此功能。
对于 Cloud Storage 来源,请执行以下操作:
- 向 Media CDN 服务账号授予您用作来源的 Cloud Storage 存储桶的
objectViewerIAM 权限。 - 移除
allUsers权限。 - 可选:移除
allAuthenticatedUsers权限。
如需更改 Cloud Storage 存储桶的权限,您需要拥有 Storage Admin 角色 (roles/storage.admin)。
Media CDN 服务账号归 Media CDN 项目所有,不会显示在您项目的服务账号列表中。该服务账号仅授予对您明确允许的项目中的 Media CDN 资源的访问权限。
您必须创建至少一个 Media CDN 资源,才能触发服务账号创建。在大多数情况下,这是与您的 Cloud Storage 存储桶关联的 EdgeCacheOrigin 资源。
如需向 Media CDN 授予对存储桶的访问权限,请向服务账号授予 objectViewer 角色:
gcloud storage buckets add-iam-policy-binding gs://BUCKET \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com \
--role=roles/storage.objectViewer
将 PROJECT_NUMBER 替换为项目编号。
在移除对用作生产来源的现有存储桶的公开访问权限之前,请至少等待 10 分钟,以便配置传播。
使用 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_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com 中的 PROJECT_NUMBER 是否是需要访问权限的 EdgeCacheService 资源所在项目的项目编号。您可以针对多个项目重复此操作,尤其是在其中一些项目包含不同的 Media CDN 环境(例如开发、预演或生产环境),而另一个单独的项目包含您的视频或媒体资源时。
您可以在不为相应路由启用签名请求的情况下,保护对 Cloud Storage 源的访问。
配置私有 Cloud Storage 并不会阻止直接从媒体 CDN 访问缓存的内容。如需了解如何向个别用户发出签名请求,请参阅签名请求。
将外部应用负载均衡器配置为来源
如果您需要在 Compute Engine、GKE 或本地源之间进行主动健康检查、轮询或负载感知型流量导向,可以将外部应用负载均衡器配置为源。
这样一来,您就可以配置(例如)Media CDN 后面的直播打包器或由 Cloud Service Mesh 管理的 Envoy 代理组,以连接回本地基础架构。
借助负载均衡器,您可以为以下内容配置后端:
- Compute Engine 虚拟机 (VM) 实例组。
- 网络端点组(包括 Compute Engine 虚拟机和 Google Kubernetes Engine 集群)。
- 无服务器网络端点组(Cloud Run、App Engine 和 Cloud Run 函数)。
一种架构,它将用于传送视频清单的外部应用负载均衡器源与用于存储分段的 Cloud Storage 源相结合,类似于以下架构,其中两个源映射到不同的路由。
如需将外部应用负载均衡器配置为来源,您需要创建一个来源资源,其中包含指向负载均衡器的转发规则的 IP 地址或公共主机名。 最好使用公共主机名(域名),因为 SSL (TLS) 证书和新版 HTTP(HTTP/2 和 HTTP/3)都需要使用公共主机名。
您还必须确认以下事项:
- 您的负载均衡器具有与
EdgeCacheService资源所用主机名匹配的路由,或者您已为负载均衡器配置为来源的路由配置了urlRewrite.hostRewrite。 - 您的负载均衡器已针对这些主机名配置了公开可信的 SSL (TLS) 证书。
例如,如果指向负载均衡器转发规则的公共域名为 origin-packager.example.com,则您需要创建一个将 originAddress 设置为此名称的源。
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
点击来源标签页。
点击 Create origin。
输入来源的名称。例如:
load-balancer-origin。可选:输入说明。
对于来源地址,选择指定 FQDN 或 IP 地址。
输入 Google Cloud 负载均衡器的 FQDN 或 IP 地址。
可选:选择在无法访问此来源时尝试使用的故障切换来源。您可以在稍后更新此字段。
选择重试条件。
对于最大尝试次数,请选择尝试填充此来源的缓存的最大次数。
可选:指定以下超时值:
- 对于连接超时,请选择等待建立源连接的最长时长。
- 对于响应超时,请选择允许完成响应的最长时长。
- 对于读取超时,请选择单个 HTTP 连接或流的读取之间等待的最大时长。
可选:点击添加标签,然后指定一个或多个键值对。
点击创建源站。
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 以回退到未加密的连接。我们建议您仅在开发或测试时执行此操作。
为灵活防护配置区域
您可以在创建或更新来源时为灵活屏蔽配置区域。
控制台
在 Google Cloud 控制台中,前往 Media CDN 页面。
点击来源标签页。
点击要更新的源站的名称。
如需切换到修改模式,请点击修改按钮。
在来源控制部分中,针对来源屏蔽,选择灵活屏蔽(自定义)。系统会自动选择最近的区域。如果列表中没有最接近的区域,请从可用的区域列表中手动选择一个值。有效值为
africa-south1、europe-west3、me-central1和us-west5。如需保存更改,请点击更新来源。
如需将防护设置恢复为默认的源站防护,请更新源站以选择源站防护(默认)。
gcloud
如需为现有来源中的某个区域配置灵活的屏蔽,请使用 gcloud edge-cache origins update 命令:
gcloud edge-cache origins update ORIGIN \
--origin-address=ADDRESS \
--flex-shielding=REGION
替换以下内容:
ORIGIN:来源的名称ADDRESS:来源的地址REGION:源屏蔽的区域。有效值为africa-south1、europe-west3、me-central1和us-west5。如需将屏蔽设置恢复为默认的源站屏蔽,请在将flex-shielding选项设置为空后运行同一命令。
yaml
如需为现有来源中的某个区域配置来源屏蔽,请向 EdgeCacheOrigin 资源配置添加 flexShielding 部分:
name: ORIGIN
originAddress: ADDRESS
# ... Other fields
flexShielding:
flexShieldingRegions:
- REGION
# ... Other fields
替换以下内容:
ORIGIN:来源的名称ADDRESS:来源的地址REGION:源屏蔽的区域。有效值为africa-south1、europe-west3、me-central1和us-west5。
如需将源屏蔽恢复为默认设置,请移除 flexShielding 部分。
配置源站故障切换
以下部分介绍了如何配置源站故障切换行为。
来源故障切换(无重定向)
以下是基本的故障切换 EdgeCacheOrigin 配置:
name: FAILOVER_ORIGIN
originAddress: FAILOVER_DOMAIN_NAME
在尝试故障切换来源之前,媒体 CDN 最多会重试路由的主源站三次。在此配置中,在尝试主源站三次后,媒体 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.com 返回 HTTP 302 Found Redirect 到 Location: b.example.com。然后,在第二次尝试联系来源时,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返回成功响应,媒体 CDN 会使用该响应来填充缓存。 - 如果
secondary.example.com返回 HTTP302 Found Redirect到Location: c.example.com,Media CDN 会尝试联系c.example.com。在此示例中,这是SecondaryOrigin的第 2 次尝试,也是总体的第 4 次尝试。
如果尝试联系 c.example.com 返回成功响应,Media CDN 会使用该响应来填充缓存。如果尝试返回 Media CDN 配置为跟踪的重定向,Media CDN 会返回 HTTP 502 Bad Gateway 状态代码,因为其已用尽联系来源的最大尝试次数。无论 EdgeCacheOrigin 配置如何,Media CDN 最多会尝试四次(跨所有来源)。最后,如果 Media CDN 无法联系 c.example.com,则 Media CDN 会返回 504 Gateway Timeout 响应或 502 Bad Gateway 响应。
如果您需要在源之间进行健康检查、轮询或负载感知型转向,可以将外部应用负载均衡器配置为主源。
配置是否跟踪来源重定向
Media CDN 支持在缓存填充期间在内部跟踪源返回的重定向,而不是直接向客户端返回重定向响应。如果 Media CDN 配置为遵循源重定向,则 Media CDN 会先从重定向位置检索内容,然后再缓存该内容并将重定向的响应返回给客户端。媒体 CDN 会跟踪跨网域的重定向。
最佳做法是,仅为可信且受您控制的来源配置来源重定向。请确保您信任重定向链中的每个来源,因为每个来源都会生成由您的 EdgeCacheService 提供的内容。
如需启用跟踪来源重定向,请将以下配置添加到 EdgeCacheOrigin 资源:
name: MY_ORIGIN
originAddress: DOMAIN_NAME
maxAttempts: 2
originRedirect:
redirectConditions: [FOUND, TEMPORARY_REDIRECT]
媒体 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 标头。
由于这些标头操作是在源请求期间运行的,因此按来源添加的标头会替换或附加到具有相同字段名称的现有标头。默认情况下,Media CDN 会附加到现有标头。如需替换现有标头,请将 headerAction.replace 设置为 true。
特定于源的标头修改仅使用静态标头值。不支持动态标头变量(例如 {client_region})。
如需了解如何按路由设置请求标头,请参阅设置自定义标头。
排查来源问题
如果来源未按预期运行,请查看如何排查来源问题。