iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
0
  • 目錄
    • Introduce K8s service - Kube-proxy
    • Introduce K8s service - 4 ways to apply service(1)
    • Introduce K8s service - 4 ways to apply service(2)
    • Service Comparison & Introduce Ingress
    • @ How to install Traefik @
    • Service Debugging

來了來了,從山坡上輕輕地流下來,當流量匯集成河,Ingress該如何選擇?

今天會簡單介紹一下:

  • [x] 好用的Reverse Proxy - Traefik
  • [x] How to install Traefik
  • [x] Install Traefik on K8s Cluster

Introduce of Traefik

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)。

How to install Traefik?

你可以使用docker-compose或者跑起來一個image。

這邊我直接使用image,但照著官方網站文件跑起來雖然有通,但沒有Dashboard, 所以我就照著Docker Registry的說明走。

  1. 先寫個配置檔
## traefik.yml

# Docker configuration backend
providers:
  docker:
    defaultRule: "Host(`{{ trimPrefix `/` .Name }}.docker.localhost`)"

# API and dashboard configuration
api:
  insecure: true
  1. 把範例檔名改掉,照著官網的指令Run起來
 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
  1. 如果輸入http://localhost:8080有出現以下畫面就成功了。

  1. 加入官方測試image試試看
docker run -d --name test containous/whoami

測試成果,下curl指令確認有正確導到container:

curl --header 'Host:test.docker.localhost' 'http://localhost:80/'


可以看到多一條

  1. 加入自己的app測試
    我試著寫了一個開tcp port的服務,

不過很可惜還是沒有被歸在TCP service
根據Containous最新釋出的這篇文章來看,貌似要設定特殊的Router才行。這邊我就再找時間研究好了。

Install Traefik on K8s Cluster

  1. 用helm即可一鍵安裝, 非常方便
helm install stable/traefik --name <what name u want> --namespace kube-system

安裝完後大概長這樣, helm chart包下了所有要部署的資源描述檔

  1. 直接輸入ELB CName可驗證之,80 port return 404正常

  2. 轉到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
  1. 最後掛上心愛的domain就完工:

打完收工, 明天來看看除了Nginx, Traefik還有什麼Ingress Controller可用之。


上一篇
Oh my K8s service ! 談談如何暴露你的服務 - 4
下一篇
Oh my K8s service ! 談談如何Debug(container, kubeDNS, service pod) - 6
系列文
其實我真的沒想過要利用夾縫中求生存的 30 天K8s可以怎麼用12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言