總覽

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。

自 v1.1.0 起,支援服務網格用途的 GAMMA 計畫已納入標準管道,並視為正式發布。

規格建議應用程式擁有者應透過 Kubernetes Service 資源設定 Route resource (有時稱為 xRoute) 做為 parentRef,為網格服務設定流量規則。具體做法取決於 Kubernetes Service 的「前端」和「後端」角色,如 GEP-1324:Gateway API 中的服務網格所定義,其中「前端」角色用做 parentRef,而 Service 的「後端」角色則用做 backendRef。相容的實作項目會使用 Service 名稱來比對流量,並使用 backendRef 端點來比對標準 IP 位址。

網格的 Gateway API

Gateway API 是 Kubernetes 專案,著重於 Kubernetes 內的第 4 層和第 7 層路由。取代 Ingress、負載平衡和服務網格 API。這項功能用途廣泛、說明性強,且以角色為中心,主要是在路由層設定。HTTPRouteGRPCRoute 等通訊協定專屬資源可啟用進階 Ingress 和網格轉送。

GAMMA 計畫 (適用於服務網格的 Gateway API) 定義 Gateway API 如何用於同一叢集內的服務間或東西向流量。GAMMA 的目標是確立如何使用 Gateway API 設定服務網格,同時盡量減少對 Gateway API 的修改,並維持其以角色為導向的本質。GAMMA 也強調,無論 Gateway API 的基礎技術或 Proxy 為何,都應在各種服務網格實作項目中推動一致性。

GAMMA 會利用 Gateway API 規格中的現有擴充點,因此不需要變更 API 或新增資源。方法是擴充路徑資源定義 (Gateway API 中的 GRPCRouteHTTPRoute),以發出服務網格用途的信號,具體做法是將路徑資源與服務資源建立關聯,如「服務網格的 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 圖表

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

GRPCRoute 圖表

與 HTTPRoute 範例相同,這個 GRPCRoute 是為服務網格用途設定。無 Proxy gRPC 用戶端傳送至 xds:///echo-service.default.svc.cluster.local:8080 的任何流量,都會根據 GRPCRoute echo-route 轉送。本範例中的路由規則會比對 gRPC 方法,並將流量轉送至特定 backendRef。如果捨棄 xds:/// 前置字元,GRPCRoutes 也可用於從具有 Sidecar 插入項的 Proxy 用戶端 (例如 Envoy) 路由傳送要求。

單一叢集網格圖

後續步驟