容器例項收到要求時,Cloud Run 會將這些要求從 HTTP/2 降級為 HTTP/1,但原生 gRPC 流量除外,因為這類流量需要 HTTP/2 才能正常運作。本頁說明如何設定服務,以使用端對端 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 Build 服務帳戶中獲得額外角色。
如需與 Cloud Run 相關的 IAM 角色和權限清單,請參閱 Cloud Run IAM 角色和 Cloud Run IAM 權限。如果 Cloud Run 服務與Google Cloud API (例如 Cloud 用戶端程式庫) 介接,請參閱服務身分設定指南。 如要進一步瞭解如何授予角色,請參閱部署權限和管理存取權。
支援的 HTTP/2 服務
HTTP/2 非常適合用於各種應用程式。常見用途包括:
- gRPC 服務:建構高效能、低延遲的微服務,並使用 gRPC 進行通訊。
- 高處理量 API:減少應用程式的負擔,有效處理大量小型要求,或將資料推送至用戶端。
設定及更新 HTTP/2 端對端
變更任何設定都會建立新的修訂版本。除非您明確做出更新,變更這項設定,否則後續的修訂版本也會自動取得這個設定。
您在建立新服務或部署新修訂版本時,可以使用 Google Cloud 控制台、Google Cloud CLI 或 YAML 指定使用端對端 HTTP/2:
控制台
前往 Google Cloud 控制台的 Cloud Run:
從選單中選取「服務」,然後按一下「部署容器」來設定新服務。如要設定現有服務,請按一下該服務,然後點選「Edit and deploy new revision」(編輯及部署新修訂版本)。
如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。
按一下 [網路] 分頁標籤。
- 選取「啟用 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 服務設為後端。