在 Kubernetes (K8s) 中,Service 可以讓 Pod 之間互相溝通,但當流量要進入整個 Cluster 時,我們需要更高階的控制。Ingress 便是專門用來管理 外部流量進入 K8s 內部服務的「入口控制器」。
本文會從實務例子開始,逐步解釋 Ingress 的用途、配置方式,以及它有哪些限制。
情境案例:
Ingress 則是透過一個控制器 (Ingress Controller,如 NGINX、Traefik、HAProxy) 來統一管理外部流量。
只要設定規則,就能把同一個 Domain 的不同 Path/Host 分流到不同 Service。
一個簡單的 Ingress Manifest:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: myapp.com
http:
paths:
- path: /frontend
pathType: Prefix
backend:
service:
name: frontend-svc
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: api-svc
port:
number: 80
這樣設定後:
myapp.com/frontend
→ 轉發到 frontend-svcmyapp.com/api
→ 轉發到 api-svc雖然 Ingress 很方便,但隨著服務變多,問題也逐漸浮現:
規格太簡單
強烈依賴 Controller 實作
缺乏進階流量治理
缺乏一致性 API
Ingress 幫 Kubernetes 解決了「如何讓外部流量進來」的基本問題,但它的設計過於簡單,導致不同實作之間差異巨大,缺乏一致性。
下一篇,我會介紹 Gateway API,它是 CNCF 社群提出來的新一代標準,目標就是補足 Ingress 的不足。