如何修改Selenium VNC的WebSocket端口,在K8s Nginx Ingress下将4444改为80?
问题根因
Selenium Grid前端生成VNC WebSocket连接地址时,默认读取路由器配置的监听端口生成连接串,仅修改SE_ROUTER_PORT为80无法覆盖完整配置,同时Ingress-Nginx需要开启WebSocket支持、正确处理请求头才能正常转发连接。
具体解决步骤
1. 修正Selenium Router 环境变量配置
除了已配置的SE_ROUTER_PORT=80,补充以下两个环境变量:
SE_ROUTER_HOST:填写Ingress对外暴露的Selenium Grid访问域名(例如selenium-grid.example.com)SE_GRID_UI_VNC_PUBLIC_URL:直接强制指定VNC WebSocket的地址前缀,HTTP协议格式为ws://<你的域名>/wd/hub,HTTPS协议格式为wss://<你的域名>/wd/hub,该配置优先级高于端口和主机配置,可以直接避免生成带4444端口的连接地址
注意:如果Ingress开启了HTTPS,必须用
wss前缀,否则会被浏览器的混合内容规则拦截
2. 配置Ingress-Nginx支持WebSocket转发
在Selenium Grid对应的Ingress资源配置中添加以下annotations,开启WebSocket支持同时延长超时时间避免VNC连接意外断开:
annotations: nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" nginx.ingress.kubernetes.io/upgrade: "websocket" nginx.ingress.kubernetes.io/connection-upgrade: "$http_upgrade"
Ingress后端只需正常指向Selenium Router Service的4444端口即可,不需要修改Service本身的端口配置。
3. 验证配置生效
重启Selenium Router Pod让环境变量生效后,清空浏览器缓存重新访问Grid页面,查看网络请求中的WebSocket连接地址是否已经改为80端口,确认连接状态正常。
内容的提问来源于stack exchange,提问作者kycfeel
相关产品推荐
相关产品推荐

