使用 HTTP/2(服务)

对于 Cloud Run 服务,当 HTTP/2 请求被发送到容器时,Cloud Run 默认会将这些请求降级为 HTTP/1。如果要明确将服务设置为使用 HTTP/2 端到端而不进行此降级,可针对 HTTP/2 进行配置。本页面介绍如何进行配置。

如需详细了解如何使用 HTTP 调用服务,请参阅使用 HTTPS 请求调用

配置前的准备工作

您的 Cloud Run 服务必须处理 HTTP/2 明文 (h2c) 格式的请求。Google 的前端服务基础设施会终止 TLS,然后通过加密通道将 h2c 流量转发到 Cloud Run 和您的容器。

如需确认您的服务支持 h2c 请求,请使用以下 cURL 命令在本地测试服务

curl -i --http2-prior-knowledge http://localhost:PORT

所需的角色

如需获得配置和部署 Cloud Run 服务所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 服务与 Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

设置和更新 HTTP/2 端到端

任何配置更改都会导致新修订版本的创建。后续修订版本也将自动采用此配置设置,除非您进行了明确更新。

您可以在创建新服务部署新修订版本时使用 Google Cloud 控制台、gcloud 命令行或使用 YAML 文件来指定使用 HTTP/2 端到端:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击部署容器,然后选择服务以配置新服务。如果您要配置现有服务,请点击该服务,然后点击修改和部署新的修订版本

  3. 如果您要配置新服务,请根据需要填写初始服务设置页面,然后点击容器、网络、安全性以展开服务配置页面。

  4. 点击网络标签页。

    图片

    • 选中“启用 http/2 连接”复选框
  5. 点击创建部署

gcloud

您可以使用以下命令将给定服务更新为使用 HTTP/2:

gcloud run services update SERVICE --use-http2

SERVICE 替换为服务的名称。

您也可以在部署期间使用以下命令将服务设置为使用 HTTP/2:

gcloud run deploy --image IMAGE_URL --use-http2

IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

YAML

  1. 如果您要创建新的服务,请跳过此步骤。如果您要更新现有服务,请下载其 YAML 配置

    gcloud run services describe SERVICE --format export > service.yaml
  2. 使用名称 h2c 更新 ports,并使用您选择的端口更新 containerPort,如以下示例所示:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          name: REVISION
        spec:
          containers:
          - image: IMAGE_URL
            ports:
            - name: h2c
              containerPort: 8080

    替换

    • SERVICE 替换为您的 Cloud Run 服务的名称
    • IMAGE_URL 替换为对容器映像的引用,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。 如果您使用 Artifact Registry,则必须预先创建制品库 REPO_NAME。网址格式为 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • REVISION 替换为新的修订版本名称或者将其删除(如果存在)。如果您提供新的修订版本名称,则该名称必须满足以下条件:
      • 开头为 SERVICE-
      • 仅包含小写字母、数字和 -
      • 不以 - 结尾
      • 不超过 63 个字符
  3. 使用以下命令创建或更新服务:

    gcloud run services replace service.yaml

Terraform

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

将以下内容添加到 Terraform 配置中的 template.containers 下的 google_cloud_run_v2_service 资源中。如果您的容器在 8080 以外的端口上监听 HTTP 请求,请将 8080 替换为该端口号。

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-h2c"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      # Enable HTTP/2
      ports {
        name           = "h2c"
        container_port = 8080
      }
    }
  }
}

查看 http/2 设置

如需查看 Cloud Run 服务的当前 http/2 设置,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud Run:

    转到 Cloud Run

  2. 点击您感兴趣的服务以打开“服务详细信息”页面。

  3. 点击修订版本标签页。

  4. 在右侧的详细信息面板中,“网络”标签页下列出了 http/2 设置。

gcloud

  1. 使用以下命令:

    gcloud run services describe SERVICE
  2. 在返回的配置中找到 http/2 设置。