主机模式下docker swarm中复制服务的负载平衡

主机模式下docker swarm中复制服务的负载平衡,docker,webrtc,load-balancing,docker-swarm,Docker,Webrtc,Load Balancing,Docker Swarm,我有一个通过webrtc提供流服务的服务器,我让它作为docker swarm中的复制(全局或副本)服务运行 当我尝试在自定义覆盖网络(swarm scope)中运行服务时,webrtc连接总是失败。我知道这是联网,因为ICE协议无法检索到正确的候选端口,我只暴露了一个端口,我猜数据包无法进入覆盖网络 然后我把服务放在主机网络上运行,一切正常。但是,现在我没有从docker获得自动负载平衡(因此,如果我在IP x.x.x.x:8080上调用应用程序,它将始终只到达该节点上运行的副本) 那么,我如

我有一个通过
webrtc
提供流服务的服务器,我让它作为docker swarm中的复制(全局或副本)服务运行

当我尝试在自定义覆盖网络(swarm scope)中运行服务时,
webrtc
连接总是失败。我知道这是联网,因为ICE协议无法检索到正确的候选端口,我只暴露了一个端口,我猜数据包无法进入覆盖网络

然后我把服务放在主机网络上运行,一切正常。但是,现在我没有从docker获得自动负载平衡(因此,如果我在IP x.x.x.x:8080上调用应用程序,它将始终只到达该节点上运行的副本)


那么,我如何才能平衡运行在swarm多个节点上但在主机网络中的服务呢?

好的,我找到的最简单的方法是使用像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;
}
Docker docs对此(出人意料地)保持沉默,但我也有同样的怀疑:这是因为,
--网络主机
无法实现入口负载平衡。Docker不知道哪些端口正在侦听??无论如何,能确认这一点真是太好了。