Docker Swarm Overlay VIP

Docker Swarm Overlay VIP

我的节点上安装了 Docker Swarm 12.1 运行ning。我有一个 4 任务服务到 运行 我的 Drupal 站点和一个数据库任务:

drupalapp     mastermindg/rpi-apache2php7  
drupaldb      mysql:latest

我现在可以在 运行 连接容器的任何节点上访问我的站点。

问题是我只能在我的路由器上为端口转发设置一个 IP 地址,如果一个节点出现故障,那么该 IP 地址将无法再访问。

是否可以为覆盖网络上的负载平衡设置虚拟 IP 地址?

Docker Swarm 使用网状网络,因此对单个主机的任何请求都将路由到 运行 所在的任何主机。这里的困难部分是您的服务不是 运行 入口,因此它对全世界不可用。为了使其可用,请使用 HAProxy:

docker network create --driver overlay proxy
docker network create --driver overlay drupal
docker service create --name proxy \
    -p 80:80 \
    -p 443:443 \
    -p 8080:8080 \
    --network proxy \
    -e MODE=swarm \
    vfarcic/docker-flow-proxy
docker service create --name drupalapp \
    --network proxy \
    --network drupal \
    mastermindg/rpi-apache2php7
docker service create --name drupaldb \
    --network drupal \
    mysql:latest

所以在这里您需要创建两个网络:1 个用于 drupaldb 和 drupalapp(称为 drupal)之间的内部使用,一个用于 haproxy 用于公开您的端口。您的 drupalapp 服务需要包含在代理覆盖网络和 drupal 网络中。

注册您的 HAProxy 服务:

curl "$masterip:8080/v1/docker-flow-proxy/reconfigure?serviceName=drupalapp&servicePath=/&port=80"

现在您的 Drupal 站点可以通过以下方式在您群中的任何节点上访问:

http://nodeX/index.php

现在的优点是您可以转发到任何节点,它会正确解析。