2016-08-22 114 views
2

我在我的节点上运行了Docker Swarm 12.1。我有一个4任务服务来运行我的Drupal网站和数据库中的单个任务:Docker Swarm Overlay VIP

drupalapp  mastermindg/rpi-apache2php7 
drupaldb  mysql:latest 

我现在可以在正在运行的容器中的任何节点上达到我的网站。

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

是否可以设置通过覆盖网络进行负载平衡的虚拟IP地址?

回答

4

Docker Swarm使用Mesh网络,因此对单个主机的任何请求都将被路由到正在运行的任何主机。这里困难的部分是您的服务不在入口处运行,因此它不适用于世界。为了使其可使用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 

的优点是现在,你可以端口转发给任何节点它会正确解析。

+1

伟大的答案...完美的作品! – user3063045