總覽

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 受到社群的強力支持,並有日益壯大的服務網格供應商和工具生態系統提供支援。

GAMMA 計畫的服務網格用途支援工作自 1.1.0 版起已納入標準管道,並視為 GA。

規格建議應用程式擁有者應為網格服務設定流量規則,方法是將 Route resource (有時稱為 xRoute) 與 Kubernetes Service 資源設為 parentRef。這項做法取決於 Kubernetes Service 的「前端」和「後端」角色,如 GEP-1324:Gateway API 中的服務中介網所定義。其中,「前端」角色會用於 parentRef,而 Service 的「後端」角色會用於 backendRef。符合規範的實作會使用 Service 名稱,比對正式 IP 位址的流量和 backendRef 端點。

適用於 Mesh 的 Gateway API

Gateway API 是 Kubernetes 專案,專注於 Kubernetes 中的第 4 層和第 7 層路由。這項 API 會接續 Ingress、負載平衡和 Service Mesh API。這項服務的設計目的是提供多用途、描述性和以角色為中心的功能,因此主要在路由層進行設定。HTTPRouteGRPCRoute 等特定通訊協定資源可啟用進階入口和網格路由。

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

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 服務已指定為 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 回音路由進行轉送。此範例中的路由規則會比對 gRPC 方法,並將流量轉送至特定 backendRef。當 xds:/// 前置字母遭到捨棄時,您也可以使用 GRPCRoutes 將來自 Proxy 用戶端的請求,透過 Envoy 等附屬機器注入來進行路由。

單一叢集網格圖

後續步驟