Cloud Service Mesh 服務路由 API 總覽

本文適用於網格或平台管理員,以及對 Cloud Service Mesh 和服務網格概念有中高程度瞭解,並在 Compute Engine 上透過 VM 執行個體部署 Cloud Service Mesh 的服務開發人員。本文適用於使用 Envoy 和 gRPC 用戶端的部署作業。如要進一步瞭解 Cloud Service Mesh 概念,請參閱一般總覽

Cloud Service Mesh 為應用程式提供服務網路功能,包括進階流量管理、觀測和安全防護。不過,對網格管理員和服務開發人員來說,設定及運作服務網格是相當複雜的工作。

本文說明如何使用服務路徑 API 設定 Cloud Service Mesh。這些 API 旨在簡化及提升整體網狀架構設定體驗。

服務路徑模型會使用名為 MeshGatewayRoute 的 API 資源。 定義服務網路控制層時,這些資源會提供與情境相關的設定體驗。

本文將介紹下列服務路徑 API 模型和資源。

  • Meshresource
    • 針對 Envoy 輔助資訊 Proxy 和無 Proxy 的 gRPC 用戶端,設定服務與服務 (東西向) 流量管理和安全性。
  • Gatewayresource

    • 針對做為輸入閘道的 Envoy Proxy 進行流量管理和安全性設定,允許外部用戶端連線至服務網格 (南北向)。
  • Route 資源,類型如下:

Google Cloud 控制台不支援服務路徑 API。您必須使用 Google Cloud CLI 或 REST API 實作這些 API 資源。

用途和優點

服務路由 API 可讓您設定 Cloud Service Mesh,以部署無 Proxy 的 gRPC 和 Envoy Proxy。服務路徑 API 模型可帶來多項主要優點。

在下圖中,服務網格中的兩項服務是由 Mesh 資源連結。這兩個 HTTPRoute 資源會設定轉送。網格或平台管理員會管理 Mesh 資源,而兩位服務擁有者則會為自己的服務建立轉送設定。

服務網格中服務對服務的東向/西向流量
服務網格中服務對服務的東-西向流量 (按一下即可放大)

以角色為導向的 API 設計可明確劃分職責

服務路由 API 可讓您根據機構角色,區分網格設定責任:

  • 網格管理員可以定義邏輯網格,以及 Ingress 閘道基礎架構。
  • 服務擁有者 (應用程式開發人員) 可以獨立定義服務的存取模式。他們也可以為自己的服務定義及套用流量管理政策。

在下圖中,Cloud Load Balancing 和 Gateway 資源提供 Ingress 閘道,供來自網格外部用戶端的流量進入網格。網格管理員負責設定及管理 Gateway 資源,服務擁有者則負責設定及管理自己的服務和流量轉送。

透過閘道進入網格的南北向流量
透過閘道進入網格的南北向流量 (按一下即可放大)

自助式模型可提高可靠性

服務路徑 API 使用每個通訊協定和每個路徑的資源,這些資源可由獨立的服務擁有者設定及擁有。這種方式有幾個優點。

  • 服務擁有者可自主決定如何為自己擁有的服務設定政策和流量管理。
  • 更新一個 Route 資源不會影響網格中的其他 Route 資源。服務擁有者管理小型設定,因此更新程序更可靠。
  • 負責目的地服務或主機名稱的服務擁有者,擁有每個 Route 資源。
  • 服務擁有者不必仰賴網格管理員更新路由。

在共用虛擬私有雲環境中,啟用跨多個專案的服務網格

服務路由 API 模型可讓服務擁有者透過共用虛擬私有雲和其他連線方式,參與共用網格基礎架構,同時維持對服務的獨立控制權。舉例來說,服務擁有者可以在自己的專案中定義 Route 資源。平台管理員可以在集中管理的主專案中定義 Mesh,然後授予服務擁有者身分與存取權管理權限,將 Route 資源連結至共用 MeshGateway。下圖顯示共用 VPC 的範例。

使用共用 VPC 跨專案參照
使用共用虛擬私有雲跨專案參照 (按一下可放大)

服務路由 API 也可讓服務網格用戶端透過虛擬私有雲網路對等互連,連線至不同網路。

根據伺服器名稱指標導引流量

