Rancher中的WebSocket连接断开';负载平衡器
我有一个从浏览器到Rancher内部服务的简单WebSocket连接。 我尝试通过两种方式连接到该服务: 1) 直接发送到服务:Rancher中的WebSocket连接断开';负载平衡器,websocket,rancher,Websocket,Rancher,我有一个从浏览器到Rancher内部服务的简单WebSocket连接。 我尝试通过两种方式连接到该服务: 1) 直接发送到服务: browser ---> service 2) 通过Rancher的负载平衡器: browser ---> Load Balancer ---> service 在第一种情况下,一切正常:建立连接并通过它发送消息 在第二种情况下,连接在~50秒后断开。消息通过连接向两个方向正确发送 原因是什么 编辑:我测试了ws和wss协议。在这两种情况下都存在
browser ---> service
2) 通过Rancher的负载平衡器:
browser ---> Load Balancer ---> service
在第一种情况下,一切正常:建立连接并通过它发送消息
在第二种情况下,连接在~50秒后断开。消息通过连接向两个方向正确发送
原因是什么
编辑:我测试了ws和wss协议。在这两种情况下都存在相同的问题。Rancher负载平衡器内部使用HAProxy,可以根据您的需要进行定制 以下是WebSocket的HAProxy配置示例:
global
maxconn 4096
ssl-server-verify none
defaults
mode http
balance roundrobin
option redispatch
option forwardfor
timeout connect 5s
timeout queue 5s
timeout client 36000s
timeout server 36000s
frontend http-in
mode http
bind *:443 ssl crt /etc/haproxy/certificate.pem
default_backend rancher_servers
# Add headers for SSL offloading
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Forwarded-Ssl on if { ssl_fc }
acl is_websocket hdr(Upgrade) -i WebSocket
acl is_websocket hdr_beg(Host) -i ws
use_backend rancher_servers if is_websocket
backend rancher_servers
server websrv1 <rancher_server_1_IP>:8080 weight 1 maxconn 1024
server websrv2 <rancher_server_2_IP>:8080 weight 1 maxconn 1024
server websrv3 <rancher_server_3_IP>:8080 weight 1 maxconn 1024
全局
maxconn 4096
ssl服务器验证无
默认值
模式http
平衡循环赛
选项重新修补
选择转发
超时连接5s
超时队列5s
客户端超时36000s
服务器超时36000s
中的前端http
模式http
bind*:443 ssl crt/etc/haproxy/certificate.pem
默认\u后端rancher\u服务器
#添加用于SSL卸载的标头
http请求集头X-Forwarded-Proto https if{ssl_fc}
如果{Ssl_fc}上的http请求集标头X-Forwarded-Ssl
acl是\u websocket hdr(升级)-i websocket
acl是websocket hdr\u beg(主机)-i ws
如果是websocket,请使用\u后端rancher\u服务器
后端rancher_服务器
服务器websrv1:8080重量1 maxconn 1024
服务器websrv2:8080重量1 maxconn 1024
服务器WebServ3:8080重量1 maxconn 1024
参考:
LB的“Custom haproxy.cfg”部分只能使用相关配置。
请参见屏幕截图:
以下是Rancher中定制haproxy的更多文档链接: