看看那遙遠的飛天鯨魚,有沒有更容易的方法能連上去阿?
圖片來源:Docker (@Docker) / Twitter
上一篇提到了對外公開服務的方法 使用 Service NodePort 和 LoadBalancer
但我就是不想記哪個 port 連到哪個服務、也沒辦法配一個外部 loadbalancer 送一堆 ip 進去... 怎麼辦阿~
那就來看看 Ingress 和 Ingress Controller 吧!
Ingress 是屬於 Layer 7 的應用,能夠將 HTTP/HTTPS 的流量導向對應的 Service
圖片來源:Ingress | Kubernetes
Ingress 可以設定 host
和 path
及其背後對應的 Service
pathType
可設定三種
Exact
: 完全匹配 path,path: /aaa
無法匹配 /aaa/
Prefix
: 匹配前綴,如 path: /api
可匹配 /api/aaa
, /api/bbb
, ...ImplementationSpecific
: 依據 IngressClass 設定匹配成前兩種apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web
labels:
name: web
spec:
rules:
- host: web.example.site.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: web
port:
name: http
Ingress 可以透過設定不同 route (path
) 導向指定的 Service
圖片來源:Ingress | Kubernetes
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web
labels:
name: web
spec:
rules:
- host: web.example.site.com
http:
paths: # 設定不同 path
- pathType: Prefix
path: "/foo"
backend:
service:
name: service1
port:
number: 4200
- pathType: Prefix
path: "/bar"
backend:
service:
name: service2
port:
number: 8080
Ingress 也可以設定不同 host
(對外使用同一個對外 ip) 分別導向不同 Service
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web
labels:
name: web
spec:
rules: # 設定不同 host
- host: foo.bar.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
- host: bar.foo.com
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: service1
port:
number: 80
看了 Ingress 的使用方式是不是很心動鴨~
但如果你現在部署會發現 Ingress 完全沒用阿?!
因為還沒架 Ingress Controller 阿!
這樣外面的人會不知道要來 cluster 裡面找 Ingress
Kubernetes 官網 Ingress Controllers 就列了一大堆... 誰知道要挑哪個...
比較常見的三個 Ingress Controller:
第一次看還不知道怎麼會有兩套叫 nginx 的...
接下來都會以 Traefik 為例安裝使用 Ingress~
圖片來源:Traefik Proxy Documentation - Traefik
為什麼要選 Traefik 呢?
因為他有好看的 Dashboard 阿~
簡單用 Traefik 的兩大功能來解釋一下為什麼能用來當做 Ingress Controller~
Traefik 會紀錄所有的 route 和規則,根據進入的 request 自動導向對應的 Service
如果有用過 web server 架站 (e.g. Apache, Nginx),應該用過 reverse proxy 功能,Edge Router 做的事就是類似這個功能
圖片來源:Traefik Concepts Documentation - Traefik
前面有提到 web server 的 revers proxy 功能,基本上都要手動設定背後有哪些 Service
Traefik 就增強了這部分的功能,能透過和 Kubernetes api server 溝通隨時接收最新的 Service,自動更新 route
圖片來源:Traefik Concepts Documentation - Traefik
明天就接著安裝 Traefik 吧~