直接連線功能可讓支援的 Google Cloud 用戶端程式庫,直接建立經過驗證的 gRPC 網路連線至 Cloud Storage,進而減少延遲時間和連線負擔。使用 gRPC 搭配直接連線時,用戶端程式庫要求會略過 Google Front End (GFE),直接轉送至 Cloud Storage。
直接連線能力僅適用於從 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。如果 bucket 位於多區域或雙區域,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 直接連線時,應用程式與 Cloud Storage 同時建立的連線數量,可能會比 REST API 多。在高度並行的環境中,這可能會超出作業系統的檔案描述元限制,導致 too many open files 錯誤。使用 Google Cloud CLI 時,可能會發生這項錯誤。
解決方案:如要解決這個問題,請選擇下列其中一種方法:
使用
ulimit -n $(ulimit -Hn)設定程序可開啟的檔案數量上限。使用
gcloud config set指令搭配storage/process_count和storage/thread_count屬性,減少允許同時執行的工作數量。建議最多 12 項工作。詳情請參閱gcloud config set參考資料。請注意,減少允許同時執行的任務數量會降低平行處理能力,並可能影響效能。