设置媒体 CDN 服务

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


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

操作演示


本页面将引导您完成以下过程:

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

准备工作

确保您满足以下要求:

  • 访问当前项目的媒体 CDN

  • 已安装 Google Cloud CLI。请使用 345.0.0 或更高版本。

    如果需要,请使用 gcloud version 检查版本,并使用 gcloud components update 更新已安装的 gcloud CLI。

    gcloud CLI 提供了 gcloud edge-cache 子命令组,用于管理新的和现有的媒体 CDN 配置。

  • 创建媒体 CDN 资源所需的 Identity and Access Management (IAM) 权限。媒体 CDN 具有以下预定义 IAM 角色:

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

创建 Cloud Storage 存储桶

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

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

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

    如果您不希望将 Cloud Storage 存储桶设为可公开访问,则必须授予媒体 CDN 访问该存储桶的权限。如需了解详情,请参阅使用专用 Cloud Storage 存储分区

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

启用所需的服务

如需配置和部署媒体 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 文档

创建 EdgeCacheOrigin 资源

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

控制台

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

    前往媒体 CDN

  2. 点击来源标签页。

  3. 点击创建源站

  4. 输入来源的名称 cloud-storage-origin

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

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

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

  7. 点击创建源站

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

如需更新源地址,请点击源站,然后点击 Edit(修改)。

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 资源:

  • 将来自我们所配置的来源的所有响应缓存一小时
  • 设置一个返回缓存状态(如 HITMISS)的 x-cache-status 响应标头

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

控制台

  1. 在 Google Cloud 控制台中,前往媒体 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:新服务的网域

    如果您指定域名,对于其他主机,媒体 CDN 会返回 404 错误。* ORIGIN:相关来源的名称

  3. 使用带有 .yaml 文件的 gcloud edge-cache services import 命令

    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_ID
{
  "name": "SERVICE_ID",
  "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_ID:服务的名称
  • DOMAIN:新服务的网域

    如果您指定域名,对于其他主机,媒体 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 route rule to match against"
        priority    = 1
        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 控制台中,前往媒体 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_ID

SERVICE_ID 替换为相应服务的简称。

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

ipv4Addresses:
    IPV4_ADDRESS
ipv6Addresses:
    IPV6_ADDRESS

测试是否正在缓存响应

在测试服务之前,请确保在源站存储了可缓存的内容,以便媒体 CDN 可以检索这些内容。

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

如果您想在自己的网域中使用 EdgeCacheService,则可以将 EdgeCacheService 的 IP 地址分配给网域记录。如需查看相关说明,请参阅使用 Cloud DNS 设置您的网域。设置好网域后,请使用以下 curl 命令访问您的内容:

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

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

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

请替换以下内容:

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

示例:

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 控制台中,前往媒体 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_ID
    

    SERVICE_ID 替换为相应服务的简称。

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

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

    ORIGIN 替换为源站的全名。请使用以下格式:

    projects/PROJECT/locations/global/edgeCacheOrigins/ORIGIN_ID
    

    ORIGIN_ID 替换为源站的简称。

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

后续步骤