KOPS用Helm安装Nginx Ingress出现net/http: TLS handshake timeout报错如何解决
报错信息:Validation failed: unexpected error during validation: error listing nodes: Get "https://domainname/api/v1/nodes": net/http: TLS handshake timeout
错误产生原因
该错误本质是运行Helm的本地节点和K8s集群API服务器的TLS握手阶段超时,无法建立正常的API访问链路,常见触发原因如下:
- 本地机器到KOPS集群API服务器的443端口被安全组、防火墙、WAF等中间网络设备拦截
- 本地kubeconfig配置的API服务器域名解析异常,指向错误IP、或DNS解析延迟过高
- 本地节点配置了全局代理,代理规则不包含API服务器域名,请求被错误路由或拦截
- K8s API服务器负载过高、Pod运行异常,无法及时响应TLS握手请求
- KOPS集群签发的API服务器证书配置异常,比如证书过期、SAN字段未包含当前访问的域名,导致TLS校验阶段卡住超时
排查步骤
- 优先验证集群基础访问能力,本地执行
kubectl get nodes,如果命令同样报错,说明是集群访问链路问题,和Helm本身无关 - 测试网络连通性,执行
curl -v https://domainname/api/v1/nodes,确认TCP 443端口是否能正常建立连接 - 验证证书有效性,执行
openssl s_client -connect domainname:443,检查返回的证书有效期、SAN字段是否包含访问域名 - 登录KOPS控制节点,执行
kubectl get pods -n kube-system | grep kube-apiserver确认API服务器Pod状态正常,再执行kubectl top pods -n kube-system检查API服务器资源使用率是否超出阈值
处理方案
- 网络拦截问题:调整API服务器节点的安全组规则,放行本地出口IP的443端口入向权限,关闭中间链路对API请求的拦截规则
- DNS解析异常:修改本地hosts文件手动绑定
domainname到K8s API服务器的正确IP,或更换本地DNS为集群适配的DNS地址 - 代理配置异常:检查本地
HTTP_PROXY/HTTPS_PROXY环境变量,将domainname添加到NO_PROXY免代理列表 - API服务器异常:扩容控制节点硬件规格,调整API服务器的资源请求/限制配置,重启运行异常的API服务器Pod
- 证书配置异常:执行
kops update cluster命令重新签发API服务器证书,确保证书SAN字段包含所有访问用的域名和IP - 临时规避:如果仅需完成Ingress Controller安装,可在
helm install命令后添加--disable-openapi-validation参数跳过校验阶段,后续再排查链路问题
内容的提问来源于stack exchange,提问作者Hardik Patel
相关产品推荐
相关产品推荐

