升级前 Traefik 版本是 v2.10.7(2023年末),最新稳定版已到 v3.7.5(2026年6月)。中间跨越了约 2.5 年。
v3 比 v2 强在哪(对当前环境有用的) 链接到标题
| 特性 | 作用 | 对当前环境 |
|---|---|---|
| HTTP/3 (QUIC) | 基于 UDP 的传输协议,显著降低连接延迟 | ✅ 公网用户访问加速 |
| Brotli 压缩 | 比 gzip 更高的压缩率(约 20%) | ✅ 静态资源传输更小 |
| Dashboard 改进 | 证书视图、详情页优化、路由拓扑可视化 | ✅ 日常查看更方便 |
| OpenTelemetry 集成 | 链路追踪、指标、日志一体化 | ❌ 已有 Prometheus+Loki |
| SPIFFE mTLS | 后端服务身份认证 | ❌ 暂不需要 |
| WebAssembly 插件 | 自定义中间件扩展 | ❌ 暂不需要 |
| 中间件可挂载到 Service | 不再局限于 router 级别 | ❌ 暂不需要 |
| 按状态码重试/切换后端 | Retry/Failover 支持 HTTP 状态码 | ❌ 暂用不上 |
最关键的一点:2.5 年的安全更新和 Bugfix,这是升级的最直接动力。
升级过程 链接到标题
整个升级分为两步走:
第一步:升到 v3,保持 v2 语法兼容 链接到标题
只改了两处 docker-compose.yaml:
# 1. 镜像标签
image: "traefik:v2.10.7" → image: "traefik:v3.7.5"
# 2. 新增兼容标志(避免路由语法不兼容导致启动失败)
command:
- "--core.defaultrulesyntax=v2"
然后拉镜像重启:
docker compose pull && docker compose up -d
验证三个路由服务全部正常后,进入第二步。
第二步:迁移到 v3 原生语法 链接到标题
查看日志发现一个 deprecation:
WRN Middleware "ipwhitelist@file" of type IPWhiteList is deprecated,
please use IPAllowList instead.
ipwhitelist 在 v3 中重命名为 ipAllowList,字段名也同步更新。
改两个文件:
# config/white-list.yaml
- ipwhitelist: → ipallowlist:
ipWhiteList: → ipAllowList:
# config/traefik.yaml(路由引用)
- ipwhitelist → ipallowlist
顺便移除兼容标志:
# docker-compose.yaml 删掉这行
- "--core.defaultrulesyntax=v2"
再次重启,日志干净无警告。
注意事项 链接到标题
--core.defaultrulesyntax=v2必须首次就加:不加的话 v2 路由语法不兼容,Traefik 会拒绝启动- CLI 参数兼容性好:
--serversTransport.insecureSkipVerify等常用参数在 v3 中原样可用,无需调整 - ACME 证书缓存保留:升级后 Let’s Encrypt 证书直接复用,无需重新签发
- File provider YAML 完全兼容:v2 语法的路由配置在 v3 中照常工作,可逐步迁移
- 日志 deprecation 逐个修复:升级后留意日志中的 WRN 等级消息,逐项处理即可
总结 链接到标题
从 v2.10.7 到 v3.7.5 的升级很平滑。官方提供的 v2 语法向后兼容机制让迁移风险几乎为零,只需要改镜像标签 + 加一个兼容标志就能跑起来,后续再逐步清理 deprecation 即可。