上一篇我們談到 Ingress 的優點與不足。Ingress 適合用來做簡單的外部入口管理,但當系統逐漸成長,需求從 「路由」 變成 「流量治理」 時,Ingress 就顯得力不從心。
這就是 Gateway API 誕生的背景。
Gateway API 不是全新的東西,而是 Ingress 的進化版,由 Kubernetes SIG-Network 社群設計,目標是:
Gateway API 定義了一組新的 CRD:
GatewayClass
Gateway
HTTPRoute / TCPRoute / GRPCRoute
ReferenceGrant
功能 | Ingress | Gateway API |
---|---|---|
規格範圍 | 只支援基本 Host/Path 規則 | 支援 Host、Path、Header、Method、權重分流 |
標準化程度 | 高度依賴 Controller | API 規格統一 |
角色分工 | 開發者跟基礎設施混在一起 | Gateway 由基礎設施團隊管理,Route 由應用團隊管理 |
進階流量治理 | 幾乎不支援 | 支援流量分流、金絲雀發布、跨 namespace 管理 |
多協議支援 | 只支援 HTTP/HTTPS | 支援 HTTP, TCP, gRPC, TLS |
假設一個 Gateway API 的設定:
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
name: my-gateway
spec:
gatewayClassName: nginx
listeners:
- name: http
protocol: HTTP
port: 80
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: my-route
spec:
parentRefs:
- name: my-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: api-svc
port: 80
這樣就能做到類似 Ingress 的功能,但可擴展性更強。
統一規範
細粒度路由
角色分工
跨 namespace 支援
多協議支援
Gateway API 並不是要馬上取代 Ingress,而是逐步成為更通用、更標準化的選項。
如果你的團隊已經遇到 Ingress 規格不足的痛點,Gateway API 值得開始嘗試。