TLSRoute 資源可讓您根據 TLS 握手中的伺服器名稱指標 (SNI),轉送 TLS 加密流量。您可以在 TLSRoute 資源中設定 SNI 比對,將 TLS 流量轉送至適當的後端服務。在這些部署作業中,Proxy 只會轉送流量,TLS 工作階段則會在目的地後端執行個體終止。

TLSRoute 資源僅支援部署為 Sidecar Proxy 或閘道的 Envoy Proxy。

TLSRoute 附加至 Mesh 資源的資源

下圖所示的部署作業會將 SNI 擴充功能值為 service1 的任何服務網格流量,路由至後端服務 service1。此外,如果 SNI 擴充功能的任何服務網格流量值為 service2,則會轉送至後端服務 service2。SNI 擴充功能值和後端服務名稱互不相干。

TLSRoute 資源和 Mesh 資源
TLSRoute 資源和 Mesh 資源 (按一下即可放大)

TLSRoute 附加至 Gateway 資源的資源

下圖所示的部署作業會將所有連入流量,路由至 SNI 擴充功能值為 serviceAGateway 資源,然後再路由至後端服務 serviceA。此外,如果 SNI 擴充功能的 serviceB 值為 serviceB,則所有傳入 Gateway 的流量都會轉送至後端服務 serviceB。SNI 擴充功能值和後端服務名稱互不相干。HTTP 要求中的 SNI 擴充功能值和標頭也是獨立的。

Gateway 資源不會在 Gateway 的 Envoy Proxy 終止 TLS 連線。TLS 連線會在對應的後端服務終止。Gateway 無法檢查 TLS 層中加密的任何資訊,只能看到 ClientHello,其中包含純文字 SNI 擴充功能。Gateway 會在這個模式中執行 TLS 傳遞。請注意,系統不支援加密的 ClientHello

TLSRoute 資源和 Gateway 資源
TLSRoute 資源和 Gateway 資源 (按一下即可放大)

核心 gRPC 支援

您可以使用核心 gRPC 屬性 (例如依方法比對),設定無 Proxy gRPC 用戶端。

TCP 流量的流量拆分

您可以針對多個後端服務的 TCP 流量,實作以權重為準的流量拆分。更新服務時,您可以設定初期測試版 (藍綠) 推出等模式。流量分配功能也能讓您以受控方式遷移流量,且不會造成服務中斷。

流量攔截

使用服務路徑 API MeshGateway 資源時,系統會自動攔截所有流量。詳情請參閱「使用自動 Envoy 部署的 Compute Engine VM 設定選項」。

架構與資源

本節說明服務路徑 API 模型及其資源,並協助您瞭解服務路徑 API 資源的運作方式。

Mesh 項資源

Mesh 資源代表服務網格的執行個體。您可以使用這項功能在專案中建立邏輯服務網格。每個 Mesh 資源在專案中都必須有專屬名稱。Mesh 資源建立後,名稱即無法修改。

使用 Envoy Sidecar 和無 Proxy gRPC 部署項目的 Mesh API 資源
Mesh具有 Envoy Sidecar 和無代理程式 gRPC 部署作業的 API 資源 (按一下可放大)

Mesh 資源會在 Route 資源中參照,以便為網格中的服務新增路徑。

Envoy Proxy 和無 Proxy gRPC 用戶端會加入以資源名稱識別的服務網格,藉此接收 Cloud Service Mesh 的設定。MeshMesh 資源支援下列資料層部署作業:

  • 與應用程式並行執行的 Envoy,做為補充 Proxy
  • 無 Proxy gRPC 用戶端
  • Envoy 補充 Proxy 和無 Proxy 的 gRPC 用戶端混合

Route 項資源

Route 資源用於設定服務的路由。Route API 資源有四種不同類型。這些規則會定義用於將流量轉送至後端服務的通訊協定。

  • HTTPRoute
  • GRPCRoute
  • TCPRoute
  • TLSRoute

API 不包含 Route API 原文。可設定的 API 資源只有 HTTPRouteGRPCRouteTCPRouteTLSRoute

Route 資源會參照一或多個 MeshGateway 資源,加入相應 MeshGateway 設定中的路徑。Route 資源可以同時參照 GatewayMesh 資源。

