我有从浏览器到Rancher内部服务的简单WebSocket连接。 我尝试通过两种方式连接到该服务:
1)直接转到服务:
browser ---> service
2)通过Rancher的负载均衡器:
browser ---> Load Balancer ---> service
在第一种情况下,一切都很好:建立连接并通过它发送消息。
在第二种情况下,连接在约50秒后断开。通过连接正确地在两个方向上发送消息。
是什么原因?
编辑:我在ws和wss协议中进行了测试。在这两种情况下,都有相同的问题。
答案 0 :(得分:0)
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
仅相关配置可以在LB的“自定义haproxy.cfg”部分中使用。 看截图:
以下是有关Rancher中自定义haproxy的更多文档的链接:https://rancher.com/docs/rancher/v1.6/en/cattle/adding-load-balancers/#custom-haproxy-configuration