【问题标题】:Load Balancing a replicated service in docker swarm in host mode在主机模式下对 docker swarm 中的复制服务进行负载平衡
【发布时间】:2023-03-30 15:25:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • Docker 文档(令人惊讶地)对此保持沉默,但我也有同样的怀疑:那是 --network host 不会发生入口负载平衡。 Docker 不知道在监听哪些端口??无论如何,很高兴能对此进行确认。

标签: docker webrtc load-balancing docker-swarm


【解决方案1】:

好吧,我发现最简单的方法是使用像 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 2018-01-03
    • 1970-01-01
    • 2017-10-12
    • 2018-10-14
    • 2017-07-19
    • 2016-03-31
    相关资源
    最近更新 更多