Docker swarm反向代理+;使用Nginx实现负载平衡

Docker swarm反向代理+;使用Nginx实现负载平衡,docker,nginx,docker-swarm,Docker,Nginx,Docker Swarm,我有一个docker compose文件,包含两个服务:joomla和phpmyadmin 我需要一个反向代理,其行为如下: 路径:/-->joomla服务 路径:/managedb-->phpmyadmin服务 server { listen 80; server_name localhost; location / { proxy_pass http://joomla; } location /managedb { p

我有一个docker compose文件,包含两个服务:joomla和phpmyadmin

我需要一个反向代理,其行为如下:

路径:/-->joomla服务

路径:/managedb-->phpmyadmin服务

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://joomla;
    }
    location /managedb {
        proxy_pass http://phpmyadmin;
    }
}
一切都很好,但我需要添加负载平衡来平衡docker swarm中3台机器之间的工作

它们都是同一局域网上的虚拟机,静态IP为192.168.75.11/12/13

Nginx添加负载平衡的方法应如下所示:

upstream joomla_app {
        server 192.168.75.11;
        server 192.168.75.12;
        server 192.168.75.13;
}
upstream phpmyadmin_app {
        server 192.168.75.11;    
        server 192.168.75.12;
        server 192.168.75.13;
}
server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://joomla_app;
    }
    location /managedb {
        proxy_pass http://phpmyadmin_app;
    }
}
然而,由于唯一公开的端口是Ngxinx 80,因为我也需要它作为反向代理,所以上面的代码显然不起作用

那么如何在这种情况下添加负载平衡?


提前谢谢你

在docker swarm中,您不需要自己的负载平衡器,它有一个内置的负载平衡器。只需扩展您的服务即可。Swarm name resolver将joomla和phpmyadmin解析为虚拟ip,该虚拟ip将是该服务的Swarm lb,或者如果您将服务配置为在dnsrr模式下工作,则在将servicename主机名解析为容器ip时,将使用dns循环方法


然而,如果您想在swarm中的节点之间分发服务,那是另一回事。在这种情况下,您可以为每个服务设置放置限制,或者将其设置为“全局”而不是复制-请参阅

非常感谢!事实上,我认为swarm本身就可以处理平衡问题,但我不确定,也找不到太多关于它的信息。@FrancescoStucci很乐意帮忙,请接受答案。