Cert-manager结合Cilium Gateway申请Let's Encrypt证书报404错误求助
排查Cert-Manager + Cilium Gateway HTTP-01挑战404问题
针对你遇到的Let's Encrypt HTTP-01挑战返回404的问题,结合你的配置,以下是几个核心排查方向:
1. ClusterIssuer未指定正确的Gateway监听器
你的ClusterIssuer中HTTP-01求解器的gatewayHTTPRoute.parentRefs仅指定了Gateway名称,但未明确关联到80端口的HTTP监听器(sectionName)。Cilium Gateway可能无法正确识别要将挑战路由绑定到哪个监听器,导致请求无法转发到挑战Pod。
修复方法:在ClusterIssuer的parentRefs中添加sectionName: "http":
solvers: - http01: gatewayHTTPRoute: parentRefs: - name: gateway namespace: default kind: Gateway sectionName: "http" # 新增这一行,指定80端口的监听器
2. 集群外部80端口未正确暴露
Let's Encrypt的挑战服务器需要从公网访问你的域名的80端口,检查以下几点:
- 确认Cilium Gateway的HTTP监听器(80端口)已获取到有效的公网IP(通过
kubectl get gateway gateway -n default查看ADDRESS字段) - 验证域名
www.mypage.com已正确解析到该公网IP - 检查集群防火墙/云服务商安全组是否放行80端口的入站流量
3. 临时挑战路由的有效性验证
Cert-Manager会在cert-manager命名空间下创建临时的HTTPRoute和Pod用于挑战,你可以手动验证这些资源是否正常:
- 查看当前的挑战资源:
kubectl get challenges -A - 找到对应挑战的临时HTTPRoute:
kubectl get httproutes -n cert-manager,检查其parentRefs是否正确指向你的Gateway的HTTP监听器 - 在集群内部测试访问挑战路径:
如果返回404,说明临时路由未生效,需检查Cilium是否正确同步了该HTTPRoute。# 替换成实际的token和域名 curl http://www.mypage.com/.well-known/acme-challenge/<your-challenge-token>
4. 版本兼容性问题
确保你的组件版本满足最低兼容要求:
- Cert-Manager版本 ≥ v1.8(支持Gateway API的HTTP-01求解器)
- Cilium版本 ≥ v1.12(稳定支持Gateway API v1)
如果版本过低,升级到兼容版本后重试。
5. 路由规则冲突
检查是否有其他HTTPRoute绑定到了Gateway的80端口,比如存在强制将80端口请求重定向到443的规则。这类重定向会导致Let's Encrypt的挑战请求返回3xx状态码,被Cert-Manager判定为失败。你可以通过kubectl get httproutes -A查看所有路由,确认没有干扰挑战的规则。
内容的提问来源于stack exchange,提问作者matined
相关产品推荐
相关产品推荐

