Прервано соединение WebSocket в LoadBalancer ранчо

У меня есть простое соединение WebSocket из моего браузера с сервисом внутри Rancher. Я пробовал подключиться к сервису двумя способами:

1) непосредственно в сервис:

browser ---> service

2) через балансировщик нагрузки Rancher:

browser ---> Load Balancer ---> service

В первом случае все нормально: соединение установлено и сообщения отправляются через него.

Во втором случае соединение разрывается через ~ 50 секунд. Сообщения отправляются через соединение правильно в обоих направлениях.

Какова причина?

Обновлено: я тестировал протокол ws и wss. В обоих случаях возникает одна и та же проблема.

Альтернативные WebSockets для netty/java: удвоение пропускной способности небольших сообщений
Альтернативные WebSockets для netty/java: удвоение пропускной способности небольших сообщений
Этот пост - краткая презентация netty-websocket-http1 - альтернативной netty/java реализации RFC6455 - протокола WebSocket.
Очень простая установка Websocket с помощью Deno без каких-либо пакетов
Очень простая установка Websocket с помощью Deno без каких-либо пакетов
Здесь мы рассмотрим, как можно использовать Websocket в Deno и развернуть его в Deno deploy. Мы будем слушать Websocket, а также отправлять сообщения.
4
0
1 253
1

Ответы 1

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

Ссылка: https://rancher.com/docs/rancher/v1.6/en/installing-rancher/installing-server/basic-ssl-config/#example-haproxy-configuration

В разделе "Custom haproxy.cfg" файла LB можно использовать только соответствующую конфигурацию. Смотрите скриншот:

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

Другие вопросы по теме