traefik介紹
traefik-現代反向代理,也可稱為現代邊緣路由;traefik原聲兼容主流集群,Kubernetes,Docker,AWS等。官方的定位traefik是一個讓開發人員將時間花費在系統研發與部署功能上,而非配置和維護。並且traefik官方也提供自己的服務網格解決方案
作為一個 modern edge router ,traefik擁有與envoy相似的特性
- 基於go語言研發,目的是為了簡化開發人員的配置和維護
- tcp/udp支持
- http L7支持
- GRPC支持
- 服務發現和動態配置
- front/ edge prory支持
- 可觀測性
- 流量管理
- ...
traefik 術語
要了解trafik,首先需要先了解一下 有關trafik中的一些術語。
- EntryPoints 入口點,是可以被下游客戶端連接的命名網絡位置,類似於envoy 的listener和nginx的listen
- services 服務,負載均衡,上游主機接收來自traefik的連接和請求並返回響應。 類似於nginx upstream envoy的clusters
- Providers 提供者,提供配置文件的后端,如文件,consul,redis,etcd等,可使traefik自動更新
- routers 路由器,分析請求,將下游主機的請求處理轉入到services
- middlewares: 中間件,在將下游主機的請求轉入到services時進行的流量調整
traefik部署安裝
traefik為go語言開發的,可以直接下載運行即可。此處介紹直接運行二進制程序
后端環境准備,此處為docker運行的兩個后端。
version: '3'
services:
webserver1:
image: sealloong/envoy-end:latest
ports:
- 91:90
networks:
envoymesh:
aliases:
- v1_server
- default_server
environment:
- VERSION=v1
- COLORFUL=blue
expose:
- 90
webserver2:
image: sealloong/envoy-end:latest
ports:
- 92:90
networks:
envoymesh:
aliases:
- v1_server
- default_server
environment:
- VERSION=v1
- COLORFUL=blue
expose:
- 90
networks:
envoymesh: {}
traefik配置說明
Traefik中的配置可以引用兩種不同的內容:
- 完全動態路由配置(動態配置)
- 啟動時配置(靜態配置)
靜態配置一般定義traefik的endpoints 與providers,這些不經常變動
動態配置一般定義traefik的處理瀏覽的部分,如 中間件,路由,瀏覽管理等。
- traefik1 與 traefik2的配置文件不兼容
此處配置主要以file方式講解。
靜態配置部分:
entryPoints:
web:
address: :8081
[api]
dashboard = true
insecure = true
providers:
file:
filename: ./root.yaml
[accessLog]
filePath = "/root/access.log"
format = "json"
動態配置部分
http:
routers:
router0:
rule: "Host(`test.com`)"
service: "service-foo"
entryPoints:
- web
router1:
rule: "Path(`/`)"
service: "baidu"
entryPoints:
- web
services:
service-foo:
loadBalancer:
servers:
- url: "http://10.0.0.4:91/"
- url: "http://10.0.0.4:92/"
baidu:
loadBalancer:
servers:
- url: http://www.baidu.com/