容器例項收到要求時,Cloud Run 會將這些要求從 HTTP/2 降級為 HTTP/1。本頁說明如何設定服務,以使用端對端 HTTP/2,避免 Cloud Run 將要求降級為 HTTP1。
如要進一步瞭解如何使用 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 開發人員 (
roles/run.developer
) 在 Cloud Run 服務上 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 服務身分
如需與 Cloud Run 相關聯的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色和 Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。
支援的 HTTP/2 服務
HTTP/2 非常適合用於各種應用程式。常見用途包括:
- Websockets:啟用多個連線之間的即時通訊,適用於聊天、遊戲和即時資料動態饋給等應用程式。
- gRPC 服務:建構高效能、低延遲的微服務,並使用 gRPC 進行通訊。
- 高處理量 API:減少應用程式的負擔,有效處理大量小型要求,或將資料推送至用戶端。
設定及更新 HTTP/2 端對端
變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。
您在建立新服務或部署新修訂版本時,可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 指定使用端對端 HTTP/2:
控制台
前往 Google Cloud 控制台的 Cloud Run:
從選單中選取「服務」,然後按一下「部署容器」,設定新服務。如要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」。
如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。
按一下 [網路] 分頁標籤。
- 選取「啟用 HTTP/2 連線」
按一下 [Create] (建立) 或 [Deploy] (部署)。
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
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
將
ports
改為您選擇的名稱,並將containerPort
改為您選擇的通訊埠,如以下範例所示:h2c
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 個半形字元
- 開頭為「
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
在 Terraform 設定中,將下列內容新增至google_cloud_run_v2_service
資源:如果容器監聽 HTTP 要求時使用的通訊埠不是 8080
,請將 8080
替換為該通訊埠號碼。
查看 http/2 設定
如要查看 Cloud Run 服務目前的 http/2 設定:
控制台
前往 Google Cloud 控制台的 Cloud Run:
按一下感興趣的服務,開啟「服務詳細資料」頁面。
按一下「Revisions」(修訂版本) 分頁標籤。
在右側的詳細資料面板中,http/2 設定會列在「Networking」(網路) 分頁下方。
gcloud
使用下列指令:
gcloud run services describe SERVICE
在傳回的設定中找出 http/2 設定。
在負載平衡器後方使用 HTTP/2
如果設定為監聽 HTTP/2,Cloud Run 會自動處理從應用程式負載平衡器傳來的 HTTP/2 或 gRPC 流量。負載平衡器的後端服務不需要任何特定設定。
如要將 Cloud Run 設定為使用 HTTP/2 或 gRPC,請使用下列其中一種方法:
- 設定及更新 HTTP/2 端對端
- 設定外部應用程式負載平衡器,並將 Cloud Run 服務設為後端。