直接連線能力是一種連線解決方案,可在 Google Cloud 用戶端程式庫和 Cloud Storage 之間,建立高效能、經過驗證的直接 gRPC 網路連線,進而降低延遲時間和連線負擔。使用 gRPC 透過直接連線能力連至 Google Cloud時,透過支援的 Google Cloud用戶端程式庫發出的要求會直接轉送至 Cloud Storage,略過 Google Front End (GFE)。
只有從 Compute Engine 虛擬機器 (VM) 發出的要求,才能直接連線。
直接連線的相關規定
使用支援的 Cloud Storage 用戶端程式庫連線至 Cloud Storage 時,系統預設會啟用直接連線能力,但必須符合下列所有條件,才能使用這項功能:
與 Cloud Storage 互動的 Compute Engine VM 必須有附加的服務帳戶,即使服務帳戶沒有權限也一樣。在應用程式層傳輸安全性交握程序中,服務帳戶用於代表 Compute Engine VM。
與 Cloud Storage bucket 互動的 Compute Engine VM 必須與 bucket 位於相同位置。舉例來說,如果 bucket 位於
us-central1,VM 則可位於us-central1-a。如果值區位於多區域或雙區域,VM 必須位於構成多區域或雙區域的區域。舉例來說,如果 bucket 位於us多區域,VM 則可位於us-east4-c。如要進一步瞭解值區位置,請參閱「位置」。
您的路由和防火牆規則允許 IPv4 流量傳送至
34.126.0.0/18,以及 IPv6 流量傳送至2001:4860:8040::/42。請避免在防火牆規則中限制目的地通訊埠,因為所有通訊埠都會用於提供服務。此外,流量必須能連到端點storage.googleapis.com:443和directpath-pa.googleapis.com:443。Cloud Storage 用戶端程式庫有特定的憑證規定,應用程式必須符合這些規定,才能向 Cloud Storage 進行驗證,並直接連線:
Java 用戶端程式庫需要使用者帳戶憑證或服務帳戶憑證。
C++ 用戶端程式庫需要服務帳戶憑證。
Go 用戶端程式庫需要服務帳戶憑證。1.52.0 之前的版本需要存取 bucket 的 VM 預設服務帳戶憑證。
如要查看 VM 用於向 Cloud Storage 進行驗證的帳戶名稱,請使用
gcloud auth list指令:gcloud auth list --filter=status:ACTIVE --format="value(account)"
如果您使用 Go 用戶端程式庫,且需要檢查用於驗證的 Google 帳戶是否與 VM 的預設服務帳戶相符,請使用
gcloud compute instances describe指令:gcloud compute instances describe INSTANCE_NAME --format='yaml(serviceAccounts)'
將
INSTANCE_NAME替換為執行個體名稱。如要進一步瞭解驗證,請參閱「身分管理總覽 Google 」。
使用 Google Cloud CLI 檢查連線能力
Google Cloud CLI 可透過 gcloud storage buckets describe gs://example-bucket 對 bucket 發出 GET 呼叫,測試 bucket 的直接連線診斷。本節說明如何使用 Google Cloud CLI 執行直接連線能力的診斷測試。
事前準備
請確認您具備 bucket 的
storage.buckets.getIAM 權限,這項權限可透過 Storage 舊版 bucket 讀取者 (roles/storage.legacyBucketReader) 角色授予。gcloud alpha storage diagnose指令僅適用於 Google Cloud CLI 531.0.0 以上版本。如要使用這個指令,建議您升級至最新版 Google Cloud CLI。
執行診斷
如要檢查是否可直接連線能力,請執行 gcloud alpha storage diagnose 並加上引數 --test-type=DIRECT_CONNECTIVITY:
gcloud alpha storage diagnose --test-type=DIRECT_CONNECTIVITY gs://BUCKET_NAME
更改下列內容:
BUCKET_NAME:bucket 的名稱。例如:my-bucket。
如果可以建立連線,您會收到類似以下的回覆:
Using my-bucket bucket for the diagnostic tests.
Bucket location : US
Bucket storage class : STANDARD
Running diagnostic: Direct Connectivity Diagnostic...
WARNING: This diagnostic is experimental. The output may change, and checks may be added or removed at any time. Please do not rely on the diagnostic being present.
Finished running diagnostic: Direct Connectivity Diagnostic
Generating diagnostic report...
NAME
Direct Connectivity Diagnostic
┌────────────────────────────┬─────────────────────────────────────────────────────────────────────────┬──────────┐
│ NAME │ PAYLOAD_DESCRIPTION │ RESULT │
├────────────────────────────┼─────────────────────────────────────────────────────────────────────────┼──────────┤
│ Direct Connectivity Call │ Able to get bucket metadata using Direct Connectivity network path. │ Success. │
└────────────────────────────┴─────────────────────────────────────────────────────────────────────────┴──────────┘
檢查網路設定
如果使用 Google Cloud CLI 檢查直接連線能力時發生 Unable to connect to Traffic Director 錯誤,請按照下列操作說明,確保網路設定允許流量從 VM 傳送至必要端點。
如要直接連線,服務必須託管於 directpath-pa.googleapis.com:443 和 storage.googleapis.com:443。如要檢查是否能連線至服務,請對 directpath-pa.googleapis.com:443 或 storage.googleapis.com:443 發出 curl 呼叫。例如:
curl directpath-pa.googleapis.com:443
如果可以建立連線,您會收到不含錯誤的空白回應:
curl: (52) Empty reply from server
如果無法建立連線,您會收到類似下列內容的錯誤:
curl: (56) Recv failure: Connection reset by peer
限制
直接連線不支援 Private Service Connect。
疑難排解
本節將詳細說明使用 gRPC 直接連線能力時可能發生的錯誤,並提供解決方案。
開啟的檔案過多
問題:使用 gRPC 直接連線能力時,應用程式可能會維持比 REST API 更多的 Cloud Storage 同時連線。在高平行環境中,這可能會超出作業系統的檔案描述元限制,導致 too many open files 錯誤。使用 Google Cloud CLI 時,可能會發生這個錯誤。
解決方案:如要解決這個問題,請選擇下列其中一種方法:
使用
ulimit -n $(ulimit -Hn)設定程序可開啟的檔案數量上限。使用
gcloud config set指令搭配storage/process_count和storage/thread_count屬性,減少允許的並行工作數量。建議最多 12 項工作。詳情請參閱gcloud config set參考資料。請注意,減少允許同時執行的任務數量會降低平行處理能力,並可能影響效能。