NGINX Ingress Controller SSL无法生效,请求排查TLS配置问题
TLS访问失败排查步骤
1. 检查TLS Secret的有效性
- 确认
api-gateway-tlsSecret存在于default命名空间:kubectl get secrets -n default api-gateway-tls - 验证Secret包含
tls.crt和tls.key两个必填字段:
需确保这两个字段的内容是完整的PEM格式证书和未加密私钥,无格式损坏。kubectl describe secret api-gateway-tls -n default
2. 验证Ingress Controller的端口监听
- 检查NGINX Ingress Controller的Service是否暴露443端口:
若为kubectl get svc -n ingress-nginx # 通常控制器位于ingress-nginx命名空间LoadBalancer类型,确认EXTERNAL-IP已分配;若为NodePort,验证节点对应端口是否开放防火墙规则。 - 直接测试443端口连通性:
观察是否能建立TLS连接,是否出现证书错误或超时。curl -v https://api.some.eu:443 # IP测试需指定域名解析 curl -v https://<外部IP>:443 --resolve api.some.eu:<外部IP>
3. 排查Ingress配置的冲突与不合理项
- 移除冗余的Ingress类配置:Kubernetes 1.19+版本仅需保留
spec.ingressClassName: nginx,删除metadata.annotations.kubernetes.io/ingress.class,避免配置冲突。 - 修正后端协议注解:你的后端服务端口为80(通常对应HTTP),但配置了
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS",这会导致NGINX尝试用HTTPS连接后端80端口,引发连接失败。建议先移除该注解再测试。 - 明确SSL重定向的生效范围:
force-ssl-redirect和ssl-redirect仅对匹配host: api.some.eu的请求生效,直接用IP访问时不会触发重定向(且IP通常不在证书SAN列表中,会导致证书错误),这属于正常现象。
4. 查看Ingress Controller日志定位错误
- 导出NGINX控制器Pod日志,搜索TLS相关关键词:
重点排查kubectl logs -n ingress-nginx <nginx-ingress-pod名称>ssl、certificate、secret相关报错,比如证书加载失败、Secret不存在等信息。
5. 验证证书与域名的匹配性
- 检查证书的SAN字段是否包含
api.some.eu:
确保输出中包含# 导出证书到本地 kubectl get secret api-gateway-tls -n default -o jsonpath='{.data.tls\.crt}' | base64 -d > cert.pem # 查看证书SAN信息 openssl x509 -in cert.pem -text -noout | grep -A 1 "Subject Alternative Name"DNS:api.some.eu,否则客户端会因证书不匹配拒绝连接。
内容的提问来源于stack exchange,提问作者Atif Shafi
相关产品推荐
相关产品推荐

