天天看點

kubernetes1.20 部署 traefik2.3

一、概述

Traefik 是一個開源的可以使服務釋出變得輕松有趣的邊緣路由器。它負責接收你系統的請求,然後使用合适的元件來對這些請求進行處理。

除了衆多的功能之外,Traefik 的與衆不同之處還在于它會自動發現适合你服務的配置。當 Traefik 在檢查你的服務時,會找到服務的相關資訊并找到合适的服務來滿足對應的請求。

Traefik 相容所有主流的叢集技術,比如 Kubernetes,Docker,Docker Swarm,AWS,Mesos,Marathon,等等;并且可以同時處理多種方式。(甚至可以用于在裸機上運作的比較舊的軟體。)

有了Traefik,就不需要維護和同步一個單獨的配置檔案:一切都會自動、實時地發生(沒有重新啟動,沒有連接配接中斷)。使用Traefik,您可以花時間在系統中開發和部署新特性,而不是配置和維護其工作狀态。

kubernetes1.20 部署 traefik2.3

二、概念

Traefik 是一個邊緣路由器,是你整個平台的大門,攔截并路由每個傳入的請求:它知道所有的邏輯和規則,這些規則确定哪些服務處理哪些請求;傳統的反向代理需要一個配置檔案,其中包含路由到你服務的所有可能路由,而 Traefik 會實時檢測服務并自動更新路由規則,可以自動服務發現。

kubernetes1.20 部署 traefik2.3

傳統的邊緣路由器(或反向代理)需要一個包含到服務的每個可能路由的配置檔案,Traefik從服務本身擷取它們。

在部署您的服務時,您需要附加一些資訊,告訴Traefik服務可以處理的請求的特征。

這意味着在部署服務時,Traefik會立即檢測到它并實時更新路由規則。反之亦然:當您從基礎設施中删除服務時,路由将相應地消失。

您不再需要建立和同步混雜着IP位址或其他規則的配置檔案。

kubernetes1.20 部署 traefik2.3

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相關資訊

kubernetes1.20 部署 traefik2.3

四、路由配置

Traefik 應用已經部署完成,但是想讓外部通路 Kubernetes 内部服務,還需要配置路由規則,這裡開啟了 Traefik Dashboard 配置,是以首先配置 Traefik Dashboard 看闆的路由規則,使外部能夠通路 Traefik Dashboard。

建立 Traefik Dashboard 路由規則檔案 traefik-dashboard-route.yaml

因為靜态配置檔案指定了ingressclass,是以這裡的annotations 要指定,否則通路會404
kubernetes1.20 部署 traefik2.3

用戶端通過域名通路服務,必須要進行 DNS 解析,可以通過 DNS 伺服器進行域名解析,也可以修改 hosts 檔案将 Traefik 指定節點的 IP 和自定義 host 綁定

打開任意浏覽器輸入位址:http://www.traefiktest.com進行通路,打開 Traefik Dashboard.

此處沒有配置驗證登入,如果想配置驗證登入,使用middleware即可。

kubernetes1.20 部署 traefik2.3

Traefik 已經部署完成,但是想讓外部通路 Kubernetes 内部服務,還需要配置路由規則,這裡用whoami 舉例。

主機hosts檔案添加如下解析

檢視效果,可以看到是同一個浏覽器通路的是同一個pod ,這個跟下面使用kuboard來建立traefik ingressroute,同一個浏覽器不停重新整理通路不同的pod

kubernetes1.20 部署 traefik2.3
kubernetes1.20 部署 traefik2.3
kubernetes1.20 部署 traefik2.3

1.通過上述使用yaml檔案建立的traefik ingressroute,可以通路使用,通過kuboard界面上也能檢視到,不過位置是在叢集管理-自定義資源-traefik.containo.us中

kubernetes1.20 部署 traefik2.3
kubernetes1.20 部署 traefik2.3
kubernetes1.20 部署 traefik2.3

2.yaml檔案部署的traefik ingressroute,通路是的時候指定pod了,但是通過kuboard界面部署的traefik ingressroute,通路的時候pod 來回變換

kubernetes1.20 部署 traefik2.3

應用部署到service後就可以了,然後使用kuboard來建立traefik ingressroute,記得設定annotations

用 HTTPS 來通路我們這個應用的話,就需要監聽 websecure 這個入口點,也就是通過 443 端口來通路,同樣用 HTTPS 通路應用必然就需要證書,用 openssl 來建立一個自簽名的證書:

通過 Secret 對象來引用證書檔案

建立一個 HTTPS 通路應用的 IngressRoute 對象:

kubernetes1.20 部署 traefik2.3
kubernetes1.20 部署 traefik2.3

應用部署到service後就可以了,然後使用kuboard建立secret,然後來建立traefik ingressroute,記得設定annotations

kubernetes1.20 部署 traefik2.3
kubernetes1.20 部署 traefik2.3

五、中間件

中間件是 Traefik2.0 中一個非常有特色的功能,可以根據自己的各種需求去選擇不同的中間件來滿足服務,Traefik 官方已經内置了許多不同功能的中間件,其中一些可以修改請求,頭資訊,一些負責重定向,一些添加身份驗證等等,而且中間件還可以通過鍊式組合的方式來适用各種情況。

kubernetes1.20 部署 traefik2.3

設定dashboard隻能白名單的ip可以通路

這個時候我們再去通路dashboard,不在白名單的就會報403

kubernetes1.20 部署 traefik2.3

六、路由配置(進階)

在開始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啟動後日志顯示

kubernetes1.20 部署 traefik2.3

v2.5啟動後日志顯示

kubernetes1.20 部署 traefik2.3

看來若是更新的話,得改yaml檔案中的内容才行

參考資料:

https://blog.51cto.com/foxhound/2545116?source=dra

https://www.cnblogs.com/heian99/p/14608414.html

https://blog.51cto.com/u_13760351/2764008

繼續閱讀