2026-09-15 16:32(CST)把 cert-manager 从 v1.20.2 升到 v1.21.1,Helm rev 5 → 6。只动这一份 release。当时 cert-manager-webhook-dnspod 仍是 1.5.2 / rev 4。同日 16:40 才单独升 webhook,见 DNSPod webhook 1.5.2 升到 1.5.3。
这趟吃 GHSA-8rvj-mm4h-c258(1.20.3 / 1.21 已修:有 edit 的人不能再手造 Challenge 套走 ClusterIssuer 的 DNS 凭据)。不必先停 1.20.3。Traefik 当天下午已经升过 3.7.13,错开窗口。签发链本身见 cert-manager 怎么接 DNSPod。
目录
- 要解决什么
- 升之前
- 覆盖是增量,values.yaml 跟上游走
- 本地 chart 从 OCI 换
- 不要 –reuse-values
- CRD 跟 helm 走
- 2026-09-15 下午(CST)
- 升完日志里那两声
要解决什么
读者读完应能分清:
- 两个 helm release。 升 cert-manager 不要顺手 upgrade DNSPod webhook。ClusterIssuer 是 webhook chart 渲的。
- 覆盖只写改过的键。
cert-manager.yaml是增量,不是整份values.yaml拷贝。换包时覆盖留下。 --reuse-values这轮不能用。 旧 dump 带着 1.21 schema 会拒的servicemonitor.targetPort/path。- 镜像走 Harbor quay 代理,不必预推。 滚动时节点再拉。CRD 在 chart templates 里,不用像 Traefik 先
kubectl apply crds/。
不要把这篇当成 helm upgrade cert-manager jetstack/cert-manager 教程。上游 README 会写;现网要记住的是两份 chart、增量覆盖、不要 reuse-values。
升之前
release 名叫 cert-manager,命名空间 cert-manager。控制器 / admission webhook / cainjector 都是 1 副本,PDB 关着。镜像走 Harbor:harbor.cyxc.club/quay/jetstack/...。
helm history(CST):
| rev | 何时 | chart | 说明 |
|---|---|---|---|
| 1 | 06-04 13:29 | v1.20.2 | 装上 |
| 2–4 | 09-01 / 09-02 | 仍是 v1.20.2 | 裸机前后 |
| 5 | 09-04 15:07 | 仍是 v1.20.2 | 换裸机后原样 upgrade,版本没动 |
| 6 | 09-15 16:32 | v1.21.1 | 这趟 |
09-04 那次不要写成已经吃过 1.21.1。webhook 从 06-04 起就是 1.5.2,09-04 只是 rev 4 原样 upgrade。
覆盖是增量,values.yaml 跟上游走
升之前把改过的键从 values.yaml 拆到 cert-manager.yaml,values.yaml 还原成上游原件。覆盖只三处:
imageRegistry: harbor.cyxc.club/quaycrds.enabled: true(keep仍用上游的 true)- AliDNS 自检:
223.5.5.5:53,223.6.6.6:53,dns01RecursiveNameserversOnly: true(绕开 k8s-gateway 劫持;不要加 DNSPod 递归)
helm -f 深合并。没写的键跟新 chart 默认走。
本地 chart 从 OCI 换
包在 /root/helm-chart/cert-manager。
helm pull oci://quay.io/jetstack/charts/cert-manager --version v1.21.1digest sha256:15c0b46d9006ce8eb9ff14d1bf54d1bbfcc587bb9e24cd9fe186fb8fec56af1f。Chart.yaml:version: v1.21.1,appVersion: v1.21.1。
换包时 --exclude cert-manager.yaml。旧 1.20.2 当时备份在 /tmp/cert-manager-v1.20.2,不进 Git。
不要 –reuse-values
现网 helm dump 里曾经整份写过 prometheus.servicemonitor.targetPort / path。1.21 schema additionalProperties: false,带上就 UPGRADE FAILED。
覆盖是增量,不用 --reuse-values,这三键不会进来。--reuse-values 会把旧 dump 钉死,新字段也进不来。
dry-run 渲出来的镜像是 harbor.cyxc.club/quay/jetstack/cert-manager-*:v1.21.1,AliDNS 参数还在,才正式 upgrade。
CRD 跟 helm 走
cert-manager 的 CRD 在 chart templates/,crds.enabled: true。Helm 这次会更新它们。不要学 Traefik 再 kubectl apply --server-side 一份 crds/。installCRDs 仍是 false。不要 helm uninstall。
2026-09-15 下午(CST)
| 时间 | 发生了什么 |
|---|---|
| 覆盖 | values.yaml 还原上游;cert-manager.yaml 三键 |
| 换包 | 本地 chart v1.21.1,覆盖还在 |
| 16:32 | helm rev 6,--wait 约 36 秒;三个 Deployment 报 v1.21.1 |
upgrade:
helm upgrade cert-manager /root/helm-chart/cert-manager \ -n cert-manager \ -f /root/helm-chart/cert-manager/cert-manager.yaml \ --wait --timeout 10m镜像滚动时经 Harbor 代理拉,没有预推。webhook Pod 没动(11 天前的那只)。ClusterIssuer dnspod 仍 Ready=True / ACMEAccountRegistered。APIService v1alpha1.acme.dnspod.com 还在。24 张 Certificate 全 Ready=True。抽查 ceph-objectstore-tls / ceph-dashboard-tls 还在。最近续期窗口在 10 月初,没有为这趟新开 Challenge。
USER-SUPPLIED VALUES 只剩覆盖那三处。
升完日志里那两声
控制器起来那几秒有 ACME client for issuer not initialised/available,leader 还没把账号客户端建好,随后 dnspod 已 Ready。不要当成签发链断了。
GitLab 命名空间里还有 Issuer gitlab-issuer-gw,联系邮箱是 example.com,Let’s Encrypt 直接 400。这不是这趟引入的,现网对外证不走它。