Cloud Service Mesh 服務路由 API 總覽
本文件適用於網格或平台管理員和服務開發人員,他們對 Cloud Service Mesh 和服務網格概念有中級到進階程度的熟悉程度,並且在 Compute Engine 上使用 VM 執行個體部署 Cloud Service Mesh。本文適用於使用 Envoy 和 gRPC 用戶端的部署作業。如要進一步瞭解 Cloud Service Mesh 概念,請參閱總覽。
Cloud Service Mesh 為應用程式提供服務網路功能,包括進階流量管理、觀測和安全性。不過,設定及操作服務網格對網格管理員和服務開發人員而言,都是複雜的工作。
本文說明用於設定 Cloud Service Mesh 的服務路由 API。這些 API 旨在簡化及改善整體網格設定體驗。
服務路由模型會使用名為 Mesh
、Gateway
和 Route
的 API 資源。當您定義服務網路控制層時,這些資源可提供與情境相關的設定體驗。
本文將介紹下列服務路由 API 模型和資源。
Mesh
resource- 服務與服務之間 (東西向) 的流量管理,以及 Envoy 輔助 Proxy 和無 Proxy gRPC 用戶端的安全性設定。
-
- 針對充當入口網關的 Envoy 代理程式,提供流量管理和安全性設定,讓外部用戶端連線至服務網格 (南北向)。
Route
資源,類型如下:
Google Cloud 控制台不支援服務路徑 API。您必須使用 Google Cloud CLI 或 REST API 實作這些 API 資源。
用途和優勢
服務路由 API 可讓您為無 Proxy gRPC 和 Envoy Proxy 部署設定 Cloud Service Mesh。服務路由 API 模型可提供多項重要優勢。
在下圖中,服務網格中的兩項服務透過 Mesh
資源連結。兩個 HTTPRoute
資源會設定轉送。網格或平台管理員會管理 Mesh
資源,而兩位服務擁有者會為各自的服務建立轉送設定。
以角色為導向的 API 設計可明確劃分職責
服務路由 API 可讓您根據組織角色分派網格設定責任:
- Mesh 管理員可以定義邏輯 Mesh 和入口閘道基礎架構。
- 服務擁有者 (應用程式開發人員) 可以獨立定義服務的存取模式。並為服務定義及套用流量管理政策。
在下圖中,Cloud Load Balancing 和 Gateway
資源會為從不在網格中的用戶端進入網格的流量提供輸入閘道。網格管理員會設定及管理 Gateway
資源,而服務擁有者則會設定及管理自己的服務和流量轉送。
透過自助式模型提升可靠性
服務路由 API 會使用個別通訊協定和個別路徑的資源,這些資源可由獨立服務擁有者設定及擁有。這種做法有幾個優點。
- 服務擁有者可以自行決定如何為所屬服務設定政策和流量管理方式。
- 更新一個
Route
資源不會影響網格中的其他Route
資源。服務擁有者管理小型設定,因此更新程序更可靠。 - 負責目的地服務或主機名稱的服務擁有者,擁有每個
Route
資源。 - 服務擁有者不必依賴網格管理員來更新路由。
在共用虛擬私有雲環境中啟用跨多個專案的服務中介網
服務轉送 API 模型可讓服務擁有者使用共用虛擬私有雲和其他連線方式,參與共用網格基礎架構,同時維持對服務的獨立控管權。舉例來說,服務擁有者可以在自己的專案中定義 Route
資源。平台管理員可以在集中管理的主機專案中定義 Mesh
,然後授予服務擁有者 IAM 權限,以便將其 Route
資源連結至共用 Mesh
或 Gateway
。下圖顯示共用虛擬私有雲網路的範例。
服務路由 API 還可讓您使用虛擬私有雲網路對等互連,將服務網格用戶端連線至不同的網路。
根據伺服器名稱指標轉送流量
TLSRoute
資源可讓您根據 TLS 握手中的伺服器名稱指標 (SNI),將 TLS 加密流量轉送至指定路徑。您可以在 TLSRoute
資源中設定 SNI 比對,將 TLS 流量轉送至適當的後端服務。在這些部署中,Proxy 只會轉送流量,TLS 工作階段會在目的地後端執行個體中終止。
TLSRoute
資源僅支援以側邊 Proxy 或閘道部署的 Envoy Proxy。
附加至 Mesh
資源的 TLSRoute
資源
下圖所示的部署作業會將任何 SNI 擴充功能值為 service1
的服務網格流量,路由至後端服務 service1
。此外,如果 SNI 擴充功能的值為 service2
,則任何服務網格流量都會轉送至後端服務 service2
。SNI 擴充功能值和後端服務名稱彼此獨立。
TLSRoute
資源和 Mesh
資源 (按一下即可放大)附加至 Gateway
資源的 TLSRoute
資源
下圖所示的部署作業會將任何傳入流量路由至 Gateway
資源,其中 SNI 擴充功能的值為 serviceA
,並將後端服務 serviceA
此外,如果 Gateway
的 SNI 擴充功能值為 serviceB
,則任何傳入該端點的流量都會轉送至後端服務 serviceB
。SNI 擴充功能值和後端服務名稱是獨立的。HTTP 要求中的 SNI 擴充資料值和標頭也是獨立的。
Gateway
資源不會在 Gateway
的 Envoy 代理程式中終止 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
API 資源,其中包含 Envoy 附加元件和無 Proxy 的 gRPC 部署 (按一下可放大)Mesh
資源會在 Route
資源中參照,為屬於網格的服務新增路由。
Envoy Proxy 和無 Proxy gRPC 用戶端會加入由 Mesh
資源名稱識別的服務網格,從 Cloud Service Mesh 接收設定。Mesh
資源支援下列資料層部署作業:
- Envoy 與應用程式一同執行,做為補充 Proxy
- 無 Proxy gRPC 用戶端
- 混合使用 Envoy 附加元件和無 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% 的流量。
為了簡化服務網格的管理作業,您可以列出附加至 Mesh
或 Gateway
資源的所有 Route
資源。
TLSRoute
項資源
使用 TLSRoute
資源,根據 SNI 主機名稱和應用程式層通訊協定協商 (ALPN) 名稱,將 TLS 流量轉送至後端服務。TLSRoute
設定會暗示 TLS 轉送,在這種情況下,Envoy Proxy 不會終止 TLS 流量。
TLSRoute
資源會參照一或多個 Mesh
和 Gateway
資源,藉此新增對應網格或閘道設定中的路徑。
TLSRoute
資源也會參照一或多個後端服務資源。服務會使用後端服務 API 資源進行設定。
Gateway
項資源
Gateway
資源用於代表 Envoy 代理程式,可做為入口網關,讓外部用戶端連線至服務網格 (南北流量)。這個資源具有監聽埠和 scope
參數。做為入口閘道的 Envoy 代理程式會繫結至指定的通訊埠和 0.0.0.0
,後者代表本機 VM 上的所有 IP 位址。下圖顯示 Envoy 代理程式已部署為 ingress 服務,並由 Gateway
資源設定。在這個特定範例中,Envoy 代理程式會在通訊埠 80 上聆聽來自用戶端的傳入連線。
Gateway
API 資源僅支援 Envoy Proxy Data Plane。不支援無 Proxy gRPC。Gateway
資源支援 gRPCRoutes
,但 gRPC 流量會由 Envoy Proxy 進行路由,並充當中介 Proxy。
Gateway
資源的服務網格入口 (按一下即可放大)Gateway
資源 (按一下即可放大)Gateway
範圍和合併的 Gateway
設定為何?
Gateway
資源例項代表通訊埠和特定通訊埠接收的流量設定。Gateway
API 資源含有 scope
參數,可用於邏輯群組化及合併兩個或多個 Gateway
資源的設定。
舉例來說,如果您希望 Gateway
Proxy 分別在通訊埠 80 和 443 上監聽,以便分別接收 HTTP 和 HTTPS 流量,則需要建立兩個 Gateway
資源。請為 HTTP 流量設定一個使用通訊埠 80 的 Gateway
資源,並為 HTTPS 流量設定另一個使用 443 的資源。為每個 scope
欄位提供相同的值。Cloud Service Mesh 會動態合併所有同範圍 Gateway 的個別設定。在資料層方面,在入口網關模式下執行的 Envoy Proxy 也必須向 Cloud Service Mesh 提供相同的範圍參數,才能接收 Gateway
設定。請注意,您在建立 Gateway
資源時會指定範圍,且指定的範圍必須與 Proxy 的啟動參數相同。
Gateway
資源合併行為 (按一下即可放大)以下是 Gateway
資源的重要考量:
Gateway
範圍參數為必要參數。即使只有一個Gateway
,也請在Gateway
資源和 Envoy 代理程式的引導設定中指定範圍。- 建立
Gateway
資源不會透過 Envoy 代理程式部署服務。部署 Envoy Proxy 是另一個步驟。 Gateway
資源具有type
,代表入口部署類型。這個欄位是保留供日後使用。目前支援的唯一值是OPEN_MESH
,這是預設值,且無法修改。
混合通訊協定和資料平面的 Mesh 部署
您可以使用混合資料層部署,在同一個網格中使用 Envoy Proxy 和無 Proxy 的 gRPC。建立這類部署作業時,請考量以下事項。
- Envoy 副車部署作業支援所有路由 (
HTTPRoute
、GRPCRoute
、TCPRoute
和TLSRoute
)。 - 無 Proxy gRPC 部署項目僅支援
GRPCRoute
。 GRPCRoute
僅限於 gRPC 無 Proxy 部署作業支援的功能。
多專案共用虛擬私有雲環境中支援的拓樸
Cloud Service Mesh 支援將其他專案中定義的 Route
資源新增至集中式管理專案中定義的 Mesh
或 Gateway
資源。經授權的服務擁有者可以直接將服務轉送設定新增至 Mesh
或 Gateway
。
Mesh
和 Route
資源之間的跨專案參照 (按一下即可放大)在典型的跨專案情境中,您會選擇一個專案 (主機專案或集中控管的管理專案) 做為建立 Mesh
資源的網格管理專案。網格管理專案擁有者會授權其他專案的 Route
資源參照 Mesh
資源,讓其他專案的路由設定成為網格的一部分。無論是 Envoy 還是 gRPC,網格資料平面都會向管理專案要求設定,並接收連結至 Mesh
的所有路徑的聯集。對於 Gateway
,路徑也會在使用相同範圍的所有 Gateways
中合併。
Mesh
管理專案可以是您選擇的任何專案,只要底層專案具有虛擬私有雲網路連線 (透過共用虛擬私有雲或虛擬私有雲網路對等互連),設定就會生效。
IAM 權限和角色
以下是安全取得、建立、更新、刪除、列出及使用 Mesh
和 Route
資源所需的 IAM 權限。
- Mesh 管理員必須具備
networkservices.mesh.*
權限。 - 閘道管理員必須具備
networkservices.gateways.*
權限。 - 服務擁有者必須具備
networkservices.grpcRoutes.*
、networkservices.httpRoutes.*
或networkservices.tcpRoutes.*
權限。
Mesh 管理員需要將 networkservices.mesh.use
權限授予服務擁有者,讓服務擁有者將 Route
資源附加至 Mesh
資源。同樣的模式也適用於 Gateway
資源。
如要查看 Mesh
資源的所有身分與存取權管理權限,請前往身分與存取權管理權限參考資料頁面,然後搜尋 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 或 gateway 形式部署的 Envoy proxy。- 僅支援使用自動 Envoy 部署功能的 Compute Engine VM,以及使用自動 Envoy 插入功能的 GKE Pod。您無法使用服務路由 API 進行手動部署。
- 服務轉送 API 與舊版 API 不相容。
- 當
TCPRoute
資源附加至Mesh
資源時,用於比對 TCP 流量的通訊埠無法用於提供任何內容,只能提供此TCPRoute
所描述的流量。- 舉例來說,您的部署作業可能會包含與「8000」通訊埠相符的
TCPRoute
資源,以及一個 HttpRoute 資源。當兩者都連結至相同的Mesh
資源時,即使底層 IP 位址不同,由HTTPRoute
資源轉送的流量也無法使用通訊埠 8000。這項限制源自 Envoy Proxy 實作,因為該 Proxy 會優先將優先順序指派給與連接埠相符的路徑。
- 舉例來說,您的部署作業可能會包含與「8000」通訊埠相符的
Gateway
資源不會佈建代管負載平衡器,也不會動態建立 Envoy 服務。- 自動部署的 Envoy 用於做為入口網關時,不得使用
serving_ports
引數搭配--service-proxy
旗標。 - 自動部署的 Envoy 不支援提供與 VM 專案不同的專案編號。
後續步驟
- 如要瞭解如何列出與
Mesh
或Gateway
資源相關聯的路線資源,請參閱「列出Route
資源」。 - 如要瞭解服務路由 API,請參閱 網路服務 API 的說明文件。