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 旨在簡化及提升整體網狀架構設定體驗。
服務路徑模型會使用名為 Mesh
、Gateway
和 Route
的 API 資源。
定義服務網路控制層時,這些資源會提供與情境相關的設定體驗。
本文將介紹下列服務路徑 API 模型和資源。
Mesh
resource- 針對 Envoy 輔助資訊 Proxy 和無 Proxy 的 gRPC 用戶端,設定服務與服務 (東西向) 流量管理和安全性。
-
- 針對做為輸入閘道的 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
資源連結至共用 Mesh
或 Gateway
。下圖顯示共用 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
附加至 Gateway
資源的資源
下圖所示的部署作業會將所有連入流量,路由至 SNI 擴充功能值為 serviceA
的 Gateway
資源,然後再路由至後端服務 serviceA
。此外,如果 SNI 擴充功能的 serviceB
值為 serviceB
,則所有傳入 Gateway
的流量都會轉送至後端服務 serviceB
。SNI 擴充功能值和後端服務名稱互不相干。HTTP 要求中的 SNI 擴充功能值和標頭也是獨立的。
Gateway
資源不會在 Gateway
的 Envoy Proxy 終止 TLS 連線。TLS 連線會在對應的後端服務終止。Gateway
無法檢查 TLS 層中加密的任何資訊,只能看到 ClientHello
,其中包含純文字 SNI 擴充功能。Gateway
會在這個模式中執行 TLS 傳遞。請注意,系統不支援加密的 ClientHello
。
TLSRoute
資源和 Gateway
資源 (按一下即可放大)核心 gRPC 支援
您可以使用核心 gRPC 屬性 (例如依方法比對),設定無 Proxy gRPC 用戶端。
TCP 流量的流量拆分
您可以針對多個後端服務的 TCP 流量,實作以權重為準的流量拆分。更新服務時,您可以設定初期測試版 (藍綠) 推出等模式。流量分配功能也能讓您以受控方式遷移流量,且不會造成服務中斷。
流量攔截
使用服務路徑 API Mesh
和 Gateway
資源時,系統會自動攔截所有流量。詳情請參閱「使用自動 Envoy 部署的 Compute Engine VM 設定選項」。
架構與資源
本節說明服務路徑 API 模型及其資源,並協助您瞭解服務路徑 API 資源的運作方式。
Mesh
項資源
Mesh
資源代表服務網格的執行個體。您可以使用這項功能在專案中建立邏輯服務網格。每個 Mesh
資源在專案中都必須有專屬名稱。Mesh
資源建立後,名稱即無法修改。
Mesh
具有 Envoy Sidecar 和無代理程式 gRPC 部署作業的 API 資源 (按一下可放大)Mesh
資源會在 Route
資源中參照,以便為網格中的服務新增路徑。
Envoy Proxy 和無 Proxy gRPC 用戶端會加入以資源名稱識別的服務網格,藉此接收 Cloud Service Mesh 的設定。Mesh
Mesh
資源支援下列資料層部署作業:
- 與應用程式並行執行的 Envoy,做為補充 Proxy
- 無 Proxy gRPC 用戶端
- Envoy 補充 Proxy 和無 Proxy 的 gRPC 用戶端混合
Route
項資源
Route
資源用於設定服務的路由。Route
API 資源有四種不同類型。這些規則會定義用於將流量轉送至後端服務的通訊協定。
HTTPRoute
GRPCRoute
TCPRoute
TLSRoute
API 不包含 Route
API 原文。可設定的 API 資源只有 HTTPRoute
、GRPCRoute
、TCPRoute
和 TLSRoute
。
Route
資源會參照一或多個 Mesh
和 Gateway
資源,加入相應 Mesh
或 Gateway
設定中的路徑。Route
資源可以同時參照 Gateway
和 Mesh
資源。
Route
資源也會參照一或多個後端服務資源。服務是透過後端服務 API 設定。您會建立後端服務資源,指向一或多個 MIG 或 NEG 後端。
下圖顯示 Mesh
、Gateway
和 Route
資源,以及後端服務資源和後端之間的關係。
Route
API 資源 (按一下即可放大)您可以在 Route
資源中定義其他流量管理功能,例如路由、標頭修改、逾時和以權重為準的流量分割。舉例來說,在下圖中,HTTPRoute
資源定義了兩個後端服務之間的流量分配比例為 70% / 30%。
為簡化服務網格的管理作業,您可以列出附加至 Route
Mesh
或 Gateway
資源的所有資源。
TLSRoute
項資源
使用 TLSRoute
資源,根據 SNI 主機名稱和應用層通訊協定協商 (ALPN) 名稱,將 TLS 流量轉送至後端服務。TLSRoute
設定表示 TLS 直通,其中 Envoy Proxy 不會終止 TLS 流量。
TLSRoute
資源會參照一或多個 Mesh
和 Gateway
資源,以新增對應網格或閘道設定中的路徑。
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
資源 (按一下即可放大)什麼是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 部署作業支援所有路徑 (
HTTPRoute
、GRPCRoute
、TCPRoute
和TLSRoute
)。 - 無 Proxy gRPC 部署項目僅支援
GRPCRoute
。 GRPCRoute
僅限於 gRPC 無 Proxy 部署作業支援的功能。
多專案共用 VPC 環境中支援的拓撲
Cloud Service Mesh 支援將其他專案中定義的 Route
資源,新增至集中式管理專案中定義的 Mesh
或 Gateway
資源。授權服務擁有者可以直接將服務轉送設定新增至 Mesh
或 Gateway
。
Mesh
和 Route
資源之間進行跨專案參照 (按一下即可放大)在典型的跨專案情境中,您會選擇一個專案 (主專案或集中控管的管理專案) 做為網格管理專案,並在其中建立 Mesh
資源。網格管理專案擁有者授權其他專案的 Route
資源參照 Mesh
資源,允許其他專案的路由設定成為網格的一部分。網格資料平面 (無論是 Envoy 或 gRPC) 會向管理專案要求設定,並接收附加至 Mesh
的所有路徑聯集。對於 Gateway
,使用相同範圍的所有 Gateways
也會合併路徑。
Mesh
管理專案可以是您選擇的任何專案,只要基礎專案具有虛擬私有雲網路連線 (透過 Shared VPC 或虛擬私有雲網路對等互連),設定就能正常運作。
IAM 權限和角色
如要安全地取得、建立、更新、刪除、列出及使用 Mesh
和 Route
資源,必須具備下列 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 代理程式實作,該程式會優先指派與連接埠相符的路徑。
- 舉例來說,您的部署作業可能包含符合通訊埠「8000」的
Gateway
資源不會佈建代管負載平衡器,也不會動態建立 Envoy 服務。- 做為 Ingress 閘道自動部署的 Envoy 不得將
serving_ports
引數傳遞至--service-proxy
旗標。 - 自動部署的 Envoy 不支援提供與 VM 專案不同的專案編號。
後續步驟
- 如要瞭解如何列出與
Mesh
或Gateway
資源相關聯的路徑資源,請參閱「列出Route
資源」。 - 如要瞭解服務路由 API,請參閱網路服務 API 的說明文件。