Traefik v3 版本迁移实战:破坏性变更、配置迁移与源码级解析
【免费下载链接】traefikThe Cloud Native Application Proxy项目地址: https://gitcode.com/GitHub_Trending/tr/traefik
Traefik 自 v3 起在匹配器语义、Kubernetes Provider、安全默认值等方面经历了多次行为变更。本篇以仓库中 迁移指南 为主体,完整梳理 v3.0 至 v3.8 各版本升级所需的迁移步骤,并结合 Traefik 源码印证每一项变更的底层实现,帮助你在升级任何两个 v3 小版本之间准确识别破坏性变更、补齐 RBAC/CRD,并规避潜在的路径与头部安全风险。
一、迁移指南的定位与覆盖范围
migrate/v3.md 是 Traefik 官方的 v3 版本间迁移手册,按版本号倒序组织,每一节覆盖:
- 破坏性变更(Breaking changes):匹配器语义、默认值翻转等;
- 弃用(Deprecations):被标记 Deprecated 的配置项及其替代项;
- 配置迁移要求:Kubernetes CRD/RBAC 更新命令、选项改名对照表。
升级前建议:先定位你当前版本与目标版本之间的所有小节,逐项核对静态配置、动态配置与 Kubernetes 清单。下文按文档原始版本顺序完整展开,并补充源码证据。
二、v3.8.0:peerCertURI弃用,迁移到peerCertSANs
从v3.8.0起,ServersTransport与ServersTransportTCP中的peerCertURI选项被弃用,将在下一个大版本移除。替代选项peerCertSANs支持多个SAN 匹配,类型为URI或DNSName。
在源码中可以直接看到弃用标记与替代字段(ServersTransport 定义):
// Deprecated: PeerCertURI is deprecated, please use the PeerCertSANs option instead. PeerCertURI string `... json:"peerCertURI,omitempty" ...` PeerCertSANs []traefiktls.SAN `... json:"peerCertSANs,omitempty" ...`详细参数说明见 ServersTransport 与 ServersTransportTCP 文档。
Kubernetes CRD Provider 迁移步骤
若通过 CRD 使用peerCertSANs,需要更新集群中的 CRD 定义:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.8/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml三、v3.7.7:Host(*)通配符语义变为全匹配
从v3.7.7起,Host匹配器将裸*视为捕获一切(catch-all),与 TCP 的HostSNI(*)保持一致:
- 现在
Host(`*`)匹配任意请求,包括完全没有 Host 的请求; - 此前
*只当作单个通配标签,Host(`*`)仅匹配单段主机名(如localhost),不匹配example.com。
如果你的路由规则中曾依赖Host(`*`)只匹配单段主机名的旧语义,升级后需显式改写规则。更多细节见 HTTP 路由规则。
四、v3.7.6 / v3.6.22:underscoreHeadersStrategy下划线头部处理策略
从v3.6.20(主干)与v3.6.22(维护线)起,新增入口点级选项underscoreHeadersStrategy,定义路由前如何处理名称含下划线的请求头(静态配置定义):
| 取值 | 行为 |
|---|---|
keep(默认) | 含下划线的请求头原样转发 |
delete | 名称含下划线的请求头被静默删除 |
reject | 携带此类请求头的请求直接以400 Bad Request拒绝 |
默认值为keep,保持既有行为不变。
为什么需要该选项:头伪装(Header Smuggling)风险
下划线是合法的 HTTP 头名字符,但 Go 只对连字符做头名规范化。因此,管理连字符形式头部的中间件(例如 ForwardAuth 的authResponseHeaders设置的X-Auth-User)看不到下划线变体X_Auth_User,也就无法覆盖或删除它。
而很多后端(CGI、WSGI、PHP、NGINX 等)把两种形式映射到同一个变量。面对这类后端,客户端可以把下划线变体混过只管理连字符形式的中间件,让后端读到伪造值,从而绕过中间件本应提供的保护。
安全警告:当入口点后面是“把下划线与连字符视为同一头部”的后端时,不建议保留默认的
keep策略,应将该入口点设为delete或reject。
参数文档见入口点 underscoreHeadersStrategy。
五、v3.7.3 / v3.6.19:Gateway 限流调优、BasicAuth 与 StripPrefix 行为收紧
1. Kubernetes Gateway API Provider:QPS/Burst 提升
v3.7.3(主干)与v3.6.19(维护线)起,Gateway API provider 所用 Kubernetes client 的 QPS/Burst 提升到50/100(Kubernetes client 默认值的 10 倍)。原因是该 provider 为符合 Gateway API 规范会密集回写 status,避免 API 限流拖慢新路由配置的构建。可通过kubernetesGateway.qps与kubernetesGateway.burst选项覆盖,见 Kubernetes Gateway Provider 文档。
2. BasicAuth 中间件要求非空 users
从v3.7.3/v3.6.19起,BasicAuth 中间件必须配置非空 users 才能构建成功。此前空配置时中间件构建成功但对任何请求恒返回401;现在构建报错,使用它的 router 会被卸载,同样请求将得到404。源码印证(BasicAuth 构建逻辑):
users, err := getUsers(authConfig.UsersFile, authConfig.Users, basicUserParser) ... if len(users) == 0 { return nil, fmt.Errorf("no users found in %s", authConfig.UsersFile) }3. StripPrefix / StripPrefixRegex 拒绝未规范化路径
同一版本起,当剥离前缀后得到的路径与其规范化形式不一致(含会被规范化折叠的.或..段)时,中间件直接返回400 Bad Request,防止剥离后的路径被上游解释为另一资源(参见 StripPrefix 中间件实现 与 StripPrefixRegex)。以前缀/api为例:
| 请求路径 | 剥离后 | 规范化后 | 结果 |
|---|---|---|---|
/api/foo | /foo | /foo | 200(转发) |
/api/ | / | / | 200(转发) |
/api./foo | /./foo | /foo | 400 |
/api../foo | /../foo | /foo | 400 |
六、v3.7.1 / v3.6.17:crossProviderNamespaces限制跨 provider 引用
v3.7.1(主干)与v3.6.17(维护线)为 Kubernetes CRD、Ingress、Gateway 三个 provider 新增crossProviderNamespaces选项。
背景:Traefik 允许跨 provider 引用资源(如myservice@kubernetescrd),但在 Kubernetes 场景下这类引用可以跨越命名空间边界,甚至暴露本应只有 operator 才能暴露的@internal服务。新选项用于限制哪些命名空间中的资源允许声明跨 provider 引用:
| 取值 | 行为 |
|---|---|
| 未设置 | 所有 Kubernetes 资源都可以声明跨 provider 引用 |
[] | 任何声明跨 provider 引用的 Kubernetes 资源都被拒绝 |
["ns-a"] | 仅列出的命名空间中的资源可以声明跨 provider 引用 |
该选项在三个 provider 中的落地实现可分别在 CRD provider、Ingress provider、Gateway provider 中查看。参数文档见 Kubernetes CRD、Kubernetes Ingress、Kubernetes Gateway。
七、v3.7.0:Ingress NGINX 自定义头、Gateway API v1.5.1 与通配符增强
1. Ingress NGINX Provider 支持custom-headers
v3.7.0起,Ingress NGINX provider 支持nginx.ingress.kubernetes.io/custom-headers注解,向转发给客户端的响应添加自定义头。因此其 RBAC(见 KubernetesIngressNGINX provider RBAC)中新增了configmaps权限:
... - apiGroups: - "" resources: - configmaps verbs: - list - watch ...2. Kubernetes Gateway API Provider 升级到 v1.5.1
v3.7.0起,Gateway API provider 支持规范 v1.5.1,需要更新集群中的 Gateway API CRD:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.1/standard-install.yaml实验通道:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.1/experimental-install.yaml关键变化:TLSRoute已晋升 Standard 通道,不再需要experimentalChannel选项;现在只有TCPRoute需要experimentalChannel。
3. Kubernetes CRD Provider 更新
要使用retry中间件的新选项或新的ingressClassName字段,需更新 CRD:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.7/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml4. 通配符Host/HostSNI与 TLSOptions
- 自
v3.7.0起,Host与HostSNI匹配器支持单层通配符子域名匹配(如*.example.com):*.example.com匹配foo.example.com,但不匹配foo.bar.example.com,也不匹配example.com本身。该能力仅在 v3 规则语法(默认)下可用。 - TLSOptions 现在可以关联到使用通配符
Host/HostSNI匹配器的 router。此前 TLSOptions 选择仅限精确Host匹配,使用HostRegexp或通配符时会回退到默认 TLS options 并产生类似No domain found in rule HostRegexp(...) the TLS option foo cannot be applied的警告。注意:HostRegexp匹配器的 TLSOptions 仍不支持,请改用通配符Host。
八、v3.6.x 各维护版本变更要点
v3.6.16:Docker provider 最低 API 版本
自v3.6.16起,Docker provider 要求 Docker API v1.40 及以上(对应 Docker Engine v19.03)。运行更老(已 EOL)Docker Engine 的用户应升级 Engine,或用DOCKER_API_VERSION环境变量覆盖 Traefik 使用的 API 版本。
v3.6.15:Errors 中间件errorRequestHeaders
新增errorRequestHeaders选项。默认行为不变:原始请求头全部转发给错误页服务;若错误页服务处于不同信任域,建议用它限制可转发的头。详见 Error Pages 文档。
v3.6.14:Chain 中间件遵循allowCrossNamespace;trustForwardHeader弃用
Chain中间件现在遵循 Kubernetes CRD provider 的allowCrossNamespace:若其为false(默认)而Chain引用了其他命名空间的中间件,整个Chain被拒绝并记录错误日志。- ForwardAuth 的
trustForwardHeader被弃用,下个大版本移除。应改为在入口点级用forwardedHeaders.trustedIPs配置可信 IP,并显式将中间件的trustForwardHeader设为true。未显式设置时 Traefik 会记录警告——因为其旧行为不一致:部分X-Forwarded-*头(如X-Forwarded-For、X-Forwarded-Proto)被移除,而另一部分(如X-Forwarded-Prefix)原样转发。参数详见 ForwardAuth 文档。
v3.6.9:ForwardAuthmaxResponseBodySize
新增maxResponseBodySize选项,默认-1(不限)。强烈建议设置为合理值,避免 DoS 与内存耗尽等性能/安全问题。CRD 用户需同步更新 CRD 才能使用:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.6/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml详见 ForwardAuth 文档。
v3.6.8:健康检查路径必须为相对 URL
自v3.6.8起,健康检查请求配置的 path 会被校验必须为相对 URL,否则健康检查失败。
v3.6.7 与 v3.6.4:编码字符默认行为的两段演进
v3.6.4起,Traefik 默认拒绝请求路径中含特定编码字符的请求(返回400 Bad Request):
| 编码字符 | 字符 | 允许该字符的配置项 |
|---|---|---|
%2f/%2F | /(斜杠) | entryPoints.<name>.http.encodedCharacters.allowEncodedSlash |
%5c/%5C | \(反斜杠) | entryPoints.<name>.http.encodedCharacters.allowEncodedBackSlash |
%00 | NULL | entryPoints.<name>.http.encodedCharacters.allowEncodedNullCharacter |
%3b/%3B | ;(分号) | entryPoints.<name>.http.encodedCharacters.allowEncodedSemicolon |
%25 | %(百分号) | entryPoints.<name>.http.encodedCharacters.allowEncodedPercent |
%3f/%3F | ?(问号) | entryPoints.<name>.http.encodedCharacters.allowEncodedQuestionMark |
%23 | #(井号) | entryPoints.<name>.http.encodedCharacters.allowEncodedHash |
v3.6.7起,上述选项的默认值全部翻转为true:即默认不再拒绝,安全加固改为用户自行配置(设为false才能禁用对应字符):
| 编码字符 | 字符 | 配置项 | 默认值 |
|---|---|---|---|
%2f/%2F | / | allowEncodedSlash | true |
%5c/%5C | \ | allowEncodedBackSlash | true |
%00 | NULL | allowEncodedNullCharacter | true |
%3b/%3B | ; | allowEncodedSemicolon | true |
%25 | % | allowEncodedPercent | true |
%3f/%3F | ? | allowEncodedQuestionMark | true |
%23 | # | allowEncodedHash | true |
注意:该校验只作用于按 RFC 3986 第 3 节定义的路径部分,不检查查询参数。相关实现见 encodedCharacters 中间件,参数文档见入口点 encodedCharacters。
v3.6.2:Ingress NGINX Provider 毕业
KubernetesIngressNGINX provider 自 v3.6.2 起不再是实验特性,无需experimental.kubernetesIngressNGINX选项。迁移步骤:
- 从实验段中删除
kubernetesIngressNGINX选项; - 按 kubernetesIngressNGINX Provider 文档 直接配置 provider。
被弃用的旧配置形如:
# YAML experimental: kubernetesIngressNGINX: true# TOML [experimental] kubernetesIngressNGINX=true# CLI --experimental.kubernetesIngressNGINX=true九、v3.6.0:Gateway API v1.4.0 与 leasttime 负载均衡
- Gateway API provider 仅支持规范 v1.4.0,需更新 Gateway API CRD:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/standard-install.yaml # 实验通道: kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/experimental-install.yaml- 要在 CRD provider 中使用新的
leasttime负载均衡算法,需更新 CRD:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.6/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml十、v3.5.x:可观测性与协议变更
v3.5.4:OpenTelemetry 证书指标改名
traefik_tls_certs_not_after_milliseconds改名为traefik_tls_certs_not_after_seconds,使指标名与真实精度单位(秒)一致。
v3.5.2:TCP LoadBalancerproxyProtocol选项弃用
该选项改为在TCPServersTransport级别配置,详见 TCPServersTransport 文档。CRD 用户需更新 CRD:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.5/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.ymlv3.5.0:traceVerbosity与 K8s 资源属性
入口点与 router 新增
traceVerbosity选项控制 tracing span 粒度,router 可覆盖入口点继承值:minimal:每个请求只产生一个 server span 和一个 client span;detailed:为每个执行的中间件额外创建 span。
影响:依赖 tracing 的用户应显式设置期望的 verbosity;既有配置默认落到
minimal,span 数量会比以前少。文档见入口点与动态路由。启用 OTel tracing/logs/metrics 时,自动注入 semconv 属性
k8s.pod.name与k8s.pod.uid到 OTel 资源属性。需要为 Traefik 的 Kubernetes RBAC 增加 pods 的get权限:
... - apiGroups: - "" resources: - pods verbs: - get ...十一、v3.4.x:MPTCP 移除与请求路径规范化
v3.4.5:MultiPath TCP 支持被移除
v3.4.2引入的 MPTCP 支持在v3.4.5被移除,因为在部分平台上启用 MPTCP 会导致 Traefik 停止并报错:
set tcp X.X.X.X:X->X.X.X.X:X: setsockopt: operation not supported
如需重新启用,可通过 Go 的GODEBUG环境变量设置multipathtcp变量(见 Go 官方 GODEBUG 文档)。
v3.4.1:请求路径规范化与保留字符处理
自v3.4.1起,请求路径按 RFC 3986 规范化:
- 非保留字符解码:如
%2E(.)解码为字面形式; - 大小写规范化:百分号编码字符统一大写(
%2e→%2E)。
处理顺序:先路径规范化(不可禁用),后路径净化(若启用)。
同时,保留字符(RFC 3986 2.2 节)在路由匹配期间保持编码状态,避免解码改变路径语义造成路由歧义。行为对照:
| 请求路径 | Router 规则 | Traefik v3.4.0 | Traefik v3.4.1 | 说明 |
|---|---|---|---|---|
/foo%2Fbar | PathPrefix(/foo/bar) | 匹配 | 不匹配 | %2F(/)保持编码,防止误匹配 |
/foo/../bar | PathPrefix(/foo) | 不匹配 | 不匹配 | 路径穿越被净化掉 |
/foo/../bar | PathPrefix(/bar) | 匹配 | 匹配 | 净化后解析为/bar |
/foo/%2E%2E/bar | PathPrefix(/foo) | 匹配 | 不匹配 | 编码点号先规范化再净化 |
/foo/%2E%2E/bar | PathPrefix(/bar) | 不匹配 | 匹配 | 规范化 + 净化后解析为/bar |
十二、v3.3 → v3.4:CRD 负载均衡策略、rootCAs 与规则语法弃用
负载均衡策略更新
v3.4 起 HTTP 服务定义支持新的负载均衡策略,需更新 CRD:
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.4/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml新增策略值:wrr(加权轮询)、p2c(Power of Two Choices)。
弃用警告:
RoundRobin策略已弃用但仍受支持(等价于wrr),将在下一个大版本移除。详见 HTTP 服务负载均衡文档。
rootCAs取代rootCAsSecrets
ServersTransport与ServersTransportTCPCRD 新增rootCAs选项,同时支持 ConfigMap 与 Secret 存放 CA 证书,替代旧的rootCAsSecrets:
# 更新 CRD kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.4/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml # 更新 RBAC kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.4/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml新配置格式:
--- apiVersion: traefik.io/v1alpha1 kind: ServersTransport metadata: name: foo namespace: bar spec: rootCAs: - configMap: ca-config-map - secret: ca-secret --- apiVersion: traefik.io/v1alpha1 kind: ServersTransportTCP metadata: name: foo namespace: bar spec: rootCAs: - configMap: ca-config-map - secret: ca-secret
rootCAsSecrets(仅 Secret)仍受支持但已弃用,将在下个大版本移除。
规则语法选项弃用
以下用于 v2→v3 语法过渡的选项将在下一个大版本移除:
core.defaultRuleSyntax(静态配置);ruleSyntax(router 选项)。
请确保所有 router 规则改用 v3 语法。
十三、v3.3.x:路径净化、压缩与指标
v3.3.6:请求路径净化(sanitizePath)
自v3.3.6起,请求路径在处理前自动净化,折叠以下路径段:/../(父目录引用)、/.//(当前目录引用)、重复斜杠//。可通过入口点 HTTP 配置关闭(不推荐):
# EntryPoint HTTP 配置 entryPoints: web: address: ":80" http: sanitizePath: false # 不推荐危险警告:
sanitizePath: false并不安全,仅建议用于不能正确 URL 编码的遗留客户端;正确做法是保证请求被正确 URL 编码。风险示例:含
/的 Base64 数据在禁用净化且未 URL 编码时可能导致不安全的路由。
v3.3.5:Compress 默认编码顺序
默认压缩算法重排为gzip, br, zstd,优先 gzip。影响未指定Accept-Encoding偏好、或偏好中无顺序的请求,以兼容不支持新算法的旧客户端。
v3.3.4:OpenTelemetry 请求时长指标单位
traefik_(entrypoint|router|service)_request_duration_seconds指标单位从毫秒统一为秒,与其他 provider 及命名规范一致。
十四、v3.2.x 与 v3.2 → v3.3
v3.2 → v3.3:ACME DNS 与 tracing 选项改名
ACME DNS 挑战选项重组:
| 弃用选项 | 新选项 |
|---|---|
acme.dnsChallenge.delaybeforecheck | acme.dnsChallenge.propagation.delayBeforeChecks |
acme.dnsChallenge.disablepropagationcheck | acme.dnsChallenge.propagation.disableChecks |
tracing 配置改名:tracing.globalAttributes→tracing.resourceAttributes(旧名有误导——它实际是给 collector 添加资源属性,而非全局 span 属性)。
v3.2.2:Swarm provider 标签更新
| 弃用标签 | 新标签 |
|---|---|
traefik.docker.network | traefik.swarm.network |
traefik.docker.lbswarm | traefik.swarm.lbswarm |
v3.2.1:X-Forwarded-Prefix头处理收紧
自v3.2.1起,X-Forwarded-Prefix与其他X-Forwarded-*头一致:来自非可信来源时会被 Traefik 移除,防止头伪装。配置见转发头文档。
十五、v3.1 → v3.2:CRD 新字段与 Gateway 通道演进
CRD 新增可选字段(向后兼容)
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v3.3/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml涉及资源:
- TraefikService(
mirrorBody,PR #11032); - RateLimit 与 InFlightReq 中间件的
sourceCriterion.ipStrategy.ipv6Subnet(PR #9747); - Compress 中间件的
encodings(PR #10943)。
Gateway Provider Standard 通道:GRPCRoute
v3.2 起 Gateway provider 支持GRPCRoute资源。需在对应 RBAC(见 KubernetesGateway Provider 要求)中补充grpcroutes与grpcroutes/status权限:
... - apiGroups: - gateway.networking.k8s.io resources: - grpcroutes verbs: - get - list - watch - apiGroups: - gateway.networking.k8s.io resources: - grpcroutes/status verbs: - update ...Gateway Provider Experimental 通道:BackendTLSPolicy
Gateway API v1.2.0-rc1 有破坏性变更,v3.3 仅在启用实验特性时支持 Gateway v1.2.x。新增BackendTLSPolicy支持,RBAC 需补充configmaps、backendtlspolicies与backendtlspolicies/status权限:
... - apiGroups: - "" resources: - configmaps verbs: - get - list - watch - apiGroups: - gateway.networking.k8s.io resources: - backendtlspolicies verbs: - get - list - watch - apiGroups: - gateway.networking.k8s.io resources: - backendtlspolicies/status verbs: - update ...十六、v3.1.0 → v3.1.1:disableIngressClassLookup弃用
disableIngressClassLookup被弃用,下个大版本移除,替换为disableClusterScopeResources——后者对集群级资源发现提供更广的控制,同时覆盖 IngressClass 与 Nodes 资源。
十七、v3.0 → v3.1:EndpointSlices、NodePort 与 Gateway 毕业
Kubernetes Provider RBAC 变更
自 v3.1 起,所有 Kubernetes Provider 使用 EndpointSlices API(要求 Kubernetes >= v1.21)发现服务端点,并引入 NodePort 负载均衡能力。RBAC 需更新:
# 移除这段 # - apiGroups: [""] # resources: ["endpoints"] # verbs: ["get", "list", "watch"] # 替换为 - apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch并新增 nodes 权限以支持 NodePort:
- apiGroups: - "" resources: - nodes verbs: - get - list - watch受影响 provider:KubernetesIngress、KubernetesCRD、KubernetesGateway。
KubernetesGateway Provider 毕业
v3.1 起不再是实验特性,移除experimental.kubernetesgateway选项后按 KubernetesGateway Provider 文档 配置即可。被弃用的旧配置:
# YAML experimental: kubernetesgateway: true# TOML [experimental] kubernetesgateway=true# CLI --experimental.kubernetesgateway=true十八、升级检查清单
- 对齐版本区间:确认当前与目标版本之间的所有小节(如 3.4 → 3.8 需覆盖 v3.4.1、v3.4.5、v3.5.x、v3.6.x、v3.7.x、v3.8.0 全部条目)。
- Kubernetes 环境:先应用对应版本的 CRD 与 RBAC 清单(每节均已给出
kubectl apply -f命令),再滚动升级;核对 EndpointSlices、nodes、configmaps、grpcroutes、backendtlspolicies 等权限是否齐全。 - 路由规则:检查
Host(*)语义变化(v3.7.7)、通配符与 TLSOptions 关联(v3.7.0)、路径规范化/净化行为(v3.4.1、v3.3.6)。 - 中间件:BasicAuth 非空 users(v3.6.19/v3.7.3)、StripPrefix 的 400 行为(同上)、ForwardAuth 的
trustForwardHeader与maxResponseBodySize。 - 安全默认值:按后端类型评估
underscoreHeadersStrategy(v3.6.22/v3.7.6)与encodedCharacters(v3.6.4/v3.6.7)的加固设置。 - 可观测性:更新 Grafana/告警中依赖改名指标(
..._not_after_seconds、..._request_duration_seconds)的查询,并确认traceVerbosity级别。
完成以上核对后,即可在任意两个 v3 版本之间平滑升级。
【免费下载链接】traefikThe Cloud Native Application Proxy项目地址: https://gitcode.com/GitHub_Trending/tr/traefik
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考