用途:Traefik 用作反向代理、负载均衡器和 Ingress 控制器,负责把外部流量按规则转发到后端服务,并处理 TLS、认证、限流等横切逻辑。
核心模型:采用动态路由,流量链路为入口点(entrypoints,监听端口)→ 路由器(routers,匹配规则加中间件链)→ 服务(services,后端负载均衡)。配置来自提供商(Docker、Kubernetes、文件、Consul 等),可在不重启的情况下变更。
关键对象:
- 入口点:网络监听器,如 web(HTTP :80)、websecure(HTTPS :443)、traefik(仪表盘 :8080),也可为指标、TCP、UDP 另设。
- 路由器:匹配规则(如 Host 与 PathPrefix)、协议(HTTP、HTTPS、TCP、UDP)、tls 开关、挂载中间件链、引用后端服务。
- 中间件:处理管线,如 redirectScheme(HTTP 转 HTTPS)、rateLimit、basicAuth、forwardAuth、addPrefix/stripPrefix、headers(CORS、安全头)、retry、circuitBreaker、compress、replacePath、ipWhiteList、errorPage。
- 服务:负载均衡配置,包括后端服务器地址与端口、健康检查(间隔、超时、路径)、粘性会话、熔断、流量镜像。
提供商模式:
- Docker:通过容器标签配置,如开启 Traefik、设置路由规则与服务端口,容器启停自动热加载。
- Kubernetes:支持标准 Ingress(能力有限)或 IngressRoute CRD(完整功能),并有 Middleware、TLS 选项、ServersTransport 等 CRD。
- 文件:YAML/TOML/JSON 配置文件,适合静态服务和其他提供商未覆盖的动态配置;v3 中 TOML 已弃用,推荐 YAML。
- Consul/etcd/Redis/ZooKeeper:键值存储配置,适合无 K8s 的分布式环境。
TLS 自动化:通过 ACME 对接 Let's Encrypt,支持 httpChallenge 或 dnsChallenge(用于通配符、负载均衡器之后、私有网络);dnsChallenge 需服务商凭据(如 AWS Route53、Cloudflare、GCP Cloud DNS)。还涉及证书存储、SAN 跟踪与通配符续期。
仪表盘与指标:仪表盘通过入口点暴露,可用 basicAuth 或 forwardAuth 保护,展示路由器、服务、中间件、提供商与健康状态;指标支持 Prometheus、OpenTelemetry、Datadog、InfluxDB、StatsD。
注意事项:中间件链从左到右执行,顺序很重要,限流应放在认证前,重定向应放最前。Docker 提供商默认可见同网络所有容器,建议关闭默认暴露并显式加标签。TCP 路由器不能使用 HTTP 中间件;TLS 终止需在路由器层配置。Host 规则匹配 Host 头,用 IP 访问可能不匹配。仪表盘必须加认证,api.insecure=true 仅用于开发。