總覽

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 資源設定 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、Load Balancing 和 Service Mesh API。Gateway API 的設計用途廣泛、說明性強,且以角色為中心,其設定主要位於路由層。HTTPRoute 和 GRPCRoute 等通訊協定專屬資源可啟用進階 Ingress 和網格路由。

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

GAMMA 會運用 Gateway API 規格中現有的擴充點,不需要進行 API 變更或新增資源。方法是擴充路徑資源定義 (Gateway API 中的 GRPCRoute 或 HTTPRoute),以發出服務網格用途的信號,具體做法是將路徑資源與 Service 資源建立關聯,如「服務網格的 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:/// 前置字串,GRPCRoute 也可用於轉送來自 Proxy 用戶端 (例如 Envoy) 的要求,並進行 Sidecar 插入作業。

單一叢集網格圖

後續步驟