來了來了,從山坡上輕輕地流下來,當流量匯集成河,Ingress該如何選擇?
今天會簡單介紹一下:
Traefik是一套完整容器化的Reverse Proxy, 並且支援非常多常用的Container Orchestration如Kubernetes, Docker, Docker Swarm, AWS, Mesos, Marathon。 亦即你可以很容易地在這些orchestration的套件管理庫找到完整的解決方案而不需要自己去找零碎的Image並且拼湊起來。
traefik的概念就像下面這張圖:
是一個具有Auto Service Discovery的Edge Router。
Service Discovery:
詳情可以參考安德魯的部落格,當你的pods數量級達到上千上百時,要怎麼在新的pod加入時立刻讓其可以被連到,這個過程就是服務發現。基本的原理可以看一下本系列文第一篇Kube-proxy。
Edge Router:
其實是一種路由器的概念,相對於Edge Router(邊緣路由器)的概念就是Core Router(核心路由器),詳情可見維基百科,為什麼Traefik是Edge Router? 因為你的app本來像邊緣人一樣不可為外人觸及, 現在透過Traefik而可以被連到(當然要加Service)。
你可以使用docker-compose或者跑起來一個image。
這邊我直接使用image,但照著官方網站文件跑起來雖然有通,但沒有Dashboard, 所以我就照著Docker Registry的說明走。
## traefik.yml
# Docker configuration backend
providers:
docker:
defaultRule: "Host(`{{ trimPrefix `/` .Name }}.docker.localhost`)"
# API and dashboard configuration
api:
insecure: true
docker run -d -p 8080:8080 -p 80:80 \
-v $PWD/traefik.yaml:/etc/traefik/traefik.yml \
-v /var/run/docker.sock:/var/run/docker.sock \
traefik:v2.0
docker run -d --name test containous/whoami
測試成果,下curl指令確認有正確導到container:
curl --header 'Host:test.docker.localhost' 'http://localhost:80/'
可以看到多一條
不過很可惜還是沒有被歸在TCP service
根據Containous最新釋出的這篇文章來看,貌似要設定特殊的Router才行。這邊我就再找時間研究好了。
helm install stable/traefik --name <what name u want> --namespace kube-system
安裝完後大概長這樣, helm chart包下了所有要部署的資源描述檔
直接輸入ELB CName可驗證之,80 port return 404正常
轉到8080會有dashboard可以看, 至於為什麼不是上面那炫砲的儀表板? 因為helm chart stable版不是用 traefik2.0
可以看到這個結果:
我只是改ingress example的spec,讓他變成不同subpath
spec:
rules:
- http:
paths:
- backend:
serviceName: stilton
servicePort: http
path: /stilton
- backend:
serviceName: cheddar
servicePort: http
path: /cheddar
- backend:
serviceName: wensleydale
servicePort: http
path: /wensleydale
打完收工, 明天來看看除了Nginx, Traefik還有什麼Ingress Controller可用之。