總覽

Cloud Service Mesh 為應用程式提供服務網路功能,包括進階流量管理、觀測和安全防護。不過,設定及運作服務網格是一項複雜的工作。本頁說明如何使用 Kubernetes Gateway API 設定 Cloud Service Mesh。這些 API 旨在簡化及提升整體網狀架構設定體驗。

透過 Mesh 適用的 Kubernetes Gateway API,您可以為無 Proxy gRPC 和 Envoy Proxy 部署項目設定 Cloud Service 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,而「後端」角色則用做 backendRefService相容的實作項目會使用 Service 名稱來比對流量,並使用 backendRef 端點做為標準 IP 位址。

網格的 Gateway API

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

GAMMA 計畫 (Service Mesh 的 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) 路由傳送要求。

單一叢集網格圖

後續步驟