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

如何调试certmanager报错收到错误HTTP响应的问题

如何调试cert-manager报错收到错误HTTP响应的问题

首先,咱们得先搞清楚Let's Encrypt到底在请求哪个URL——这是定位问题的关键。你提到的日志片段只显示了开头,咱们可以先把cert-manager的完整日志拉出来看看:

kubectl logs -n cert-manager -l app=cert-manager --tail=200

在日志里找包含http-01或者challenges的行,里面会明确写出挑战请求的路径,格式大概是/.well-known/acme-challenge/[一串随机字符],把这个路径拼上你的新站点域名,就是Let's Encrypt在访问的完整URL了(比如http://your-new-domain.com/.well-known/acme-challenge/abc123)。

接下来,手动测试这个URL,看看返回的到底是什么HTML:

curl -v http://your-new-domain.com/.well-known/acme-challenge/abc123

这一步能帮你判断是哪个服务在返回这个响应——是你的业务应用?还是某个配置错了的Ingress?或者cert-manager的挑战pod根本没收到请求?

然后,咱们来检查cert-manager的挑战资源状态:

  1. 先列出所有挑战:
kubectl get challenges -A

找到对应你新站点证书的那条记录,记下它的名字和命名空间。

  1. 查看这个挑战的详细信息:
kubectl describe challenge <挑战名称> -n <命名空间>

重点看Events部分,有没有提示挑战pod创建失败?或者Ingress规则没生效?这能帮你快速定位是资源创建的问题,还是网络转发的问题。

接下来检查Ingress相关的配置:

  • cert-manager会自动创建临时Ingress来处理http-01挑战,你可以用kubectl get ingress -A找到这些临时Ingress(名字一般带cm-acme-http-solver前缀),看看它们的规则是不是正确指向了挑战pod。
  • 对比你的新站点业务Ingress和老站点的Ingress配置,有没有什么差异?比如新Ingress是不是加了nginx.ingress.kubernetes.io/rewrite-target这类注解,把/.well-known/路径也重写到你的应用里了?或者新Ingress的主机规则写得太宽泛,覆盖了cert-manager的临时Ingress?

最后,排查网络层面的问题:

  • 确认你的新站点域名解析是正确的,A记录指向的IP和老站点一致吗?
  • 检查集群的防火墙/端口转发设置,80端口是不是正常对外开放?Let's Encrypt的服务器需要能访问到你的80端口才能完成http-01挑战。
  • 如果是本地集群,有没有做正确的端口映射,把外部80端口转发到集群内部的Ingress控制器?

举个常见的坑:如果手动curl挑战URL返回的是你的应用首页,那大概率是你的业务Ingress规则优先级比cert-manager的临时Ingress高,导致请求被转发到了应用而不是挑战pod。这时候可以调整Ingress的spec.rules匹配规则,或者检查IngressClass的配置,确保cert-manager的临时Ingress能优先匹配挑战请求。

备注:内容来源于stack exchange,提问作者Daniel Quinn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:33:00