Docker swarm反向代理+Nginx负载均衡

Docker swarm reverse proxy+load balancing with Nginx

我有一个 docker 包含 2 个服务的组合文件:joomla 和 phpmyadmin。

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

路径: / --> joomla 服务

路径:/managedb --> phpmyadmin 服务

server {
    listen 80;
    server_name localhost;

    location / {
        proxy_pass http://joomla;
    }
    location /managedb {
        proxy_pass http://phpmyadmin;
    }
}

一切正常,但是我需要添加负载平衡来平衡我在 docker 群中的 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 名称解析器会将 joomla 和 phpmyadmin 解析为一个虚拟 ip,该虚拟 ip 将成为该服务的 swarm lb,或者如果您将服务配置为在 dnsrr 模式下工作,则在将 servicename-hostname 解析为容器 ip 时将使用 dns 循环法。

但是,如果你想在 swarm 中跨节点分发服务,那就是另一回事了。在这种情况下,您可以为每个服务设置放置限制或将它们设置为 "global" 而不是复制 - 请参阅 https://docs.docker.com/engine/swarm/services/#control-service-placement