【问题标题】:Reach available Docker Swarm hosts in a LAN when another host is down当另一台主机宕机时,访问局域网中可用的 Docker Swarm 主机
【发布时间】:2020-10-06 18:31:49
【问题描述】:

我有一个包含 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 在堆栈部署中被忽略,但我忘记将其删除。

【问题讨论】:

    标签: docker docker-compose dockerfile docker-swarm docker-ingress


    【解决方案1】:

    好的,我用 Keepalived 解决了。

    我制作了以下 3 个配置文件,并将每个文件放在我的 3 台主机上的 /etc/keepalived/keepalived.conf 上:

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         admin@example.com
       }
       notification_email_from user@host
       smtp_server localhost
       smtp_connect_timeout 30
    }
    
    ! state BACKUP for slaves
    ! priority 100 for slaves
    ! Replace interface with an existing interface
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 101
        priority 101
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.100
        }
    }
    

    然后我将路由器指向 192.168.1.100(我创建的虚拟 IP),一切正常。

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多