總覽
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 叢集內的 Ingress (南北向) 和服務網格 (東西向) 流量。
- 服務網格可啟用進階流量轉送模式。您可以使用 Gateway API 設計及管理複雜的路由規則。
- 有了 Gateway API,開發人員就能專心為微服務定義高階轉送規則和政策,不必深入瞭解基礎服務網格實作方式。
- 這項 API 採用可擴充式設計,可因應日後強化功能、支援新通訊協定和用途。
- Gateway API 擁有強大的社群支援,且越來越多服務網格供應商和工具都支援這項 API。
自 1.1.0 版起,GAMMA 計畫支援服務網格用途的工作已納入標準管道,並視為正式發布。
規格建議應用程式擁有者應透過 Kubernetes Service
資源設定 parentRef
,為網格服務設定 Route resource
(有時稱為 xRoute
) 的流量規則。具體做法取決於 Kubernetes Service
的「前端」和「後端」角色,如 GEP-1324:Gateway API 中的服務網格所定義,其中「前端」角色用做 parentRef
,而「後端」角色則用做 backendRef
。Service
相容的實作項目會使用 Service
名稱來比對流量,並使用 backendRef
端點做為標準 IP 位址。
網格的 Gateway API
Gateway API 是 Kubernetes 專案,著重於 Kubernetes 內的第 4 層和第 7 層路由。取代 Ingress、Load Balancing 和 Service Mesh API。這項功能用途廣泛、說明性強,且以角色為中心,主要是在路由層中設定。HTTPRoute
和 GRPCRoute
等通訊協定專屬資源可啟用進階 Ingress 和網格轉送。
GAMMA 計畫 (Service Mesh 的 Gateway API) 定義 Gateway API 如何用於同一叢集內的服務間或東/西向流量。GAMMA 的目標是確立如何使用 Gateway API 設定服務網格,同時盡量減少 Gateway API 的修改,並維持其以角色為導向的本質。GAMMA 也強調,無論 Gateway API 的基礎技術或 Proxy 為何,都應在各種服務網格實作項目中推動一致性。
GAMMA 會利用 Gateway API 規格中的現有擴充點,因此不需要變更 API 或新增資源。方法是擴充路徑資源定義 (Gateway API 中的 GRPCRoute 或 HTTPRoute),以發出服務網格用途的信號,具體做法是將路徑資源與服務資源建立關聯,如「服務網格的 Gateway API」一文所述。
以下範例說明使用 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 也可用於從具有 Sidecar 插入內容的 Proxy 用戶端 (例如 Envoy) 路由傳送要求。