在 Rancher 的 LoadBalancer 中删除了 WebSocket 连接
Posted
技术标签:
【中文标题】在 Rancher 的 LoadBalancer 中删除了 WebSocket 连接【英文标题】:Dropped WebSocket connection in Rancher's LoadBalancer 【发布时间】:2018-12-23 21:57:54 【问题描述】:我有一个简单的 WebSocket 连接,从我的浏览器到 Rancher 中的一个服务。 我尝试通过 2 种方式连接到服务:
1) 直接到服务:
browser ---> service
2) 通过 Rancher 的负载均衡器:
browser ---> Load Balancer ---> service
在第一种情况下,一切都很好:建立连接并通过它发送消息。
在第二种情况下,大约 50 秒后连接断开。消息通过连接正确地在两个方向上发送。
是什么原因?
编辑:我在 ws 和 wss 协议上进行了测试。在这两种情况下都有相同的问题。
【问题讨论】:
【参考方案1】:Rancher 负载均衡器内部使用 HAProxy,可以根据您的需求进行定制。
这是一个用于 websockets 的 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
LB 的“Custom haproxy.cfg”部分只能使用相关配置。 看截图:
这里是 Rancher 中自定义 haproxy 的更多文档的链接:https://rancher.com/docs/rancher/v1.6/en/cattle/adding-load-balancers/#custom-haproxy-configuration
【讨论】:
以上是关于在 Rancher 的 LoadBalancer 中删除了 WebSocket 连接的主要内容,如果未能解决你的问题,请参考以下文章
在 Kubernetes 集群中使用 MetalLB 作为 LoadBalancer(下)
CodeDeploy 在克隆 AutoScalingGroup 时取消设置 LoadBalancer
在 GKE 上更改我的 LoadBalancer 的 IP 地址
在 K8s 上使用单个 LoadBalancer 公开多个 TCP/UDP 服务
Spring Cloud Loadbalancer 修改默认缓存为Caffeine,修改微服务启动关于Loadbalancer的WARN
Spring Cloud Loadbalancer 修改默认缓存为Caffeine,修改微服务启动关于Loadbalancer的WARN