У меня есть простое соединение WebSocket из моего браузера с сервисом внутри Rancher. Я пробовал подключиться к сервису двумя способами:
1) непосредственно в сервис:
browser ---> service
2) через балансировщик нагрузки Rancher:
browser ---> Load Balancer ---> service
В первом случае все нормально: соединение установлено и сообщения отправляются через него.
Во втором случае соединение разрывается через ~ 50 секунд. Сообщения отправляются через соединение правильно в обоих направлениях.
Какова причина?
Обновлено: я тестировал протокол ws и wss. В обоих случаях возникает одна и та же проблема.


Rancher Load Balancer внутренне использует HAProxy, который можно настроить в соответствии с вашими потребностями.
Вот пример конфигурации 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
В разделе "Custom haproxy.cfg" файла LB можно использовать только соответствующую конфигурацию.
Смотрите скриншот:

Вот ссылка на дополнительную документацию по настраиваемому haproxy в Rancher: https://rancher.com/docs/rancher/v1.6/en/cattle/adding-load-balancers/#custom-haproxy-configuration