首页 文章

Docker Swarm Overlay VIP

提问于
浏览
2

我的节点上运行了Docker Swarm 12.1 . 我有一个4任务服务来运行我的Drupal站点和数据库的单个任务:

drupalapp     mastermindg/rpi-apache2php7  
drupaldb      mysql:latest

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

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

Is it possible to set a Virtual IP address for load-balancing over the overlay network?

1 回答

  • 4

    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"
    

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

    http://nodeX/index.php
    

    现在的优势是您可以移植到任何节点,它将正确解析 .

相关问题