設定與 Service Directory 的整合
本指南假設您已部署 Cloud Service Mesh,且至少向 Service Directory 註冊了一項服務。無論您使用 Envoy 或無 Proxy gRPC,都適用這些設定說明。
如要使用 Service Directory 和 Cloud Service Mesh,第一步是將服務發布至 Service Directory。如要瞭解一般總覽資訊,請參閱將服務發布至 Service Directory 的相關資訊,或 Service Directory 說明文件。
向 Service Directory 註冊服務後,您可以使用 Cloud Service Mesh 的 API 資源建立服務繫結。您建立專用於與服務目錄整合的後端服務,因為參照服務繫結的後端服務不得有後端或相關聯的健康狀態檢查。
使用負載平衡 API 時,Cloud Service Mesh 轉送規則和主機規則的規定
為搭配 Service Directory 使用設定 Cloud Service Mesh 時,如果使用舊版負載平衡 API,請遵循下列準則:
- 確認 Cloud Service Mesh 轉送規則使用
0.0.0.0
虛擬 IP 位址 (VIP)。 - 如果您有私人區域,請確認網址對應中的主機規則與 Service Directory 在 Cloud DNS 私人區域中設定的 DNS 名稱相符。
如果違反這些規範,應用程式發出的外送要求可能會失敗。
設定 network-services
API 端點
建立及使用後端服務前,請務必設定 network-services
API 端點,確保 network-services
資源下的服務繫結資源參照正確無誤。使用下列指令設定 network-services
API 端點。
export CLOUDSDK_API_ENDPOINT_OVERRIDES_NETWORKSERVICES="https://networkservices.googleapis.com/"
角色和權限規定
建立 Cloud Service Mesh 部署作業前,請確認您具備下列權限和角色。
服務繫結權限和角色
本節不會討論專案層級的擁有者、編輯者和檢視者權限。內容包括建立、讀取、更新及刪除資源所需的權限和角色。
動作 | 權限 | 角色 |
---|---|---|
建立服務繫結。 | networkservices.serviceBindings.create |
網路管理員 |
取得服務繫結。 | networkservices.serviceBindings.get |
網路管理員、網路檢視者 |
列出專案中的服務繫結。 Google Cloud | networkservices.serviceBindings.list |
網路管理員、網路檢視者 |
更新服務繫結。 | networkservices.serviceBindings.update |
網路管理員 |
刪除服務繫結。 | networkservices.serviceBindings.delete |
網路管理員 |
Service Directory 服務權限
服務目錄管理員必須將 servicedirectory.services.bind
權限授予嘗試將服務繫結附加至服務目錄服務的服務帳戶。這樣一來,服務帳戶就能使用 Service Directory 服務,也就是說,帳戶可以在服務繫結中參照 Service Directory 服務。
權限強制執行
設定 Cloud Service Mesh 時,系統會執行 IAM 權限檢查。您必須具備建立服務繫結的必要權限,以及將服務繫結與特定 Service Directory 服務建立關聯的權限。如果具備正確的權限,您可以設定網格用戶端,瞭解 Service Directory 服務並將流量傳送至該服務。
由於這些檢查是在設定時進行,因此移除現有 Service Directory 服務的繫結權限,不會中斷流量。建立服務繫結後,移除權限不會影響網格用戶端是否能瞭解服務目錄服務,以及是否能將流量傳送至該服務。
如要停止網格用戶端與 Service Directory 服務通訊,可以使用其他機制:
- 限制 Service Directory 服務的存取權。例如,您可以使用防火牆規則。
- 刪除 Service Directory 服務。
- 更新 Cloud Service Mesh 設定,例如從後端服務移除服務繫結。
最佳做法
- 雖然 Service Directory 允許使用 Service Directory API 註冊端點,但我們建議使用整合功能,在可用時自動註冊至 Service Directory。如要進一步瞭解這些整合功能,請參閱「GKE 適用的 Service Directory 總覽」和「Service Directory 和 Cloud Load Balancing 總覽」。
- 建議您為特定邏輯服務使用相同的命名空間和服務,即使該服務部署在不同區域也一樣。
使用 Service Directory 探索服務
下圖概述這項設定程序的最終狀態,包括設定、不同系統的互動方式,以及如何將要求解析為服務的端點。這個範例假設您已向 Service Directory 註冊服務。
如要讓 Cloud Service Mesh 使用 Service Directory 服務,請完成下列步驟。
- 在 Cloud Service Mesh 中建立新的後端服務,但不要為後端服務建立後端。
- 為 Service Directory 服務建立全域服務繫結。
將服務目錄服務繫結至這個後端服務。 (選用) 在後端服務中設定其他欄位和政策。
建立新的轉送設定或更新現有設定,以便將用戶端要求轉送至新的後端服務。
您無法在參照服務綁定的後端服務上設定健康狀態檢查。後端服務也不能有後端。
建立整合
請按照下列操作說明,將 Cloud Service Mesh 與 Service Directory 整合。
建立後端服務
請按照下列操作說明,在 Cloud Service Mesh 部署作業中建立後端服務。
建立後端服務,以便搭配 Service Directory 服務使用。
gcloud compute backend-services create td-sd-demo-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
建立參照 Service Directory 服務的服務繫結。
gcloud beta network-services service-bindings create my-sd-binding \ --location global \ --service-directory-region us-east1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service
將服務繫結至後端服務。
gcloud beta compute backend-services update td-sd-demo-service \ --global \ --service-bindings my-sd-binding
建立後端服務並繫結一或多個服務目錄服務後,Cloud Service Mesh 就會開始追蹤與服務目錄服務相關聯的端點。端點是不同的 IP:通訊埠組合。如要讓這項服務可轉送,請設定轉送。
設定轉送
請按照下列操作說明更新路由設定。
服務路徑 API
以下範例假設您有名為 sidecar-
mesh
的 Mesh
資源。您要建立 HTTPRoute
資源,並將主機名稱設為 myservice.example.com
,目的地則設為您在上一節建立的後端服務 td-sd-demo-service
。
建立
HTTPRoute
規格,並儲存至名為httproute.yaml
的檔案。name: td-sd-demo-route hostnames: ‐ myservice.example.com meshes: ‐ projects/PROJECT_NUMBER/locations/global/meshes/sidecar-mesh rules: ‐ action: destinations: ‐ serviceName: "projects/PROJECT_NUMBER/locations/global/backendServices/td-sd-demo-service"
匯入
HTTPRoute
規格。gcloud network-services httproutes import td-sd-demo-route \ --source=httproute.yaml \ --location=global
負載平衡 API
以下範例假設您已具備基本路由設定,包括名為 my-url-map
的網址對應。
- 首先,您要為這個網址對應建立路徑比對器。路徑比對器並不複雜。使用時,這個別名會解析為您在上一個步驟中建立的
td-sd-demo-service
。 - 接著,您會在網址對應中新增主機規則。如果要求指定主機名稱
myservice.example.com
,這項主機規則會導致使用路徑比對器。
建立指向後端服務的簡單路徑比對器。
gcloud compute url-maps add-path-matcher my-url-map \ --global \ --default-service td-sd-demo-service \ --path-matcher-name my-path-matcher
將後端服務對應至現有網址對應中的新主機規則。
gcloud compute url-maps add-host-rule my-url-map \ --global \ --path-matcher-name=my-path-matcher \ --hosts=myservice.example.com
從多個區域附加相同服務
Cloud Service Mesh 可讓您將多個 Service Directory 服務繫結至同一個後端服務。舉例來說,您可能有兩個 Service Directory 服務,兩者完全相同,但端點位於不同 Google Cloud 區域或可用區。換句話說,單一全域後端服務可以有兩個全域服務繫結,一個指向 us-east1
中的服務,另一個指向 us-west1
中的服務。
為匯入的 Service Directory 服務建立後端服務。
gcloud compute backend-services create td-sd-demo-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
在
us-east1
中建立 Service Directory 服務的服務繫結。gcloud beta network-services service-bindings create us-east1-binding \ --location global \ --service-directory-region us-east1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service \
在
us-west1
中建立 Service Directory 服務的服務繫結。gcloud beta network-services service-bindings create us-west1-binding \ --location global --service-directory-region us-west1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service \
將
us-east1
和us-west1
服務繫結至後端服務。gcloud compute backend-services update td-sd-demo-service \ --global \ --service-bindings us-east1-binding,us-west1-binding
套用進階流量管理政策
在上一節中,您已使用 Cloud Service Mesh,針對現有的 Service Directory 服務設定路由政策。您可以將這個模式套用至更進階的流量管理情境。
請參考以下情境。您現有的測試服務位於 Cloud Service Mesh 網格外部。測試服務是內部應用程式負載平衡器的後端。您想將 Cloud Service Mesh 網格中產生的部分正式版流量,重新傳送至這項外部服務。Cloud Service Mesh 可使用 RequestMirrorPolicy
執行這項操作,在處理要求時將流量傳送至其他後端服務。這個程序也稱為「要求側錄」,可讓您檢查流量,而不會影響正式服務。
您可以手動在 Cloud Service Mesh 網格中新增或移除測試服務端點,讓 Envoy 用戶端將流量複製到測試服務。不過,如果使用服務目錄整合功能,這個程序會比較簡單。
在這個範例中,您會先將後端服務指向付款測試服務的 Service Directory 註冊。接著,在 Cloud Service Mesh 中為服務新增要求鏡像政策。
為要求鏡像政策建立後端服務。
gcloud compute backend-services create payments-test-bes \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED
建立參照 Service Directory 服務的服務繫結。
gcloud beta network-services service-bindings create my-sd-binding \ --location global \ --service-directory-region us-east1 \ --service-directory-namespace my-namespace \ --service-directory-service my-service \
將服務目錄服務繫結至測試後端服務。
gcloud beta compute backend-services update payments-test-bes \ --global \ --service-bindings my-sd-binding
編輯網址對應,將要求鏡像至測試服務。
gcloud compute url-maps edit my-url-map \ --region=global
將網址對應設定載入編輯器後,請新增要求鏡射政策,將要求鏡射至現有的 Service Directory 服務。
defaultService: my-project/global/default-service hostRules: - hosts: - '*' pathMatcher: path-matcher-one pathMatchers: - defaultService: my-project/global/default-service name: path-matcher-one pathRules: - paths: - /payments/ service: my-project/global/default-service requestMirrorPolicy: backendService: myproject/global/payments-test-bes
從後端服務移除服務繫結
如要從後端服務移除服務繫結,請將新的服務繫結清單傳遞至 gcloud compute backend-services update
指令。新清單不得包含要刪除的服務繫結:
- 如要移除所有服務繫結,請設定
--no-service-bindings
標記。 - 如要移除一或多個服務繫結,請將新的服務繫結清單傳遞至
--service-bindings
旗標,並省略要移除的服務繫結。
新增或移除服務繫結
bind-service
指令會將服務繫結新增至後端服務上現有的服務繫結集。
gcloud compute backend-services bind-service BACKEND_SERVICE_NAME \ --service-binding-name SERVICE_BINDING_URL \ --global
unbind-service
指令會從後端服務的現有服務繫結集中移除服務繫結。
gcloud compute backend-services unbind-service BACKEND_SERVICE_NAME \ --service-binding-name SERVICE_BINDING_URL \ --global
bind-service
和 unbind-service
指令是 Google Cloud CLI 建構項目。這些並非 API 層級的建構體。
後續步驟
- 如要瞭解如何透過這項整合功能進行可觀測性作業,請參閱「透過 Service Directory 進行可觀測性作業和偵錯」。