2016-08-22 3 views
2

Ich habe Docker Swarm 12.1 auf meinen Knoten ausgeführt. Ich habe eine 4 Aufgabe Service habe meine Drupal-Website und eine einzelne Aufgabe für die Datenbank auszuführen:Docker Swarm Overlay VIP

drupalapp  mastermindg/rpi-apache2php7 
drupaldb  mysql:latest 

Ich kann jetzt erreichen meine Seite auf jedem Knoten, der den Behälter läuft.

Das Problem ist, dass ich nur eine einzige IP-Adresse für Portweiterleitung auf meinem Router festlegen kann und wenn ein einzelner Knoten ausfällt, dann wird diese IP-Adresse nicht mehr zugänglich sein.

Ist es möglich, eine virtuelle IP-Adresse für den Lastausgleich über das Overlay-Netzwerk festzulegen?

Antwort

4

Docker Swarm verwendet Mesh-Netzwerke, sodass Anfragen an einen einzelnen Host an den Host weitergeleitet werden, auf dem er ausgeführt wird. Der schwierige Teil hier ist, dass Ihr Dienst nicht am Eingang läuft, so dass es für die Welt nicht verfügbar ist. Um es verfügbar Verwendung HAProxy zu machen:

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 

So, hier müssen Sie zwei Netzwerke erstellen: 1 für den internen Gebrauch zwischen drupaldb und drupalapp (genannt Drupal) und eine für haproxy Verwendung Ihre Ports zu belichten. Ihr drupalapp-Dienst muss sowohl im Proxy-Overlay-Netzwerk als auch im drupal-Netzwerk enthalten sein.

Registrieren HAProxy Service:

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

Jetzt Ihre Website Drupal kann über auf jedem Knoten in Ihrem Schwarm zu erreichen:

http://nodeX/index.php 

Der Vorteil ist jetzt, dass Sie Port-Weiterleitung zu einem beliebigen Knoten können und es wird korrekt aufgelöst.

+1

Große Antwort ... funktioniert perfekt! – user3063045