Kubernetes执行kubectl get certificate报x509未知授权签名错误如何解决
问题原因
这个报错是Kubernetes APIServer无法验证cert-manager转换webhook的服务证书导致,核心问题为webhook CA证书不匹配,常见触发场景如下:
- cert-manager升级操作后,旧版本转换webhook配置残留的CA根证书,和当前webhook实际加载的CA证书不一致
- 手动删除过cert-manager-webhook-ca Secret后,新生成的CA没有同步更新到APIService、MutatingWebhookConfiguration、ValidatingWebhookConfiguration资源的CA字段
- 当前集群中还存在v1alpha2版本的Certificate旧API资源,该API对应cert-manager v0.11及更早版本,若后续升级过cert-manager未同步迁移旧API资源,也会触发转换webhook校验失败
解决方案
通用修复步骤(适配所有cert-manager版本)
- 第一步:清除残留的webhook配置资源
kubectl delete mutatingwebhookconfiguration cert-manager-webhook kubectl delete validatingwebhookconfiguration cert-manager-webhook kubectl delete apiservice v1beta1.webhook.cert-manager.io
- 第二步:重建webhook CA Secret
首先备份现有CA Secret,删除后等待cert-manager控制器自动生成新的CA证书:
# 备份现有CA配置 kubectl get secret cert-manager-webhook-ca -n cert-manager -o yaml > webhook-ca-backup.yaml # 删除旧CA Secret kubectl delete secret cert-manager-webhook-ca -n cert-manager
- 第三步:重启cert-manager所有组件,触发CA同步
kubectl rollout restart deployment cert-manager -n cert-manager kubectl rollout restart deployment cert-manager-webhook -n cert-manager kubectl rollout restart deployment cert-manager-cainjector -n cert-manager
- 第四步:验证修复效果
等待所有Pod恢复Running状态后,执行kubectl get certificate确认报错是否消失。
旧API版本适配
若你使用的cert-manager为v1.0+版本,需同步迁移所有旧版本API资源:
执行kubectl get certificates.v1alpha2.cert-manager.io -A列出所有v1alpha2版本的证书资源,导出后将apiVersion修改为cert-manager.io/v1重新提交即可,避免强制走转换webhook逻辑。
内容的提问来源于stack exchange,提问作者Hunzla Ali
相关产品推荐
相关产品推荐

