设置媒体 CDN 服务

本快速入门介绍如何在 Cloud Storage 存储桶前面设置媒体 CDN 服务。您可以使用此配置进行测试,也可以将其作为生产环境的基础。


如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示:

操作演示


本页将引导您完成以下步骤:

  1. 创建 Cloud Storage 存储桶以存储您的内容。
  2. 启用必需的服务。
  3. 创建 EdgeCacheOrigin 资源,以将媒体 CDN 连接到您的存储桶。
  4. 创建 EdgeCacheService 资源,以配置来源中内容的请求路由和缓存。
  5. 测试是否正在缓存响应。

准备工作

确保您满足以下要求:

所需的角色

如需获得完成本文档中的任务所需的权限,请让您的管理员为您授予以下角色:

  • roles/networkservices.edgeCacheAdmin:有权创建、更新、删除和管理所有 Edge Cache 资源。
  • roles/networkservices.edgeCacheUser:查看和使用 Edge Cache 资源的权限。
  • roles/networkservices.edgeCacheViewer:对 Edge Cache 资源的只读权限。

创建存储桶

在媒体 CDN 上启用 SSL

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建 Cloud Storage 存储桶

媒体 CDN 内容可来自 Cloud Storage 存储桶、第三方存储位置或负载平衡器等位置。

在此快速入门中,我们将内容存储在 Cloud Storage 存储桶中。

  1. 创建一个可公开访问的 Cloud Storage 存储桶,并将其命名为 my-bucket。

    如果您不想让 Cloud Storage 存储桶可公开访问,则必须向 Media CDN 授予访问该存储桶的权限。如需了解详情,请参阅使用私有 Cloud Storage 存储分区。

  2. 将文件上传到存储桶中。

启用必需的服务

如需配置和部署媒体 CDN 服务,您需要在项目中同时启用 Network Services API 和 Certificate 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 文档。

创建 EdgeCacheOrigin 资源

创建指向 Cloud Storage 存储桶的源。

控制台

  1. 在 Google Cloud 控制台中,前往 Media CDN 页面。

    前往媒体 CDN

  2. 点击来源标签页。

  3. 点击创建源站。

  4. 输入来源的名称,例如 cloud-storage-origin。

  5. 可选:输入来源的说明。

  6. 在来源地址部分,选中选择 Google Cloud Storage 存储桶,浏览到名为 my-bucket 的 Cloud Storage 存储桶,然后点击选择。

    如果您有外部来源,请选择指定 FQDN 或 IP 地址,然后输入 FQDN 或 IP 地址。

  7. 点击创建源站。

大约 10 分钟后,新创建的 EdgeCacheOrigin 资源会显示在项目“源站”页面上的源站列表中。

如需更新发货地址,请点击相应发货地址,然后点击修改。

gcloud

使用 gcloud edge-cache origins create 命令:

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

替换以下内容:

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

如果您使用的是外部来源,请将 ADDRESS 替换为 FQDN 或 IP 地址。

如需查看新创建的来源,请使用 gcloud edge-cache origins list 命令。

如需更新来源地址,请使用 gcloud edge-cache origins update 命令。

API

使用 edgeCacheOrigins.create 方法:

POST https://networkservices.googleapis.com/v1/PARENT/edgeCacheOrigins?edgeCacheOriginId=ORIGIN_ID
{
  "name": "ORIGIN_ID",
  "originAddress: "ADDRESS"
}

替换以下内容:

  • PARENT:父级资源,格式为 projects/PROJECT/locations/global
  • ORIGIN_ID:新来源的简称
  • ADDRESS:存储桶名称,gs://my-bucket

    如果您使用的是外部来源,请将 ADDRESS 替换为 FQDN 或 IP 地址。

如需查看新创建的来源,请使用 edgeCacheOrigins.list 方法。

如需更新来源地址,请使用 edgeCacheOrigins.patch 方法。

Terraform

resource "google_network_services_edge_cache_origin" "default" {
  name           = "cloud-storage-origin"
  origin_address = "gs://my-bucket-${random_id.unique_suffix.hex}"
}

创建 EdgeCacheService 资源

EdgeCacheService 资源用于配置路由、证书和缓存设置,并且可以指向 EdgeCacheOrigin 资源。

创建一个基本的 EdgeCacheService 资源,该资源执行以下操作:

  • 将配置的源站的所有响应缓存一小时
  • 设置 x-cache-status 响应标头,以返回缓存状态(例如 HIT 或 MISS)

(可选)为此服务注册域名。

