更新於 2024/10/03閱讀時間約 4 分鐘

什麼是Ingress?

本次分享一個K8S網路的一個很重要的元件:Ingress(準確來說,這裡專指Kubernetes Ingress),以下是本文的幾個重點:

  1. 什麼是Ingress?
  2. 有沒有ingress差別在那?
  3. ingress controller?
  4. ingress怎麼寫?
  5. 結論

1. 什麼是Ingress?

  • Ingress = 進入Kubernetes cluster的流量
  • Egress = 離開Kubernetes cluster的流量
Ingress & Egress

Ingress & Egress

沒了,最簡單的解釋就是這樣。如果還要再細節點,可以說:

  • Ingress 是Kubernetes的原生資源(就等同於Pod…),裝好就可以使用
  • 透過Ingress我們可以自行維護DNS
  • 利用將規則加到路由,將k8s外部來源導至k8s內部應用服務的一種資源

2. 有沒有Ingress的差別?

  • 不使用Ingress,如上述,就會需要在service內加入像是NodePort的方式以IP:Port將服務暴露給外界

不使用ingress

使用Ingress+Ingress controller,可以直接在Loadbalancer與內部應用service中間加入一層具備規則的控制元件,可以直接跟據規則將流量導引至正確的地方

加入了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就沒有路由規則的能力

------------------------------------------------------------------------
※ 參考來源:

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.