本次分享一個K8S網路的一個很重要的元件:Ingress(準確來說,這裡專指Kubernetes Ingress),以下是本文的幾個重點:
- 什麼是Ingress?
- 有沒有ingress差別在那?
- ingress controller?
- ingress怎麼寫?
- 結論
1. 什麼是Ingress?
- Ingress = 進入Kubernetes cluster的流量
- Egress = 離開Kubernetes cluster的流量

Ingress & Egress
沒了,最簡單的解釋就是這樣。如果還要再細節點,可以說:
- Ingress 是Kubernetes的原生資源(就等同於Pod…),裝好就可以使用
- 透過Ingress我們可以自行維護DNS
- 利用將規則加到路由,將k8s外部來源導至k8s內部應用服務的一種資源
2. 有沒有Ingress的差別?
- 不使用Ingress,如上述,就會需要在service內加入像是NodePort的方式以IP:Port將服務暴露給外界

不使用ingress

加入了ingress controller
3. ingress controller?
如果要讓ingress rule可以運行,就必須要有ingress controller存在。
Ingress controller基本上是「反向代理 web server」的實作,在K8S世界會被部署成K8S deployment的型式以LoadBalancer service存在。
在一座cluster內可以有許多ingress controller對應到多組loadbalancer,每個ingress controller都必須在annotation有唯一的ingress-class的識別名稱。

以nginx為例的ingress controller運作方式
4. ingress怎麼寫?
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
namespace: dev
spec:
rules:
- host: test.apps.example.com
http:
paths:
- backend:
serviceName: hello-service
servicePort: 80
說明:
往test.apps.example.com的流量,透過此ingress導向到k8s內dev namespace的SVC
hello-service:80可以透過「path-based」的方式加入多個routing endpoint,還可
以加入TLS設定
5. 結論
- 1.
kubernetes ingress
是利用將規則加到路由流量,將k8s外部來源導至k8s內部應用服務的一種資源 - 2. Ingress簡單來說就是
進入的行為
- 3. 透過
ingress controller
的使用可以動態的進行路由規則的更新 - 4. OpenShift架構下,預設使用
HAProxy
成為ingress controller - 5. Ingress controller 並不是K8S原生的資源,一座cluster內可以有許多ingress controller對應到多組loadbalancer
- 6.
nginx
是其中一種常見的ingress controller - 7. ingress controller具備有LB的功能,如果沒有controller,就無法進行規則路由的動作
- 8. Ingress不是LB,但ingress controller有LB的功能
- 9. 如果沒有ingress controller就沒有路由規則的能力
------------------------------------------------------------------------
※ 參考來源: