前言
Traefik v2 版本已經(jīng)發(fā)布有一段時(shí)間了,看到 v2 有一些很不錯(cuò)的功能:
- 支持TCP
- 支持路由中間件
- 支持灰度發(fā)布
- 支持流量復(fù)制
- 全新的 dashboard
- ...
看官網(wǎng)的文檔和一些中文的教程都是使用docker的示例,有些細(xì)節(jié)理解起來有點(diǎn)吃力,通過可執(zhí)行文件學(xué)習(xí),可以更好的理解其中的一些細(xì)節(jié)。
下面描述一下 Traefik v2 源碼編譯安裝,啟動(dòng),并訪問 dashboard的過程。
編譯安裝
1 獲取最新源碼
git clone git@github.com:containous/traefik.git
cd traefik
git checkout v2.1
2 生成 webui 的靜態(tài)文件
cd webui
npm install
npm run build
可以看到 traefik/static 目錄下生成了靜態(tài)文件
3 使用go-bindata把靜態(tài)文件都打包到 go 程序中
go generate
4 編譯生成可執(zhí)行文件 traefik
go build -v -o traefik ./cmd/traefik
5 配置文件
Traefik 中的配置發(fā)現(xiàn)是通過 provider 組件實(shí)現(xiàn)的
現(xiàn)在支持的 provider 有 docker、k8s、File 、Marathon 、Rancher
下面以 File 作為示例
- 靜態(tài)配置文件 traefik.toml,僅在啟動(dòng)時(shí)被加載
[global]
checkNewVersion = true
sendAnonymousUsage = true
[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.websecure]
address = ":443"
[log]
level = "DEBUG"
[api]
dashboard = true
[ping]
[providers]
[providers.file]
directory = "/path/config"
filename = "dynamic.yml"
watch = true
- 動(dòng)態(tài)配置文件 dynamic.toml,可被熱更新(無需重啟進(jìn)程)
[http.routers]
[http.routers.api]
rule = "Host(`127.0.0.1`)"
entryPoints = ["web"]
service = "api@internal"
6 啟動(dòng) traefik 服務(wù)
./traefik --configfile=traefik.toml
7 瀏覽器訪問 http://127.0.0.1, 可以打開 taefik dashboard
訪問Traefik v2 的 dashborad,使用官方的 docker 示例,直接運(yùn)行就可以了,但是源碼編譯安裝的包,啟動(dòng)后訪問 dashboard 一直 404,過程中卻折騰了很久,主要是2,3步的文檔中給的有點(diǎn)少,我google了很久,發(fā)現(xiàn)不少人也遇到同樣的問題,都沒有好的解決辦法。最后是在閱讀源碼 dashboard 部分找到方法。