K8s集群部署Selenium Grid,本地/CI执行TestCafe测试无法启动selenium:chrome
排查方案:TestCafe外部访问Selenium Grid报ECONNRESET
核心问题分析
你提到集群内测试正常,但外部(本地/CI)能创建会话却断连,本质是会话建立后TestCafe与Selenium Node的通信链路异常——Hub负责会话调度,但实际浏览器会话在Node上,集群内Job能直接访问Node的内部地址,而外部环境无法解析/访问这些内部地址。
具体排查步骤
检查Selenium Grid节点的暴露方式与注册地址
Selenium Grid 4.x默认分布式部署,Hub和Node是独立组件。节点注册时默认使用集群内部IP,外部环境(本地/CI)只能访问Hub,但Hub返回的节点地址是内部IP,导致TestCafe无法和Node建立后续连接。
解决:- 将Selenium Node的Service类型改为
NodePort或LoadBalancer,暴露节点的端口(默认5555) - 启动Node时设置环境变量
SE_NODE_HOST=<节点外部可访问IP/域名>和SE_NODE_PORT=<暴露的端口>,让节点以外部地址注册到Hub
- 将Selenium Node的Service类型改为
调整连接超时参数
外部网络延迟可能导致连接超时,尝试增加TestCafe的浏览器连接超时:testcafe selenium:chrome --browser-connection-timeout 120000同时在Selenium Grid的配置中调整会话超时(可通过
SE_SESSION_TIMEOUT环境变量设置,单位秒)排查TLS/SSL配置
如果Grid启用了HTTPS,外部TestCafe客户端可能未信任Grid的证书,导致连接重置。可临时禁用HTTPS测试是否恢复正常,或为TestCafe配置信任的证书。检查Kubernetes网络策略
确认集群是否存在网络策略,阻止了外部流量访问Selenium Node的端口。需添加允许本地/CI IP段访问Node端口的网络策略规则。验证TestCafe版本与Grid适配
检查本地/CI的TestCafe版本是否与集群内一致,版本差异可能导致适配问题。另外,尝试指定Grid的完整端点路径:testcafe selenium:http://<hub-external-ip>:4444/wd/hub/chrome
内容的提问来源于stack exchange,提问作者Saranya Unni
相关产品推荐
相关产品推荐

