我有一个包含 3 个服务(后端、前端、nginx)的堆栈。我已经在同一网络(LAN)(3 台不同的 PC)中的 3 台不同主机上的 Docker Swarm 上部署了这个堆栈。
假设这些主机的 IP 地址为
192.168.1.13
192.168.1.55
192.168.8
我将路由器设置为转发 192.168.1.13 的端口 80 到 80 的所有请求,对于 443 --> 443 也是如此。
所有三个节点都是管理器。当 192.168.1.13 关闭时,就会出现问题。然后,尽管所有服务都迁移到其他 2 台主机 192.168.1.55 和 192.168.8,但我的路由器仍然将我的所有请求转发到 192.168.1.13,因此有人无法访问我的应用程序。如果我更改路由器配置以将请求转发到任何其他可用主机,则该应用程序正在运行。
我的问题是:
有没有办法配置我的路由器以将我的请求转发到位于我所有主机之上的虚拟 IP?还有其他方法可以解决我的问题吗?我考虑过 Keepalived 将关闭主机的 IP 转移到另一个启动但我不喜欢这个解决方案,我担心它会与我在路由器设置中完成的静态 IP 绑定发生冲突(我已经绑定每个主机的 MAC 地址到特定 IP,例如 192.168.1.13 等)。我已经阅读了有关 HAProxy 的信息,但除了不确定它是否能解决我的问题之外,理想情况下,如果我能以某种方式使用负载均衡器中内置的 docker swarm,我不想添加额外的服务。docker swarm 入口网络能以某种方式挽救我的生命吗?
我的堆栈 docker-compose 文件如下:
version: '3.8'
services:
frontend:
image: mydocker_hub/frontend
deploy:
replicas: 4
ports:
- "3001:3000"
backend:
image: mydocker_hub/backend
deploy:
replicas: 4
ports:
- "8001:8080"
nginx:
image: mydocker_hub/nginx
deploy:
mode: global
ports:
- "80:80"
- "443:443"
depends_on:
- frontend
- backend
在此先感谢,我希望我能清楚地解释我的问题。
PS:我知道depends_on
在堆栈部署中被忽略了,但我忘了删除它。