Azure Rails部署K8s后登录触发Faraday::ConnectionFailed报错如何解决
报错信息翻译
Faraday::ConnectionFailed(Faraday连接失败) 执行超时 提取的源代码(第178行附近): else Socksify::debug_notice "直接连接到 #{host}:#{port}" initialize_tcp host, port, local_host, local_port Socksify::debug_debug "已连接到 #{host}:#{port}" end end Rails根目录: /DEVICEAPP 应用跟踪 | 框架跟踪 | 完整跟踪 socksify (1.7.1) lib/socksify.rb:178:in `initialize' socksify (1.7.1) lib/socksify.rb:178:in `initialize' /usr/local/lib/ruby/2.5.0/net/http.rb:937:in `open' /usr/local/lib/ruby/2.5.0/net/http.rb:937:in `block in connect' /usr/local/lib/ruby/2.5.0/timeout.rb:103:in `timeout' /usr/local/lib/ruby/2.5.0/net/http.rb:935:in `connect' /usr/local/lib/ruby/2.5.0/net/http.rb:920:in `do_start' /usr/local/lib/ruby/2.5.0/net/http.rb:909:in `start' faraday-net_http (1.0.1) lib/faraday/adapter/net_http.rb:146:in `request_via_request_method' faraday-net_http (1.0.1) lib/faraday/adapter/net_http.rb:131:in `request_with_wrapped_block'
问题根因
该错误本质是应用调用Azure认证接口时网络连接超时,从调用栈可以看到请求经过了socksify代理组件,故障出现在从Docker迁移到Kubernetes之后,核心原因是Kubernetes环境的代理配置、网络出口策略和原Docker运行环境不一致。
排查修复步骤
- 核对代理环境变量:检查Kubernetes部署workload的env配置,确认
SOCKS_PROXY、HTTP_PROXY、HTTPS_PROXY、NO_PROXY四个变量和原Docker运行环境是否完全一致,重点确认Azure认证域名(如公有云为login.microsoftonline.com)是否在NO_PROXY免代理列表中,以及配置的SOCKS代理地址在Kubernetes集群内网是否可访问 - 验证集群网络连通性:执行
kubectl exec -it <你的Pod名> -- /bin/bash进入Pod内部,使用nc -zv login.microsoftonline.com 443和nc -zv <SOCKS代理地址> <代理端口>分别验证到Azure端点和代理服务的连通性,确认是否存在Kubernetes网络策略、出口网关、防火墙规则限制访问 - 检查代码硬编码配置:如果你的应用代码中硬编码了SOCKS代理地址,需要确认该地址是否适配Kubernetes集群内网环境,原Docker环境使用的本地代理地址迁移到K8s后通常会发生变化,需要对应修改
- 代理开关测试:如果访问Azure不需要走代理,可在Pod的环境变量中清空所有SOCKS相关配置后重启应用,验证认证是否可以正常完成,快速定位故障是否由代理配置错误导致
内容的提问来源于stack exchange,提问作者User1984
相关产品推荐
相关产品推荐