控制台

  1. 在 Google Cloud 控制台中,前往 Media CDN 页面。

    前往媒体 CDN

  2. 点击 Services(服务)标签。

  3. 点击创建服务。

  4. 为您的服务输入一个唯一名称(例如 my-service),然后点击下一步。

  5. 在路由部分,点击添加主机规则,然后输入一个或多个主机网域名称。

  6. 对于主机,请输入主机域名,例如 web.example.com。

  7. 点击添加路由规则。

    1. 对于优先级,指定 1。
    2. 点击添加匹配条件,对于路径匹配,指定 /,然后点击完成。
    3. 选择从来源提取,然后选择您配置的源站。
    4. 点击附加操作。
    5. 在标头操作中,点击添加内容。然后,执行以下操作:
      1. 对于类型,选择要添加的响应标头。
      2. 点击添加标头。
      3. 对于名称,请指定 x-cache-status;对于值,请指定 {cdn_cache_status}。
      4. 点击完成。
    6. 对于路由操作,点击添加内容。然后,执行以下操作:
      1. 对于类型,选择 CDN 政策。
      2. 对于缓存模式,选择 FORCE_CACHE_ALL。
      3. 点击完成。
    7. 点击保存。
  8. 点击创建服务。

新创建的 EdgeCacheService 资源会显示在服务页面上,位于项目中的服务列表中。

gcloud

  1. 在 Cloud Shell 中,使用文本编辑器创建名为 my-service.yaml 的本地文件。

    此类文件表示以下内容:

    • 路由的运作方式 - 先匹配主机,然后匹配路径
    • 缓存的工作方式 - 基于缓存模式和 TTL
    • 请求和响应的修改方式,例如,通过将 cdn_cache_status 变量插入到响应标头中
  2. 将以下示例内容粘贴到文件中,然后保存该文件:

    name: SERVICE
    routing:
      hostRules:
      - hosts:
        - DOMAIN 
        pathMatcher: routes
      pathMatchers:
      - name: routes
        routeRules:
        - priority: 1
          matchRules:
          - prefixMatch: /
          origin: ORIGIN
          routeAction:
            cdnPolicy:
              cacheMode: CACHE_ALL_STATIC
              defaultTtl: 3600s
          headerAction:
            responseHeadersToAdd:
            - headerName: "x-cache-status"
              headerValue: "{cdn_cache_status}"
    

    替换以下内容:

    • SERVICE:服务的名称
    • DOMAIN:新服务的网域

      如果您指定了域名,Media CDN 会针对其他主机返回 404 错误。

    • ORIGIN:相关来源的名称

  3. 使用 gcloud edge-cache services import 命令和 YAML 文件:

    gcloud edge-cache services import SERVICE \
        --source=my-service.yaml
    

    如需在项目的 EdgeCacheService 资源列表中查看新创建的服务,请使用 gcloud edge-cache services list 命令。

API

使用 edgeCacheServices.create 方法:

POST https://networkservices.googleapis.com/v1/PARENT/edgeCacheServices?edgeCacheServiceId=SERVICE_NAME
{
  "name": "SERVICE_NAME",
  "routing": {
    "hostRules": [
      {
        "hosts": ["DOMAIN"],
        "pathMatcher": "routes"
      }
    ],
    "pathMatchers": [
      {
        "name": "routes",
        "routeRules": [
          {
            "priority": "1",
            "matchRules": [
              {
                "prefixMatch": "/"
              }
            ],
            "origin": "ORIGIN",
            "routeAction": {
               "cdnPolicy": {
                 "cacheMode": "CACHE_ALL_STATIC",
                 "defaultTtl": "3600s"
               }
            }
            "headerAction": {
              "responseHeadersToAdd": [
                {
                  "headerName": "x-cache-status",
                  "headerValue": "{cdn_cache_status}"
                }
              ]
            },
          }
        ]
      }
    ]
  }
}

替换以下内容:

  • PARENT:父级资源,格式为 projects/PROJECT/locations/global
  • SERVICE_NAME:服务的名称
  • DOMAIN:新服务的网域

    如果您指定了域名,Media CDN 会针对其他主机返回 404 错误。

  • ORIGIN_NAME:相关来源的名称

如需在项目的 EdgeCacheService 资源列表中查看新创建的服务,请使用 edgeCacheServices.list 方法。

Terraform

resource "google_network_services_edge_cache_service" "default" {
  name = "cloud-media-service"
  routing {
    host_rule {
      hosts        = ["googlecloudexample.com"]
      path_matcher = "routes"
    }
    path_matcher {
      name = "routes"
      route_rule {
        description = "a default route rule, priority=10 (low)"
        priority    = 10
        match_rule {
          prefix_match = "/"
        }
        origin = google_network_services_edge_cache_origin.default.name
        route_action {
          cdn_policy {
            cache_mode  = "CACHE_ALL_STATIC"
            default_ttl = "3600s"
          }
        }
        header_action {
          response_header_to_add {
            header_name  = "x-cache-status"
            header_value = "{cdn_cache_status}"
          }
        }
      }
    }
  }
}

创建第一个服务可能需要几分钟时间。 媒体 CDN 会预配专用 IP 地址,并将您的配置推送到数千个边缘位置。后续对服务的更新(例如更改路由配置或匹配参数)速度更快。

检索 IP 地址

如需查看新创建的服务的 IP 地址,请按以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Media CDN 页面。

    前往媒体 CDN

  2. 点击 Services(服务)标签。

  3. 如需查看服务的 IP 地址,请参阅地址单元格。

    如果相应单元格为空,请刷新浏览器。

