You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes cert-manager创建证书时challenge资源挂起无事件无状态问题

问题成因
  • 资源乐观锁冲突:日志中明确抛出Operation cannot be fulfilled错误,是cert-manager多个控制器协程同时修改Certificate、CertificateRequest对象,触发Kubernetes资源版本校验失败,任务反复入队重试,导致流程无法推进到HTTP-01挑战的临时Ingress创建步骤
  • RBAC权限缺失:cert-manager控制器没有在业务命名空间下创建Ingress、Service、Pod资源的权限,挑战初始化逻辑执行失败但未输出对应错误日志
  • IngressClass配置不匹配:集群中实际运行的NGINX Ingress Controller的class名称和ClusterIssuer中配置的nginx不一致,控制器无法匹配到可用的Ingress实现,直接跳过挑战资源处理
解决方案

1. 重置卡住的证书签发流程

删除当前异常的相关资源,清空冲突队列:

# 删除异常证书、挑战、订单资源
kubectl delete cert -n citizen-capital citizen-capital-preprod-tls
kubectl delete challenge -n citizen-capital citizen-capital-preprod-tls-7dnxx-3938188414-701554649
kubectl delete order -n citizen-capital citizen-capital-preprod-tls-7dnxx-3938188414
# 重启cert-manager控制器清空内部任务队列
kubectl rollout restart deployment -n cert-manager cert-manager

2. 校验cert-manager RBAC权限

确认cert-manager控制器拥有创建挑战相关资源的权限:

kubectl describe clusterrole cert-manager-controller | grep -A10 "Rules:" | grep -E "ingresses|services|pods"

如果输出中没有对应资源的create权限,重新安装对应版本的cert-manager官方RBAC配置即可修复。

3. 校验IngressClass配置

查询集群中实际存在的IngressClass:

kubectl get ingressclass

如果实际的NGINX IngressClass名称不是nginx,有两种修复方式:

  • 修改ClusterIssuer letsencrypt-prod的solver.http01.ingress.class配置为实际的IngressClass名称
  • 给现有NGINX Ingress Controller添加注解ingressclass.kubernetes.io/is-default-class: "true",设置为默认IngressClass

4. 重新触发证书签发

重新应用Certificate资源,等待2分钟后验证资源状态:

# 查看挑战资源状态
kubectl get challenges -n citizen-capital
# 查看是否生成临时HTTP-01验证Ingress
kubectl get ingress -n citizen-capital

可选:开启debug日志排查

如果以上操作后问题仍然存在,修改cert-manager deployment的启动参数,添加-v=5开启debug级别日志,可输出更详细的执行错误信息用于定位。


内容的提问来源于stack exchange,提问作者Martin Paucot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:06:05