Docker swarm反向代理+;使用Nginx实现负载平衡
我有一个docker compose文件,包含两个服务:joomla和phpmyadmin 我需要一个反向代理,其行为如下: 路径:/-->joomla服务 路径:/managedb-->phpmyadmin服务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
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很乐意帮忙,请接受答案。