我有一个服务器,通过 webrtc
我让它在docker swarm中作为复制的(全局或复制)服务运行。
当我试着在一个自定义的覆盖网络中运行该服务时(swarm scope)。webrtc
连接总是失败。我知道这是网络问题,因为ICE协议无法检索到正确的候选人,而且我只有一个端口暴露,我猜数据包无法进入覆盖网络内部。
然后,我把服务运行在主机网络上,那里一切正常。然而,现在我没有得到docker的自动负载平衡(所以如果我在IP x.x.x.x:8080上调用应用程序,它将始终只到达运行在该节点上的副本)。
那么,我怎样才能使运行在群的多个节点上但在主机网络中的服务实现负载均衡呢?
好吧,我发现的最简单的方法是使用外部负载平衡器,如nginx来解决这个问题。
基本上只要让nginx也运行在docker容器中,配置好你的节点IP,用于代理请求,例如。
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
upstream backend {
server 192.168.1.2:8080;
server 192.168.1.3:8080;
server 192.168.1.4:8080;
server 192.168.1.5:8080;
server 192.168.1.6:8080;
}