2016-08-22 144 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