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

DigitalOcean Kubernetes集群cert-manager HTTP-01挑战自检失败求助

问题解决方案

你遇到的报错本质是cert-manager在集群内部发起的自检查请求无法正常访问挑战路径,公网访问正常的核心原因大多是集群内部DNS解析异常、请求路径被重写、代理协议配置不匹配三类,对应解决方案如下:

  • 配置cert-manager使用公网DNS进行自检查
    绝大多数该类报错是集群内部CoreDNS无法正确解析你的域名到DigitalOcean负载均衡的公网IP导致,修改cert-manager的Deployment配置,添加启动参数指定公网DNS服务器:
    args:
    - --v=2
    - --cluster-resource-namespace=$(POD_NAMESPACE)
    - --leader-election-namespace=kube-system
    # 新增以下两行配置
    - --dns01-self-check-nameservers=8.8.8.8:53
    - --dns01-self-check-nameservers=1.1.1.1:53
    
    修改后等待cert-manager Pod重启完成,重新触发证书签发即可。
  • 移除不必要的rewrite-target注解
    你当前在Ingress上配置的nginx.ingress.kubernetes.io/rewrite-target: /注解会将所有请求路径重写到根路径,会导致cert-manager自动生成的/.well-known/acme-challenge/开头的挑战路径无法被正确匹配。请将该注解仅配置到你的业务路由规则对应的Ingress上,不要全局配置,也不要应用到cert-manager自动创建的挑战Ingress资源。
  • 确认Nginx Ingress代理协议配置对齐
    你已经在LoadBalancer Service上开启了代理协议支持,请同步检查ingress-nginx命名空间下的nginx-configuration ConfigMap,确保存在以下配置:
    data:
      use-proxy-protocol: "true"
    
    避免负载均衡转发的带代理协议头的请求被Nginx Ingress拦截返回400错误。
  • 应急跳过自检查(不推荐长期使用)
    如果你已经确认公网访问挑战URL完全正常,可以给你使用的letsencrypt-prod ClusterIssuer添加注解直接跳过自检查环节:
    metadata:
      annotations:
        cert-manager.io/skip-http-01-self-check: "true"
    
    修改后重新触发证书签发,cert-manager会直接提交校验请求到Let's Encrypt,不再进行集群内部自检查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:36:03