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

cert-manager无法创建Secret证书存储异常求助

排查与解决cert-manager HTTP-01挑战404及证书签发失败问题

核心问题定位

当前症状指向HTTP-01挑战路由失效,导致cert-manager无法完成域名验证,进而无法生成并存储最终证书。以下是针对性排查与修复步骤:

1. 核对cert-manager与Traefik的IngressClass匹配

  • 检查Issuer/ClusterIssuer的HTTP-01 solver配置,确保指定的IngressClass与Traefik使用的一致:
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-prod
    spec:
      acme:
        # ...其他配置
        solvers:
        - http01:
            ingress:
              class: traefik  # 此处需与Traefik的IngressClass名称完全匹配
    
  • 验证Traefik的IngressClass状态:
    kubectl get ingressclass
    
    若未显式指定IngressClass,需确认Traefik已配置默认IngressClass,且cert-manager solver中对应配置正确。

2. 检查临时挑战Ingress的有效性

cert-manager会为每个验证请求生成临时Ingress,查看其配置与状态:

kubectl get ingress -n cert-manager
kubectl describe ingress <挑战Ingress名称> -n cert-manager
  • 确认spec.rules中包含/.well-known/acme-challenge/<token>路径,且后端指向正确的挑战Pod Service。
  • 查看Traefik日志或控制台,确认该Ingress的路由规则已被加载。

3. 验证挑战Pod的响应能力

  • 检查挑战Pod是否正常运行:
    kubectl get pods -n cert-manager -l app=cert-manager,component=challenges
    
  • 用集群内测试Pod直接访问挑战Service,确认返回正确的验证内容:
    kubectl run -it --rm test-pod --image=busybox:wget
    wget http://<挑战Service名称>.cert-manager.svc.cluster.local/.well-known/acme-challenge/<token>
    
    若返回404,查看挑战组件日志定位问题:
    kubectl logs -n cert-manager -l app=cert-manager,component=challenges
    

4. 排查Traefik的路由拦截规则

  • 若Traefik全局配置了强制HTTPS重定向,需确保/.well-known/acme-challenge/路径被排除,避免HTTP请求被强制重定向到HTTPS导致验证失败。
  • 检查目标域名的主Ingress是否拦截了/.well-known/acme-challenge/路径,需保证挑战Ingress的优先级更高,或主Ingress不对该路径做特殊处理。

5. 集群网络与端口验证

  • 升级Digital Ocean集群后,确认节点防火墙允许80端口的入站流量(HTTP-01挑战依赖80端口)。
  • 检查集群网络插件(如Calico、Flannel)状态,确保Pod与Service之间通信正常。

6. 版本兼容性与重置尝试

  • 确认cert-manager 1.9.1与当前Kubernetes集群版本兼容(参考官方版本支持矩阵)。
  • 若升级后存在资源残留,尝试重新部署cert-manager:
    kubectl delete -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
    

快速修复尝试

  1. 删除pending状态的CertificateRequest和Certificate,触发重新签发流程:
    kubectl delete certificaterequest <CR名称>
    kubectl delete certificate <证书名称>
    
  2. 临时禁用目标域名主Ingress的TLS配置,待证书签发完成后再重新启用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:35:24