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

Kubernetes中Cert-Manager HTTP-01挑战返回404错误求助

排查Cert-Manager HTTP-01挑战404/308问题的步骤

1. 检查Ingress的HTTPS重定向配置

  • 查看Nginx Ingress全局配置,确认是否开启强制HTTPS重定向(ssl-redirect: true)。如果开启,ACME的HTTP-01请求会被308重定向到HTTPS,但挑战路径在HTTPS下未正确配置就会导致404。
  • 给Kuard的Ingress添加注解nginx.ingress.kubernetes.io/ssl-redirect: "false",临时关闭该Ingress的HTTPS重定向,测试是否解决挑战失败问题。

2. 验证ACME自动生成的挑战Ingress

  • 执行kubectl get ingress,找到名称包含cm-acme-http-solver的Ingress资源:
    • 确认其spec.rules中的域名和路径(/.well-known/acme-challenge/<token>)与挑战要求一致;
    • 检查spec.rules.http.paths[0].backend.service.name是否指向对应的ACME solver服务。
  • 查看该挑战Ingress的注解,排除冲突的Nginx配置(比如路径重写、IP白名单限制等)。

3. 分析Nginx Ingress Controller日志

  • 执行kubectl logs -n <ingress-namespace> <nginx-ingress-controller-pod>,搜索/.well-known/acme-challenge关键词:
    • 确认请求是否成功到达Ingress Controller;
    • 查看返回308/404的具体原因,比如是否匹配到错误的Ingress规则,或后端服务转发失败。

4. 确认Metallb与Ingress的网络关联

  • 执行kubectl get svc -n <ingress-namespace>,检查Nginx Ingress Service的类型为LoadBalancer,且已分配Metallb提供的外部IP;
  • 验证DNS解析的域名是否指向该外部IP,避免DNS配置错误导致请求流向异常。

5. 检查ACME挑战Pod状态

  • 执行kubectl get pods -n cert-manager,确认名称包含cm-acme-http-solver的Pod处于Running状态;
  • 执行kubectl describe pod <solver-pod-name> -n cert-manager,排查是否有启动失败、资源不足或网络策略限制等问题。

6. 测试挑战路径的可达性

  • 从集群内部节点,执行curl http://<nginx-ingress-cluster-ip>/.well-known/acme-challenge/<token> -H "Host: <your-domain>",验证是否返回200及正确令牌;
  • 从集群外部,直接curl外部IP的挑战路径:curl http://<external-ip>/.well-known/acme-challenge/<token>,对比DNS访问的结果,定位是DNS、路由还是Ingress配置问题。

7. 检查Helm安装的Nginx Ingress自定义配置

  • 执行helm get values <nginx-ingress-release-name> -n <ingress-namespace>,查看是否存在全局路径重写、自定义注解等可能干扰ACME挑战路径匹配的配置;
  • 确认是否启用enable-ssl-passthrough等可能影响HTTP请求处理的选项,这类配置可能导致挑战请求无法正确转发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:55:48