跳到正文
cyxc.club

cert-manager 1.20.2 升到 1.21.1

/ 约 4 分钟

更新于

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

目录


要解决什么

读者读完应能分清:

  1. 两个 helm release。 升 cert-manager 不要顺手 upgrade DNSPod webhook。ClusterIssuer 是 webhook chart 渲的。
  2. 覆盖只写改过的键。 cert-manager.yaml 是增量,不是整份 values.yaml 拷贝。换包时覆盖留下。
  3. --reuse-values 这轮不能用。 旧 dump 带着 1.21 schema 会拒的 servicemonitor.targetPort / path
  4. 镜像走 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.yamlvalues.yaml 还原成上游原件。覆盖只三处:

  • imageRegistry: harbor.cyxc.club/quay
  • crds.enabled: truekeep 仍用上游的 true)
  • AliDNS 自检:223.5.5.5:53,223.6.6.6:53dns01RecursiveNameserversOnly: 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.1

digest sha256:15c0b46d9006ce8eb9ff14d1bf54d1bbfcc587bb9e24cd9fe186fb8fec56af1fChart.yamlversion: v1.21.1appVersion: 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:

Terminal window
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 dnspodReady=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。这不是这趟引入的,现网对外证不走它。