Gateway API

Gateway API 是一系列 API 資源型別,提供動態基礎設施供應和高階流量路由。

透過可擴充套件、面向角色、協議感知的配置機制提供網路服務。Gateway API 是一個附加元件,包含提供動態基礎設施供應和高階流量路由的 API 資源型別

設計原則

以下原則塑造了 Gateway API 的設計和架構:

  • 面向角色: Gateway API 資源型別是根據負責管理 Kubernetes 服務網路的組織角色建模的。
    • 基礎設施提供商: 管理基礎設施,允許多個隔離的叢集為多個租戶提供服務,例如雲提供商。
    • 叢集操作員: 管理叢集,通常關注策略、網路訪問、應用許可權等。
    • 應用開發人員: 管理在叢集中執行的應用程式,通常關注應用程式級別的配置和 Service 組合。
  • 可移植: Gateway API 規範被定義為自定義資源,並受到許多實現的支援。
  • 富有表現力: Gateway API 資源型別支援常見流量路由用例的功能,例如基於請求頭的匹配、流量權重等,這些功能在 Ingress 中只能透過使用自定義註解來實現。
  • 可擴充套件: Gateway 允許在 API 的各個層級連結自定義資源。這使得在 API 結構中的適當位置進行精細定製成為可能。

資源模型

Gateway API 有三種穩定的 API 資源型別

  • GatewayClass: 定義了一組具有共同配置並由實現該類的控制器管理的閘道器。

  • Gateway: 定義了流量處理基礎設施的一個例項,例如雲負載均衡器。

  • HTTPRoute: 定義了 HTTP 特定的規則,用於將流量從 Gateway 監聽器對映到後端網路端點的表示。這些端點通常表示為 Service

Gateway API 被組織成不同的 API 資源型別,這些型別具有相互依賴的關係,以支援組織的面向角色的性質。一個 Gateway 物件與一個且只有一個 GatewayClass 關聯;GatewayClass 描述了負責管理此類 Gateway 的閘道器控制器。一個或多個路由型別(如 HTTPRoute)隨後與 Gateway 關聯。Gateway 可以過濾可以附加到其 listeners 的路由,形成與路由的雙向信任模型。

下圖說明了三種穩定的 Gateway API 資源型別之間的關係:

A figure illustrating the relationships of the three stable Gateway API kinds

GatewayClass

Gateway 可以由不同的控制器實現,通常具有不同的配置。Gateway 必須引用包含實現該類的控制器名稱的 GatewayClass。

一個最小的 GatewayClass 示例

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: example-class
spec:
  controllerName: example.com/gateway-controller

在此示例中,一個已實現 Gateway API 的控制器被配置為管理控制器名稱為 example.com/gateway-controller 的 GatewayClass。此類別的 Gateway 將由該實現的控制器管理。

有關此 API 資源型別的完整定義,請參閱 GatewayClass 參考。

Gateway

Gateway 描述了一個流量處理基礎設施的例項。它定義了一個可用於處理流量(即過濾、平衡、拆分等)的網路端點,用於後端(如 Service)。例如,Gateway 可以表示雲負載均衡器或配置為接受 HTTP 流量的叢集內代理伺服器。

一個最小的 Gateway 資源示例

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: example-gateway
spec:
  gatewayClassName: example-class
  listeners:
  - name: http
    protocol: HTTP
    port: 80

在此示例中,一個流量處理基礎設施的例項被程式設計為監聽埠 80 上的 HTTP 流量。由於未指定 addresses 欄位,實現控制器會為 Gateway 分配一個地址或主機名。此地址用作處理路由中定義的後端網路端點流量的網路端點。

有關此 API 資源型別的完整定義,請參閱 Gateway 參考。

HTTPRoute

HTTPRoute 型別指定了 HTTP 請求從 Gateway 監聽器到後端網路端點的路由行為。對於 Service 後端,實現可以將後端網路端點表示為 Service IP 或 Service 的後端 EndpointSlices。HTTPRoute 表示應用於底層 Gateway 實現的配置。例如,定義新的 HTTPRoute 可能會導致在雲負載均衡器或叢集內代理伺服器中配置額外的流量路由。

一個最小的 HTTPRoute 示例

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: example-httproute
spec:
  parentRefs:
  - name: example-gateway
  hostnames:
  - "www.example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /login
    backendRefs:
    - name: example-svc
      port: 8080

在此示例中,來自 Gateway example-gateway 的 HTTP 流量,其中 Host: 請求頭設定為 www.example.com 且請求路徑指定為 /login,將被路由到埠 8080 上的 Service example-svc

有關此 API 資源型別的完整定義,請參閱 HTTPRoute 參考。

請求流

這是一個使用 Gateway 和 HTTPRoute 將 HTTP 流量路由到 Service 的簡單示例

A diagram that provides an example of HTTP traffic being routed to a Service by using a Gateway and an HTTPRoute

在此示例中,作為反向代理實現的 Gateway 的請求流是:

  1. 客戶端開始準備 URL 為 http://www.example.com 的 HTTP 請求
  2. 客戶端的 DNS 解析器查詢目標名稱,並學習到 Gateway 關聯的一個或多個 IP 地址的對映。
  3. 客戶端將請求傳送到 Gateway IP 地址;反向代理接收 HTTP 請求,並使用 Host: 請求頭匹配從 Gateway 和附加的 HTTPRoute 派生出的配置。
  4. 可選地,反向代理可以根據 HTTPRoute 的匹配規則執行請求頭和/或路徑匹配。
  5. 可選地,反向代理可以修改請求;例如,根據 HTTPRoute 的過濾規則新增或刪除請求頭。
  6. 最後,反向代理將請求轉發到一個或多個後端。

一致性

Gateway API 涵蓋了廣泛的功能,並且得到了廣泛的實現。這種組合需要明確的一致性定義和測試,以確保 API 在任何使用它的地方都能提供一致的體驗。

有關釋出渠道、支援級別和執行一致性測試等詳細資訊,請參閱一致性文件。

從 Ingress 遷移

Gateway API 是 Ingress API 的繼任者。但是,它不包括 Ingress 型別。因此,需要將現有的 Ingress 資源一次性轉換為 Gateway API 資源。

有關將 Ingress 資源遷移到 Gateway API 資源的詳細資訊,請參閱ingress 遷移指南。

下一步

Gateway API 資源不是由 Kubernetes 本身實現的,而是被定義為自定義資源,並由廣泛的實現支援。請安裝 Gateway API CRD 或遵循您選擇的實現的安裝說明。安裝實現後,請使用入門指南幫助您快速開始使用 Gateway API。

有關所有 Gateway API 資源型別的更多詳細資訊,請參閱API 規範

最後修改於 2025 年 4 月 9 日太平洋標準時間上午 5:08:更新 Endpoints API 棄用文件 (#49831) (649bda2cbd)