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

Kubernetes中Nginx Controller的TLS版本问题求助

问题描述

按照教程部署Nginx Ingress Controller和cert-manager后,自定义HTTPS域名https://nginx-ing-poc.ncats.io/访问时触发TLS版本兼容错误,curl报错信息如下:

lij43@NCATS-2170711-M ~ % curl -v -I https://nginx-ing-poc.ncats.io/

  • Trying 52.72.56.47:443...
  • Connected to nginx-ing-poc.ncats.io (52.72.56.47) port 443 (#0)
  • ALPN, offering h2
  • ALPN, offering http/1.1
  • successfully set certificate verify locations:
  • CAfile: /etc/ssl/cert.pem
  • CApath: none
  • (304) (OUT), TLS handshake, Client hello (1):
  • error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version
  • Closing connection 0
    curl: (35) error:1404B42E:SSL routines:ST_CONNECT:tlsv1 alert protocol version

NLB域名可正常访问,cert-manager配置无异常,期望返回教程中echo1的内容。

排查与解决步骤

1. 检查Nginx Ingress的TLS协议配置

Nginx Ingress Controller的默认TLS协议配置可能与客户端不兼容,查看其ConfigMap:

kubectl get configmap -n ingress-nginx nginx-ingress-controller -o yaml

确认ssl-protocols字段是否包含TLSv1.2 TLSv1.3这类通用兼容版本。若配置缺失或仅包含旧版协议,更新ConfigMap:

kubectl edit configmap -n ingress-nginx nginx-ingress-controller

修改或添加以下内容:

data:
  ssl-protocols: "TLSv1.2 TLSv1.3"

保存后重启Ingress Controller Pod生效:

kubectl rollout restart deployment -n ingress-nginx nginx-ingress-controller

2. 验证NLB与Ingress的端口映射

确认NLB的443端口是否正确转发到Ingress Controller的443端口,查看Service配置:

kubectl get service -n ingress-nginx ingress-nginx-controller -o yaml

检查spec.ports部分,确保HTTPS端口(443)的targetPort指向容器的https端口(通常为443)。

3. 核对Ingress资源的TLS关联配置

确认Ingress资源已正确绑定cert-manager生成的证书Secret:

kubectl get ingress <你的Ingress名称> -o yaml

检查tls字段是否包含正确的域名和Secret名称:

tls:
- hosts:
  - nginx-ing-poc.ncats.io
  secretName: nginx-ing-poc-tls

同时验证Secret存在且包含有效证书:

kubectl get secret nginx-ing-poc-tls -o yaml

确认data字段下的tls.crt和tls.key不为空。

4. 测试指定TLS版本的兼容性

用指定TLS版本的curl命令测试,确认是否为协议版本不匹配:

curl -v -I --tlsv1.2 https://nginx-ing-poc.ncats.io/

若该命令可正常返回,说明服务端禁用了客户端默认尝试的旧版TLS,可调整客户端默认TLS版本,或在业务允许的前提下,在Ingress配置中启用兼容的旧版协议。

5. 查看Nginx日志定位细节

获取Ingress Controller的Pod日志,查找TLS握手失败的具体原因:

kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx

搜索SSL或TLS相关日志条目,定位问题根源。

内容的提问来源于stack exchange,提问作者Lucifer8740

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 09:30:37