公网 80/443 走 Traefik。2026-09-15 下午把 proxy 从 v3.7.11 升到 v3.7.13,Helm chart 41.3.0 → 41.5.0。这是同 minor 补丁,不是换入口,也不是上 HTTP/3、Hub、v4。
3.7.13 修了 HTTP trailer 绕过 forwardedHeaders / 头清洗。现网 web / websecure 信任 CDN 和 WAF 送来的 X-Forwarded-*,这正是要吃这档的原因。不要把洞号和网段写进对外稿。
入口怎么站住、chart 35 怎么跳到 41,是另一篇。这篇只写 09-15 这一趟:本地 chart 怎么换、Helm 哪一步不会做、覆盖文件哪个键会把 upgrade 挡死。签发链见 cert-manager 怎么接 DNSPod。同日 16:32 才升 cert-manager,见 cert-manager 1.20.2 升到 1.21.1。不要和 cert-manager 同一分钟滚。
目录
- 要解决什么
- 升之前
- 本地 chart 从 OCI 换,不走 GitHub Pages
- 覆盖文件多一个键,schema 就失败
- CRD 必须单独 apply
- Harbor 三台都有镜像再 helm
- 2026-09-15 下午(CST)
- 升完那条 header 警告
要解决什么
读者读完应能分清:
- 只换镜像 tag 不够。 41.4 才有
aliasHeadersStrategy;41.5 才默认 3.7.13。现网用本地 chart +-f traefik.yaml。 - Helm 不会更新
crds/。 必须先kubectl apply --server-side,再helm upgrade。 - 覆盖文件里多出来的键会被 schema 拒。 YAML 锚点如果写成顶层字段,chart 不认识就 UPGRADE FAILED。IP 列表本身可以不动。
- 公网入口两个口才要设
aliasHeadersStrategy: delete。 内部metrics/traefik的警告可以留。SafeNaming不要改成 true。
不要把这篇当成 helm upgrade traefik traefik/traefik 教程。上游 README 会写;现网要记住的是本地包、覆盖文件、CRD、Harbor。
升之前
release 名叫 traefik,命名空间 traefik。2 副本,RollingUpdate:maxUnavailable: 0、maxSurge: 1。镜像走 Harbor:harbor.cyxc.club/dockerhub/library/traefik,image.tag 空着,跟 chart appVersion。
helm history(CST):
| rev | 何时 | chart / proxy | 说明 |
|---|---|---|---|
| 4–7 | 05-24 — 06-24 | 35.0.0 / v3.3.5 | 最早还在 history 里的 |
| 8–11 | 06-25 | 41.0.0 / v3.7.5 | 跨到 3.7 |
| 12 | 08-23 | 41.3.0 / v3.7.11 | 跟 1.33 那天不是同一趟 |
| 13 | 09-04 | 仍是 41.3.0 / v3.7.11 | 换裸机后原样 upgrade,版本没动 |
| 14 | 09-15 15:43 | 41.5.0 / v3.7.13 | 这趟 |
| 15 | 09-15 15:52 | 同上 | 只加 aliasHeadersStrategy: delete |
09-04 那次不要写成已经吃过 3.7.13。
覆盖一律 -f /root/helm-chart/traefik/traefik.yaml:Harbor 前缀、CDN/WAF trustedIPs、读写超时 600s、replicas: 2、strictTLSOptions: true。不要用上游 values.yaml 盖掉。HTTP/3 关着。Gateway API provider 关着。
本地 chart 从 OCI 换,不走 GitHub Pages
包在 /root/helm-chart/traefik。先把 traefik.yaml 拷走,再换目录里的 chart 文件。
helm repo add traefik https://traefik.github.io/charts 能加上,helm repo update traefik 卡住。实际拉的是 OCI:
helm pull oci://ghcr.io/traefik/helm/traefik --version 41.5.0digest sha256:e568633d52b1136b1040715b65c0596ece6ea16344d442ceb741b68c4f239e46。Chart.yaml:version: 41.5.0,appVersion: v3.7.13。
换包时 --exclude traefik.yaml。旧 41.3.0 当时备份在 /tmp,不进 Git。
覆盖文件多一个键,schema 就失败
traefik.yaml 里 CDN/WAF 网段用 YAML 锚点复用到 web 和 websecure。41.3.0 那份写成了顶层键 entrypointTrustedIPs。chart 模板不读这个字段,注释也写了「仅作锚点」。
41.5.0 的 schema 不允许额外顶层键。dry-run:
Error: UPGRADE FAILED: values don't meet the specifications of the schema(s)- at '': additional properties 'entrypointTrustedIPs' not allowed处理:把锚点挂到 ports.web.forwardedHeaders.trustedIPs,websecure 继续 *entrypointTrustedIPs。201 条和改之前逐条相同。不要 --disable-openapi-validation 混过去,下次还会撞。
--reuse-values 这轮不能用:会把旧 chart 默认值钉死,新字段进不来。
CRD 必须单独 apply
官方 chart 把 CRD 放在 crds/。Helm 升级 不会改它们。Gateway API 现网关着,不必跟官方文档再 apply 一份 Gateway CRD。
kubectl apply --server-side --force-conflicts -f /root/helm-chart/traefik/crds/25 份成功。集群里还留着 2025-04-10 的 Hub CRD apiaccesses.hub.traefik.io,新包已经不带,0 条对象、已 deprecated。现网没用 Hub,后来删了这条 CRD。
Harbor 三台都有镜像再 helm
镜像 dockerhub/library/traefik:v3.7.13(代理仓 dockerhub)。节点上 crictl 在 /opt/kube/bin。三台都拉到 sha256:88d3f28a… 再 upgrade。其中一台第一次对 Harbor TLS handshake timeout,curl 当时是通的,重试就有了。不要让滚动更新卡在拉层。
2026-09-15 下午(CST)
| 时间 | 发生了什么 |
|---|---|
| 换包 | 本地 chart 41.5.0,覆盖文件还在 |
| 拉镜像 | 三台都有 v3.7.13 |
| 升 CRD | server-side apply crds/ |
| 15:43 | helm rev 14,--wait 约 30 秒;两个 Pod 报 Version: 3.7.13 |
| 15:52 | helm rev 15,只加 aliasHeadersStrategy: delete |
upgrade:
helm upgrade traefik /root/helm-chart/traefik \ -n traefik \ -f /root/helm-chart/traefik/traefik.yaml \ --wait --timeout 5mLB 还是 MetalLB 那张。滚动时新副本有过一次 readiness /ping timeout,随后 BGP 改宣告节点。抽查 443:Harbor、GitLab、云平台控制台通。对象站经 Traefik LB 是 RGW;经 CDN 看到的证书不要当成 Traefik 签坏了。
升完那条 header 警告
3.7.12 起,未配 aliasHeadersStrategy 会 WRN:X_Auth_User / X.Auth.User 这种别名头原样转发,后端可能当成 X-Auth-User。rev 14 升完,公网两个口都在报。
rev 15 只改覆盖文件两处,都是 delete:
ports.web.http.aliasHeadersStrategyports.websecure.http.aliasHeadersStrategy
underscoreHeadersStrategy 留空,不要赋值。参数是:
--entryPoints.web.http.aliasHeadersStrategy=delete--entryPoints.websecure.http.aliasHeadersStrategy=delete之后 web / websecure 这条 WRN 没了。还在的启动警告:
| 日志 | 现网怎么处理 |
|---|---|
aliasHeadersStrategy 未配,metrics / traefik |
内部口,不对外,不动 |
| encoded characters 默认会拒部分编码路径 | 现网没靠违规编码,不改 encodedCharacters |
SafeNaming 没显式设置 |
不要改成 true。现网 IngressRoute 走旧命名,打开可能撞名。要消警告只能显式 false |
没有 ERR。