DigitalOcean Kubernetes集群cert-manager HTTP-01挑战自检失败求助
问题解决方案
你遇到的报错本质是cert-manager在集群内部发起的自检查请求无法正常访问挑战路径,公网访问正常的核心原因大多是集群内部DNS解析异常、请求路径被重写、代理协议配置不匹配三类,对应解决方案如下:
- 配置cert-manager使用公网DNS进行自检查
绝大多数该类报错是集群内部CoreDNS无法正确解析你的域名到DigitalOcean负载均衡的公网IP导致,修改cert-manager的Deployment配置,添加启动参数指定公网DNS服务器:
修改后等待cert-manager Pod重启完成,重新触发证书签发即可。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 - 移除不必要的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-configurationConfigMap,确保存在以下配置:
避免负载均衡转发的带代理协议头的请求被Nginx Ingress拦截返回400错误。data: use-proxy-protocol: "true" - 应急跳过自检查(不推荐长期使用)
如果你已经确认公网访问挑战URL完全正常,可以给你使用的letsencrypt-prodClusterIssuer添加注解直接跳过自检查环节:
修改后重新触发证书签发,cert-manager会直接提交校验请求到Let's Encrypt,不再进行集群内部自检查。metadata: annotations: cert-manager.io/skip-http-01-self-check: "true"
内容的提问来源于stack exchange,提问作者agusgambina
相关产品推荐
相关产品推荐

