總覽
Cloud Service Mesh 為應用程式提供服務網路功能,包括進階流量管理、觀測能力和安全性。不過,設定及操作服務網格是一項複雜的工作。本頁面說明如何使用 Kubernetes Gateway API 設定 Cloud Service Mesh。這些 API 可簡化並改善整體網格設定體驗。
透過 Mesh 適用的 Kubernetes Gateway API,您可以為無 Proxy gRPC 和 Envoy Proxy 部署作業設定 Cloud Service Mesh。Mesh 模型的 Gateway API 具備幾項主要優點:
- Gateway API 提供單一、一致的介面,可管理 Kubernetes 叢集內的輸入 (南北向) 和服務網格 (東西向) 流量。
- 服務網格可啟用進階流量轉送模式。Gateway API 可讓您設計及管理複雜的路由規則。
- 有了 Gateway API,開發人員就能專注於為微服務定義高階路由規則和政策,不必深入瞭解底層服務網格實作。
- 這款 API 具備擴充性,可因應日後強化功能,並支援新通訊協定和用途。
- Gateway API 獲得社群的大力支持,並由不斷成長的服務網格供應商和工具生態系統提供支援。
自 v1.1.0 起,支援服務網格用途的 GAMMA 計畫工作已納入標準管道,並視為正式發布。
規格建議應用程式擁有者應設定 Route resource (有時稱為 xRoute),並將 Kubernetes Service 資源設為 parentRef,為網格服務設定流量規則。這個方法取決於 Kubernetes Service 的「前端」和「後端」角色,如 GEP-1324:Gateway API 中的服務網格所定義,其中「前端」角色用作 parentRef,Service 的「後端」角色則用作 backendRef。符合規範的實作會使用 Service 名稱比對流量,並使用 backendRef 端點比對標準 IP 位址。
Mesh 的 Gateway API
Gateway API 是 Kubernetes 專案,著重於 Kubernetes 內的第 4 層和第 7 層轉送。這項 API 是 Ingress、負載平衡和服務網格 API 的後繼者,這類提示詞的設計原則是多用途、描述性,以及以角色為中心,設定主要位於轉送層。HTTPRoute 和 GRPCRoute 等通訊協定專屬資源可啟用進階輸入和網格轉送功能。
GAMMA Initiative (Gateway API for 服務網格) 定義了 Gateway API 如何用於同一叢集內的服務間或東西向流量。GAMMA 的目標是建立如何使用 Gateway API 設定服務網格,同時盡可能減少對 Gateway API 的修改,並維持其角色導向的特性。GAMMA 也強調,無論基礎技術或 Proxy 為何,都必須促進 Gateway API 各種服務網格實作之間的一致性。
GAMMA 運用 Gateway API 規格中現有的擴充點,不需要變更 API 或新增資源。具體做法是擴充路徑資源定義 (Gateway API 中的 GRPCRoute 或 HTTPRoute),以表示服務網格用途,具體做法是將路徑資源與服務資源建立關聯,如「Gateway API for Service Mesh」所述。
以下範例說明使用 HTTPRoute 的網格用途:
apiVersion: gateway.networking.k8s.io
kind: HTTPRoute
metadata:
name: echo-route
spec:
parentRefs:
- kind: Service
group: ""
name: echo-service
rules:
- backendRefs:
- name: echo-v1
port: 80
weight: 9
- backendRefs:
- name: echo-v2
port: 80
weight: 1
HTTPRoute 會參照 Service 做為 parentRef,表示 HTTPRoute 路由已設為服務網格用途。在上述範例中,echo-service Service 指定為 parentRef,表示 HTTPRoute 附加至 echo-service 的前端。用戶端傳送至 echo-service 的任何流量,都會根據 HTTPRoute echo-route 轉送。
GRPCRoute 是另一個 Kubernetes Gateway API 資源,用於將 gRPC 流量轉送至 Kubernetes 服務。如果使用者想特別轉送 gRPC 流量,並利用專為 gRPC 打造的功能 (例如 gRPC 方法和服務比對),就會選擇使用 GRPCRoute,而非 HTTPRoute。
以下範例說明如何使用 GRPCRoute:
apiVersion: gateway.networking.k8s.io
kind: GRPCRoute
metadata:
name: echo-route
spec:
parentRefs:
- kind: Service
group: ""
name: echo-service
rules:
- matches:
- method:
service:echo_basic.grpcecho.GrpcEcho
method: Echo
backendRefs:
- name: grpc-infra-backend-v1
port: 8080
- matches:
- method:
service:echo_basic.grpcecho.GrpcEcho
method: EchoTwo
backendRefs:
- name: grpc-infra-backend-v2
port: 8080
與 HTTPRoute 範例一樣,這個 GRPCRoute 是針對服務網格用途設定。無 Proxy gRPC 用戶端傳送至 xds:///echo-service.default.svc.cluster.local:8080 的任何流量,都會依據 GRPCRoute echo-route 轉送。本範例中的路由規則會比對 gRPC 方法,並將流量轉送至特定 backendRef。如果移除 xds:/// 前置字元,GRPCRoutes 也能用於轉送來自 Proxy 用戶端 (例如 Envoy) 的要求,並加入邊車容器。