Route 資源也會參照一或多個後端服務資源。服務是透過後端服務 API 設定。您會建立後端服務資源,指向一或多個 MIG 或 NEG 後端。

下圖顯示 MeshGatewayRoute 資源,以及後端服務資源和後端之間的關係。

Route API 資源
Route API 資源 (按一下即可放大)

您可以在 Route 資源中定義其他流量管理功能,例如路由、標頭修改、逾時和以權重為準的流量分割。舉例來說,在下圖中,HTTPRoute 資源定義了兩個後端服務之間的流量分配比例為 70% / 30%。

根據權重拆分流量
以權重為準的流量拆分 (按一下即可放大)

為簡化服務網格的管理作業,您可以列出附加至 Route MeshGateway 資源的所有資源。

TLSRoute 項資源

使用 TLSRoute 資源,根據 SNI 主機名稱和應用層通訊協定協商 (ALPN) 名稱,將 TLS 流量轉送至後端服務。TLSRoute 設定表示 TLS 直通,其中 Envoy Proxy 不會終止 TLS 流量。

TLSRoute 資源會參照一或多個 MeshGateway 資源,以新增對應網格或閘道設定中的路徑。

TLSRoute 資源也會參照一或多個後端服務資源。 服務是使用後端服務 API 資源設定。

Gateway 項資源

Gateway 資源用於代表充當 Ingress 閘道的 Envoy Proxy,可讓外部用戶端連線至服務網格 (南北向流量)。這個資源具有接聽埠和 scope 參數。做為輸入閘道的 Envoy Proxy 會繫結至指定的通訊埠和 0.0.0.0,代表本機 VM 上的所有 IP 位址。下圖顯示部署為 Ingress 服務的 Envoy Proxy,並由 Gateway 資源設定。在這個特定範例中,Envoy Proxy 會設定為監聽通訊埠 80,接收來自用戶端的連線。

Gateway API 資源僅支援 Envoy Proxy 資料平面。不支援無 Proxy gRPC。gRPCRoutes 資源支援 Gateway,但 gRPC 流量是由 Envoy Proxy (做為中介 Proxy) 路由傳送。

透過 `Gateway` 資源的服務網格 Ingress
透過 Gateway 資源的服務網格 Ingress (按一下即可放大)
閘道資源
Gateway 資源 (按一下即可放大)

什麼是Gateway範圍和合併Gateway設定?

Gateway 資源執行個體代表通訊埠,以及在這些通訊埠上接收到的流量專屬設定。Gateway API 資源有一個參數 (scope),可用於邏輯分組及合併兩個以上 Gateway 資源的設定。

舉例來說,如果您希望 Gateway Proxy 監聽通訊埠 80 和 443,分別接收 HTTP 和 HTTPS 流量,請建立兩個 Gateway 資源。設定一個通訊埠為 80 的 Gateway 資源 (適用於 HTTP 流量),另一個通訊埠為 443 的資源 (適用於 HTTPS 流量)。為每個 scope 欄位提供相同的值。 Cloud Service Mesh 會動態合併範圍相同的所有閘道個別設定。在資料層方面,以 Ingress 閘道模式執行的 Envoy Proxy 也必須向 Cloud Service Mesh 提供相同的範圍參數,才能接收 Gateway 設定。請注意,您在建立 Gateway 資源時指定範圍,並將相同範圍指定為 Proxy 的啟動程序參數。

閘道資源合併行為
Gateway 資源合併行為 (按一下即可放大)

以下是 Gateway 資源的重要考量事項:

  • Gateway 範圍參數為必要參數。即使只有一個 Gateway,也請在 Gateway 資源和 Envoy 代理程式的啟動設定中指定範圍。
  • 建立 Gateway 資源不會部署含有 Envoy Proxy 的服務。部署 Envoy Proxy 是另一個步驟。
  • Gateway 資源具有 type,代表 Ingress 部署作業的類型。這個欄位保留供日後使用。目前唯一支援的值是 OPEN_MESH,這是預設值,無法修改。

混合通訊協定和資料層的網格部署作業

