Azure AKS中Cert-Manager证书有效但浏览器显示伪造证书问题
Kubernetes Cert-Manager 显示有效证书但浏览器返回“Fake Certificate”+ Nginx 404 排查方案
先解答你的疑问:Challenges资源未找到是正常情况
Order状态为valid说明ACME域名验证已完成,Challenges是cert-manager生成的临时资源,验证通过后会被自动清理,因此执行kubectl get challenges --all-namespaces无结果属于正常现象。
核心问题排查:证书状态正常但Ingress返回假证书
1. 检查Ingress与Secret的关联配置
- 确认Ingress的TLS段是否正确指定了目标Secret,且Ingress与Secret处于同一命名空间(ingress-nginx默认不支持跨命名空间引用TLS Secret):
重点核对:kubectl get ingress <你的Ingress名称> -n <Ingress所在命名空间> -o yamltls[].secretName是否为gap命名空间的tls-secret- 注解
cert-manager.io/cluster-issuer: "letsencrypt-prod"是否存在且正确
2. 验证Secret中的证书有效性
- 检查证书的域名、有效期是否符合预期:
kubectl get secret tls-secret -n gap -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -text - 验证私钥格式是否正确:
kubectl get secret tls-secret -n gap -o jsonpath='{.data.tls\.key}' | base64 -d | openssl rsa -check
3. 检查Ingress-Nginx Controller的日志与加载状态
- 查看controller pod日志,确认是否存在加载
tls-secret的错误(如权限不足、Secret不存在等):kubectl logs -n ingress-nginx <controller-pod名称> | grep tls-secret - 确认controller已正确生成对应域名的SSL配置:
kubectl exec -n ingress-nginx <controller-pod名称> -- nginx -T | grep my.app.com
4. 排查Cert-Manager升级后的兼容性问题
你从v0.16.1升级至v1.9.1,需注意:
- 旧版注解
kubernetes.io/tls-acme: "true"与新版cert-manager.io/cluster-issuer可能存在冲突,建议仅保留后者 - 确认cert-manager的webhook组件正常运行(v1.x版本依赖webhook验证资源):
kubectl get pods -n cert-manager | grep webhook
附加问题:curl返回Nginx默认404页面
1. 检查Ingress的路由规则配置
确认rules段是否正确指向后端服务yyy-svc,示例正确配置:
rules: - host: my.app.com http: paths: - path: / pathType: Prefix backend: service: name: yyy-svc port: number: <服务端口>
2. 验证后端服务的端点可用性
确认yyy-svc关联的Pod端点正常:
kubectl get endpoints yyy-svc -n <服务所在命名空间>
3. 检查Ingress-Nginx的路由转发规则
通过controller pod查看是否生成了正确的转发规则:
kubectl exec -n ingress-nginx <controller-pod名称> -- nginx -T | grep -A 10 "my.app.com"
内容的提问来源于stack exchange,提问作者Marcin Stachniuk
相关产品推荐
相关产品推荐

