一、概述
Traefik 是一個開源的可以使服務釋出變得輕松有趣的邊緣路由器。它負責接收你系統的請求,然後使用合适的元件來對這些請求進行處理。
除了衆多的功能之外,Traefik 的與衆不同之處還在于它會自動發現适合你服務的配置。當 Traefik 在檢查你的服務時,會找到服務的相關資訊并找到合适的服務來滿足對應的請求。
Traefik 相容所有主流的叢集技術,比如 Kubernetes,Docker,Docker Swarm,AWS,Mesos,Marathon,等等;并且可以同時處理多種方式。(甚至可以用于在裸機上運作的比較舊的軟體。)
有了Traefik,就不需要維護和同步一個單獨的配置檔案:一切都會自動、實時地發生(沒有重新啟動,沒有連接配接中斷)。使用Traefik,您可以花時間在系統中開發和部署新特性,而不是配置和維護其工作狀态。
二、概念
Traefik 是一個邊緣路由器,是你整個平台的大門,攔截并路由每個傳入的請求:它知道所有的邏輯和規則,這些規則确定哪些服務處理哪些請求;傳統的反向代理需要一個配置檔案,其中包含路由到你服務的所有可能路由,而 Traefik 會實時檢測服務并自動更新路由規則,可以自動服務發現。
傳統的邊緣路由器(或反向代理)需要一個包含到服務的每個可能路由的配置檔案,Traefik從服務本身擷取它們。
在部署您的服務時,您需要附加一些資訊,告訴Traefik服務可以處理的請求的特征。
這意味着在部署服務時,Traefik會立即檢測到它并實時更新路由規則。反之亦然:當您從基礎設施中删除服務時,路由将相應地消失。
您不再需要建立和同步混雜着IP位址或其他規則的配置檔案。
Providers 用來自動發現平台上的服務,可以是編排工具、容器引擎或者 key-value 存儲等,比如 Docker、Kubernetes、File
Entrypoints 監聽傳入的流量(端口等…),是網絡入口點,它們定義了接收請求的端口(HTTP 或者 TCP)。
Routers 分析請求(host, path, headers, SSL, …),負責将傳入請求連接配接到可以處理這些請求的服務上去。
Services 将請求轉發給你的應用(load balancing, …),負責配置如何擷取最終将處理傳入請求的實際服務。
Middlewares 中間件,用來修改請求或者根據請求來做出一些判斷(authentication, rate limiting, headers, …),中間件被附件到路由上,是一種在請求發送到你的服務之前(或者在服務的響應發送到用戶端之前)調整請求的一種方法。
三、安裝
由于 Traefik 2.X 版本和之前的 1.X 版本不相容,而且1.X 已經停止更新了。這裡選擇功能更加強大的 2.X 版本來和大家進行講解,使用的鏡像是 traefik:2.3.7。
在 traefik v2.1 版本後,開始使用 CRD(Custom Resource Definition)來完成路由配置等,是以需要提前建立 CRD 資源。
Kubernetes 在 1.6 以後的版本中引入了基于角色的通路控制(RBAC)政策,友善對 Kubernetes 資源和 API 進行細粒度控制。Traefik 需要一定的權限,是以這裡提前建立好 Traefik ServiceAccount 并配置設定一定的權限。
另一種寫法:
在 Traefik 中的配置可以使用兩種不同的方式:
動态配置:完全動态的路由配置
靜态配置:啟動配置
靜态配置中的元素(這些元素不會經常更改)連接配接到 providers 并定義 Treafik 将要監聽的 entrypoints。
在 Traefik 中有三種方式定義靜态配置:在配置檔案中、在指令行參數中、通過環境變量傳遞
動态配置包含定義系統如何處理請求的所有配置内容,這些配置是可以改變的,而且是無縫熱更新的,沒有任何請求中斷或連接配接損耗。
由于 Traefik 配置很多,使用 CLI 定義操作過于繁瑣,盡量使用将其配置選項放到配置檔案中,然後存入 ConfigMap,将其挂入 traefik 中。
提前給節點設定Label,當程式部署Pod會自動排程到設定 Label的node節點上。
使用Deployment類型部署,以便于在多伺服器間擴充,使用 hostport 方式占用伺服器 80、443 端口,友善流量進入。
到此 Traefik v2.3 應用已經部署完成。
這時候就可以通過節點http://IP:8090,可以看到dashboard相關資訊
四、路由配置
Traefik 應用已經部署完成,但是想讓外部通路 Kubernetes 内部服務,還需要配置路由規則,這裡開啟了 Traefik Dashboard 配置,是以首先配置 Traefik Dashboard 看闆的路由規則,使外部能夠通路 Traefik Dashboard。
建立 Traefik Dashboard 路由規則檔案 traefik-dashboard-route.yaml
因為靜态配置檔案指定了ingressclass,是以這裡的annotations 要指定,否則通路會404
用戶端通過域名通路服務,必須要進行 DNS 解析,可以通過 DNS 伺服器進行域名解析,也可以修改 hosts 檔案将 Traefik 指定節點的 IP 和自定義 host 綁定
打開任意浏覽器輸入位址:http://www.traefiktest.com進行通路,打開 Traefik Dashboard.
此處沒有配置驗證登入,如果想配置驗證登入,使用middleware即可。
Traefik 已經部署完成,但是想讓外部通路 Kubernetes 内部服務,還需要配置路由規則,這裡用whoami 舉例。
主機hosts檔案添加如下解析
檢視效果,可以看到是同一個浏覽器通路的是同一個pod ,這個跟下面使用kuboard來建立traefik ingressroute,同一個浏覽器不停重新整理通路不同的pod
1.通過上述使用yaml檔案建立的traefik ingressroute,可以通路使用,通過kuboard界面上也能檢視到,不過位置是在叢集管理-自定義資源-traefik.containo.us中
2.yaml檔案部署的traefik ingressroute,通路是的時候指定pod了,但是通過kuboard界面部署的traefik ingressroute,通路的時候pod 來回變換
應用部署到service後就可以了,然後使用kuboard來建立traefik ingressroute,記得設定annotations
用 HTTPS 來通路我們這個應用的話,就需要監聽 websecure 這個入口點,也就是通過 443 端口來通路,同樣用 HTTPS 通路應用必然就需要證書,用 openssl 來建立一個自簽名的證書:
通過 Secret 對象來引用證書檔案
建立一個 HTTPS 通路應用的 IngressRoute 對象:
應用部署到service後就可以了,然後使用kuboard建立secret,然後來建立traefik ingressroute,記得設定annotations
五、中間件
中間件是 Traefik2.0 中一個非常有特色的功能,可以根據自己的各種需求去選擇不同的中間件來滿足服務,Traefik 官方已經内置了許多不同功能的中間件,其中一些可以修改請求,頭資訊,一些負責重定向,一些添加身份驗證等等,而且中間件還可以通過鍊式組合的方式來适用各種情況。
設定dashboard隻能白名單的ip可以通路
這個時候我們再去通路dashboard,不在白名單的就會報403
六、路由配置(進階)
在開始traefik的進階用法之前,還需要了解一個TraefikService,通過把TraefikService注冊到CRD來實作更複雜的請求設定。
TraefikService 目前能用于以下功能
servers load balancing.(負載均衡)
services Weighted Round Robin load balancing.(權重輪詢)
services mirroring.(鏡像)
1.流量複制到k8s 的service
2.流量從Traefik Service 導入
3.建立IngressRoute
yaml檔案下載下傳位址
https://files.cnblogs.com/files/sanduzxcvbnm/yaml檔案.zip
traefik鏡像版本更新
文檔中使用的traefik鏡像是traefik:v2.3,若是更新到traefik:v2.5,啟動後則會報錯如下:
v2.3啟動後日志顯示
v2.5啟動後日志顯示
看來若是更新的話,得改yaml檔案中的内容才行
參考資料:
https://blog.51cto.com/foxhound/2545116?source=dra
https://www.cnblogs.com/heian99/p/14608414.html
https://blog.51cto.com/u_13760351/2764008