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
我有一个 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