Traefik 是由 golang 语言开发的开源 HTTP/TCP/UDP 应用代理工具,作为云原生应用代理,目前常应用于容器环境的 k8s ingress 场景上作为“南北向”流量的策略管控。同时日常应用代理工具应用场景选择上,老牌的 nginx 也是一个不错的选择,但从 Traefik 的轻量、简单易用以及动态加载等功能特色上,完全可以成为大家常用的应用代理选择的一个利器,而并非仅仅应用于 kubenetes 容器环境下。对于初次接触或想尝试使用 Traefix 的用户和本人之初的想法一样,先从最简单的部署方式开始,当然除了很容易拥有 k8s 环境资源或熟悉 k8s 环境操作的用户以外,更多可推荐从最简单的文件 “file provider"配置应用开始。
Traefik 支持从多种配置源方式动态加载配置,比如从文件k8s/docker/consul等等, 本文将仅以文件配置实践实例为大家提供快速使用入门指导。
关键概念理解
-
entryPoints
入口监听器 -
providers
动态配置提供者 -
routers
路由 -
middlewares
中间件 -
servers
后端服务
基础架构图

中间件组件

应用场景配置实例
场景一: TCP 应用代理
描述:实现对mysql服务默认3306 TCP的代理,代理端口为3406
1)全局配置 全局配置为 Traefix 静态配置项(变更需要重启进程),主要指定 entryPoints 和 providers
#/etc/traefik/traefik.yml
global:
checkNewVersion: true
sendAnonymousUsage: true
entryPoints: #入口监听配置
mysql: #自定义的名称--mysql
address: :3406 #定义本地网络监听地址与端口 -- 3406
log:
filePath: log/traefik.log
format: json
accessLog:
filePath: /home/lighthouse/traefix/access.log
api:
insecure: true
providers:
file:
filename: /etc/traefik/dynamic_config.yml
2)动态配置(这里'动态'可以理解为配置变化将Traefix进程动态加载无需重启)
# /etc/traefik/dynamic_config.yml
tcp:
routers:
Route_TCP:
rule: "HostSNI(`*`)" #必须项,定义rule规则为*代表所有
service: "mysql" #引用服务 --mysql自定义名称
#定义服务
services:
mysql:
loadBalancer:
servers:
- address: "127.0.0.1:3306"
如有安全
策略需求可添加 tcp middlewares 中间件功能配置
-
inFlightConn
可同时并行连接数,可限制最大的并行连接数 -
ipWhiteList
白名单ip列表,可限制仅已配置的ip或ip段源可访问此 tcp 服务
tcp:
routers:
Route_TCP:
rule: "HostSNI(`*`)"
middlewares: # 引用中间件
- "Max_Conn"
- "Limit_Local_Access"
service: "mysql"
# 定义中间件
middlewares:
Max_Conn:
inFlightConn:
amount: 10
Limit_Local_Access:
ipWhiteList:
sourceRange:
- "127.0.0.1/32"
- "192.168.0.0/16"
services:
mysql:
loadBalancer:
servers:
- address: "127.0.0.1:3306"
场景二: HTTP 应用代理
描述:实现对后多台http服务服务器集群负载均衡,代理端口为8088
1)全局配置 全局配置为 Traefix 静态配置项,主要指定 entryPoints 和 providers
#/etc/traefik/traefik.yml
global:
checkNewVersion: true
sendAnonymousUsage: true
entryPoints: #入口监听配置
mysql:
address: :3406
web: #添加自定义的名称--web
address: :8088 #定义本地网络监听地址与端口 -- 8088
log:
filePath: log/traefik.log
format: json
accessLog:
filePath: /home/lighthouse/traefix/access.log
api:
insecure: true
providers:
file:
filename: /etc/traefik/dynamic_config.yml
2)动态配置
# /etc/traefik/dynamic_config.yml
http:
routers:
Route_Web:
rule: "Host(`test.com`)" #基于请求域规则定义进行路由匹配,支持丰富的路由规则定义语法
service: "webserver" #引用服务 --webserver自定义名称
#定义服务
services:
webserver:
loadBalancer: # RR 负载模式
healthCheck: # 后端服务健康检测
path: /ping
interval: "6s"
timeout: "3s"
servers:
- url: "http://192.168.0.10"
- url: "http://192.168.0.11"
http 路由规则
http 中间件
网友评论