您可以混合部署資料層,在同一個網格中同時使用 Envoy Proxy 和無 Proxy 的 gRPC。建立這類部署作業時,請考量下列事項。

  • Envoy Sidecar 部署作業支援所有路徑 (HTTPRouteGRPCRouteTCPRouteTLSRoute)。
  • 無 Proxy gRPC 部署項目僅支援 GRPCRoute
  • GRPCRoute 僅限於 gRPC 無 Proxy 部署作業支援的功能。

多專案共用 VPC 環境中支援的拓撲

Cloud Service Mesh 支援將其他專案中定義的 Route 資源,新增至集中式管理專案中定義的 MeshGateway 資源。授權服務擁有者可以直接將服務轉送設定新增至 MeshGateway

在 Mesh 和 Route 資源之間建立跨專案參照
MeshRoute 資源之間進行跨專案參照 (按一下即可放大)

在典型的跨專案情境中,您會選擇一個專案 (主專案或集中控管的管理專案) 做為網格管理專案,並在其中建立 Mesh 資源。網格管理專案擁有者授權其他專案的 Route 資源參照 Mesh 資源,允許其他專案的路由設定成為網格的一部分。網格資料平面 (無論是 Envoy 或 gRPC) 會向管理專案要求設定,並接收附加至 Mesh 的所有路徑聯集。對於 Gateway,使用相同範圍的所有 Gateways 也會合併路徑。

Mesh 管理專案可以是您選擇的任何專案,只要基礎專案具有虛擬私有雲網路連線 (透過 Shared VPC 或虛擬私有雲網路對等互連),設定就能正常運作。

IAM 權限和角色

如要安全地取得、建立、更新、刪除、列出及使用 MeshRoute 資源,必須具備下列 IAM 權限。

  • Mesh 管理員必須具備 networkservices.mesh.* 權限。
  • 閘道管理員必須具備 networkservices.gateways.* 權限。
  • 服務擁有者必須具備 networkservices.grpcRoutes.*networkservices.httpRoutes.*networkservices.tcpRoutes.* 權限。

Mesh 管理員必須將 networkservices.mesh.use 權限授予服務擁有者,服務擁有者才能將 Route 資源附加至 Mesh 資源。Gateway 資源也適用相同模型。

如要查看 Mesh 資源的所有 IAM 權限,請前往 IAM 權限參考頁面,然後搜尋 meshes

您不需要其他預先定義的角色。現有的預先定義角色「Compute 網路管理員」(roles/compute.networkAdmin) 預設具有 networkservices.* 權限。您可能需要在自訂角色中新增先前所述的權限。

注意事項和限制

  • Google Cloud 控制台不支援服務路徑 API。
  • 使用 xDS API 第 3 版以上版本。
    • 最低 Envoy 版本為 1.20.0 (因為服務路由 API 僅支援 xDS 第 3 版)
    • 最低 gRPC 啟動產生器版本為 v0.14.0
  • TLSRoute 資源僅支援部署為 Sidecar Proxy 或閘道的 Envoy Proxy。
  • 系統僅支援自動部署 Envoy 的 Compute Engine VM,以及自動插入 Envoy 的 GKE Pod。您無法搭配服務路徑 API 使用手動部署作業。
  • 服務轉送 API 無法與舊版 API 回溯相容。
  • TCPRoute 資源附加至 Mesh 資源時,用於比對 TCP 流量的通訊埠只能用於提供這個 TCPRoute 所述的流量,不得用於其他用途。
    • 舉例來說,您的部署作業可能包含符合通訊埠「8000」的 TCPRoute 資源和 HttpRoute 資源。如果兩者都附加至相同的 Mesh 資源,即使基礎 IP 位址不同,HTTPRoute 資源路由的流量也無法使用通訊埠 8000。這項限制來自 Envoy 代理程式實作,該程式會優先指派與連接埠相符的路徑。
  • Gateway 資源不會佈建代管負載平衡器,也不會動態建立 Envoy 服務。
  • 做為 Ingress 閘道自動部署的 Envoy 不得將 serving_ports 引數傳遞至 --service-proxy 旗標。
  • 自動部署的 Envoy 不支援提供與 VM 專案不同的專案編號。

後續步驟

  • 如要瞭解如何列出與 MeshGateway 資源相關聯的路徑資源,請參閱「列出 Route 資源」。
  • 如要瞭解服務路由 API,請參閱網路服務 API 的說明文件。