L’objectif est d’obtenir un essaim mixte de systèmes d'exploitation Docker fonctionnant sous des serveurs Linux et des machines Windows 10 exécutant Docker pour Windows.
Actuellement, les travailleurs Windows sont théoriquement pris en charge sur des essaims OS mixtes à condition que l'indicateur --endpoint-mode soit défini sur 'dnsrr'. Ceci est expliqué ici . Cependant, les tentatives d'utilisation de traefik pour se rendre vers un simple menu fixe whoami image stefanscherer/whoami image ont échoué.
// On (Linux) Manager Node:
docker swarm init --advertise-addr <hostaddress> --listen-addr <hostaddress>:2377
// On (Windows 10) Worker Node:
docker swarm join <jointoken>
// On Manager Node:
docker network create --driver=overlay traefik-net
docker service create \
--name traefik \
--constraint=node.role==manager \
--publish 80:80 --publish 8080:8080 \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--network traefik-net \
traefik \
--docker \
--docker.swarmmode \
--docker.domain=traefik \
--docker.watch \
--web
docker service create \
--name whoami \
--label traefik.enable=true \
--label traefik.frontend.rule=Host:whoami.docker \
--label traefik.protocol=http \
--label traefik.docker.network=traefik-net \
--label traefik.backend.loadbalancer.method=drr \
--label traefik.backend=whoami \
--network traefik-net \
--mode global\
--label traefik.port=80 \
stefanscherer/whoami
Traefik a configuré avec succès les règles du backend afin de vérifier le routage. J'ai utilisé le tableau de bord Traefik pour rechercher l'URL vers laquelle la règle est acheminée, par exemple. "10.0.0.12: 8080". Je compare ensuite cela avec l'adresse IP de chaque tâche, celle-ci peut être visualisée avec docker service ps
, et leur adresse 'trouvée à l'aide de
docker inspect <taskID> \
--format '{{ range .NetworksAttachments }}{{ .Addresses }}{{ end }}'
Une demande HTTP avec un en-tête 'Host: whoami.docker' envoyée à l'adresse IP du gestionnaire réussira si elle est routée vers le gestionnaire et échouera avec 504 Gateway Timeout lorsqu'elle sera routée vers la tâche Windows sur l'agent Windows.
Vous manquez le paramètre --endpoint-mode = dnsrr à votre service whoami.
docker service create \
--name whoami \
--label traefik.enable=true \
--label traefik.frontend.rule=Host:whoami.docker \
--label traefik.protocol=http \
--label traefik.docker.network=traefik-net \
--label traefik.backend.loadbalancer.method=drr \
--label traefik.backend=whoami \
--network traefik-net \
--mode global\
--label traefik.port=80 \
--endpoint-mode=dnsrr
stefanscherer/whoami
Si vous définissez dnsrr en mode point de terminaison, l'adresse VIP qui est probablement à l'origine du problème est désactivée.
J'ai eu le même problème lors de l'utilisation de l'image stefanscherer/whoami
. Utiliser Microsoft/dotnet-samples:aspnetapp
fonctionne cependant, donc l'erreur semble liée à l'image.
J'utilise la configuration suivante:
Ubuntu 16.04
Windows 1803