gcloud

使用 gcloud edge-cache services describe 命令:

gcloud edge-cache services describe SERVICE

将 SERVICE 替换为相应服务的名称。

输出会显示分配给服务的 IP 地址:

ipv4Addresses:
    IPV4_ADDRESS
ipv6Addresses:
    IPV6_ADDRESS
name: projects/my-project/locations/global/edgeCacheServices/SERVICE
...

API

使用 edgeCacheServices.get 方法:

GET https://networkservices.googleapis.com/v1/SERVICE_NAME

将 SERVICE_NAME 替换为服务的全名。请使用以下格式:

projects/PROJECT/locations/global/edgeCacheServices/SERVICE_NAME

将 SERVICE_NAME 替换为服务的简称。

检索到的详细信息包括分配给服务的 IP 地址:

ipv4Addresses:
    IPV4_ADDRESS
ipv6Addresses:
    IPV6_ADDRESS

测试是否正在缓存响应

在测试服务之前,请确保您的源中存储了可缓存的内容,以便 Media CDN 可以检索该内容。

如需测试您的服务是否已正确配置为缓存内容,请使用 curl 命令行工具发出请求并检查响应。curl 在 Google Cloud 控制台的 Cloud Shell 中也可用。

如果您想将 EdgeCacheService 与您的网域搭配使用,可以将 EdgeCacheService 的 IP 地址分配给网域记录。如需了解相关说明,请参阅使用 Cloud DNS 设置网域。 设置域名后,您可以使用以下 curl 命令访问内容:

curl -svo /dev/null "http://DOMAIN_NAME/FILENAME"

如果您未配置 DNS 以指向已预配的 IP 地址,请使用 resolve 选项来替换 curl 使用的地址。

curl -svo /dev/null --resolve DOMAIN_NAME:80:IP_ADDRESS "http://DOMAIN_NAME/FILENAME"

替换以下内容:

  • DOMAIN_NAME:您在创建服务时指定的托管域名
  • IP_ADDRESS:服务在服务列表的地址列中显示的 IP 地址
  • FILENAME:您上传到存储桶的文件的名称

示例:

curl -svo /dev/null --resolve web.example.com:80:34.104.37.129 "http://web.example.com/file.mp4"

该命令最初会生成类似于以下内容的输出,其中状态为 miss,因为媒体 CDN 还没有从源站检索到请求的数据:

< HTTP/2 200 OK
...
< x-cache-status: den;miss
...

当您多次提交同一请求时,系统会生成类似于以下内容的输出,状态为 hit:

< HTTP/2 200 OK
...
< x-cache-status: den;hit
...

如果未显示状态 hit,请检查以下各项:

  • 响应可缓存。
  • 配置的缓存模式允许缓存内容。
  • 源站未设置阻止缓存的缓存指令。如需了解详情,请参阅缓存配置。

您现在已测试了可在全球范围内提供内容的基本 EdgeCacheService 资源。生产级服务可能需要 SSL (TLS) 证书、多个来源和 Google Cloud Armor 安全政策。

可选:清理

删除您不打算再次使用的所有资源。

控制台

  1. 在 Google Cloud 控制台中,前往 Media CDN 页面。

    前往媒体 CDN

  2. 点击 Services(服务)标签。

  3. 选择您的服务,然后点击删除。

  4. 点击来源标签页。

  5. 选择您的源站,然后点击删除。

gcloud

  1. 如需列出您创建的资源,请使用 gcloud edge-cache origins list 命令和 gcloud edge-cache services list 命令。

  2. 如需删除服务,请使用 gcloud edge-cache services delete 命令:

    gcloud edge-cache services delete SERVICE
    

    将 SERVICE 替换为相应服务的名称。

  3. 如需删除来源,请使用 gcloud edge-cache origins delete 命令:

    gcloud edge-cache origins delete ORIGIN
    

    将 ORIGIN 替换为来源的名称。

API

  1. 如需列出您创建的资源,请使用 edgeCacheServices.list 方法和 edgeCacheOrigins.list 方法。

  2. 如需删除服务,请使用 edgeCacheServices.delete 方法:

    DELETE https://networkservices.googleapis.com/v1/SERVICE_NAME
    

    将 SERVICE_NAME 替换为服务的全名。请使用以下格式:

    projects/PROJECT/locations/global/edgeCacheServices/SERVICE_NAME
    

    将 SERVICE_NAME 替换为服务的简称。

  3. 如需删除来源,请使用 edgeCacheOrigins.delete 方法:

    DELETE https://networkservices.googleapis.com/v1/ORIGIN
    

    将 ORIGIN 替换为来源的完整名称。请使用以下格式:

    projects/PROJECT/locations/global/edgeCacheOrigins/ORIGIN_ID
    

    将 ORIGIN_ID 替换为来源的简称。

对于您创建的任何其他不打算再次使用的资源(例如 Cloud Storage 存储桶),请重复此过程。

后续步骤