Nginx Ingress Controller为Ingress返回虚假证书的排查求助
排查Kubernetes Ingress返回虚假证书问题的步骤
1. 核对Ingress TLS配置细节
- 检查
bad.xyz.com对应的Ingress的tls块,确认hosts字段完全匹配域名,无拼写错误(如大小写、多余空格、后缀错误) - 确认
tls.secretName指向的Secret名称、命名空间完全正确,若Secret与Ingress不在同一命名空间,需确认Ingress Controller具备跨命名空间读取Secret的权限
2. 验证Secret的有效性与一致性
- 导出Secret内容对比:
kubectl get secret <bad-secret-name> -n <namespace> -o yaml,与good.xyz.com对应的Secret的data.tls.crt、data.tls.key的base64编码完全一致,避免编码时引入多余换行或字符 - 解码证书检查SAN字段:
echo "<tls.crt的base64内容>" | base64 -d | openssl x509 -text -noout,确认证书的Subject Alternative Name包含bad.xyz.com——这是最常见的触发默认证书的原因
3. 检查Ingress与Controller状态
- 查看Ingress事件日志:
kubectl describe ingress <bad-ingress-name> -n <namespace>,确认Events中无SecretNotFound、InvalidCertificate等报错 - 确认Ingress Controller Pod状态:
kubectl get pods -n <ingress-controller-namespace>,确保所有Pod处于Running状态,无频繁重启 - 检查Ingress Controller启动参数,确认
--default-ssl-certificate是否指向自签名证书——当Ingress TLS配置失效时,Controller会 fallback 到该默认证书
4. 验证Nginx配置生成结果
- 进入Ingress Controller Pod:
kubectl exec -it <ingress-pod-name> -n <ingress-controller-namespace> -- /bin/bash - 搜索
bad.xyz.com对应的Nginx server块(通常在/etc/nginx/conf.d/或/etc/nginx/nginx.conf中),检查ssl_certificate和ssl_certificate_key是否指向正确的Secret挂载路径,而非默认证书路径 - 排查是否存在优先级更高的Ingress(如通配符
*.xyz.com)覆盖了bad.xyz.com的配置
5. 网络层面验证
- 直接指定Ingress Controller IP访问:
curl -v https://bad.xyz.com --resolve bad.xyz.com:443:<ingress-controller-ip>,排除DNS解析错误导致请求打到其他服务的可能 - 检查集群防火墙、云厂商负载均衡配置,确认443端口流量正确转发到Ingress Controller Service
常见修复动作
- 若证书SAN缺失:重新签发包含
bad.xyz.com的证书,更新对应Secret - 若Ingress配置错误:修正
tls.hosts或tls.secretName字段,等待Ingress Controller刷新配置 - 若配置未加载:重启Ingress Controller Pod强制刷新Nginx配置:
kubectl rollout restart deployment <ingress-controller-deployment> -n <ingress-controller-namespace>
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

