Traefik Proxy v3.7 发布:Ingress NGINX Provider 转正,85+ annotation 原样可用
Traefik Proxy v3.7(代号 Langres)已发布。
- 发布说明:
- 仓库:
- v3.6.14 迁移指南:
Ingress NGINX 迁移:Provider 从实验特性转正
v3.7 原生支持 85+ 个 Ingress NGINX annotation,experimental flag 被去掉,Ingress NGINX Provider 正式成为 first-class provider。
目标是把 Traefik 做成 Ingress NGINX 的 drop-in 替代:带上现有 manifest,启用 provider 就能跑,不需要改 YAML、不需要转换 annotation、也不需要做一次性的大爆炸切换。
静态配置:
providers:
kubernetesIngressNginx:
enabled: true
# 其余为静态配置
该能力由 IBM Cloud、Nutanix、OVHcloud、SUSE、TIBCO 等验证。
snippet 怎么处理:不拒绝,也不照抄
v3.7 部分支持 configuration-snippet、server-snippet、auth-snippet 这三类 snippet。
在 Ingress NGINX 里,snippet 的语义是把用户提供的原始 Nginx 指令原样粘贴进生成的 nginx.conf。也就是说用户输入会直接进入 controller 的运行时配置,注入面很大——Kubernetes 维护者把 snippet 列为推动 Ingress NGINX 退役的「serious security flaws」之一。
Traefik 没有走两个极端:
- 不直接拒绝。拒绝会破坏迁移路径,drop-in 替代也就无从谈起。
- 不照抄粘贴。Traefik 把 snippet 内容解析成结构化输入,只映射一份经过挑选的安全指令允许列表:header 改写、rewrite、client IP 与 URI 变量的插值;允许列表之外的指令一律拒绝。
一个结构性差异是:Traefik 本身不生成原始配置文件,因此不存在「可以把原始文本粘贴进去」的位置。
其他新增内容
- middlewares on services
- 完整支持 Gateway API v1.5
- dashboard 新增 certificates 视图
- Retry 中间件:支持按 HTTP 响应状态码重试、可配置每次尝试的超时、可针对非幂等方法
- Failover service:支持按响应状态码触发
升级前注意:v3.6.14 的 breaking change
v3.6.14 有一个 breaking change,升级前先看迁移指南。
#12976 的修复让 Chain middleware CRD 遵守 allowCrossNamespace 配置。在此之前,Chain 中间件可以跨 namespace 引用中间件,而完全不看 allowCrossNamespace 的值。
从 v3.6.14 起,当 allowCrossNamespace=false(默认值)时,Chain 引用其他 namespace 的中间件会被拒绝,并记录错误日志。依赖旧(错误)行为才能工作的配置,需要先做调整再升级。