Docker Essaim Windows Travailleur avec Traefik retourne Gateway Timeout
L'objectif est d'obtenir un essaim mixte OS Docker fonctionnant avec 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 de systèmes d'exploitation mixtes à condition que l'option --endpoint-mode soit définie à 'dnsrr'. C'est expliqué ici. Cependant, tente d'utiliser traefik pour se rendre à une simple image whoami docker stefanscherer / whoami l'image a échoué.
Défaillance Minimale Exemple
// 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 établit avec succès des règles d'arrière-plan, pour vérifier le routage j'ai utilisé le tableau de bord de traefik pour trouver L'URL qui est routée par la règle par exemple '10.0.0.12:8080'. Je compare ensuite ceci avec l'adresse IP de chaque tâche, la tâche peut être vue avec docker service ps
, et leur adresse' trouvée en utilisant
docker inspect <taskID>
--format '{{ range .NetworksAttachments }}{{ .Addresses }}{{ end }}'
Le Problème
une requête HTTP avec en-tête ' Host: whoami.docker ' envoyé à L'IP du manager réussira quand routé à la gestionnaire et échouer avec 504 Gateway Timeout lors de routed à la tâche Windows sur le Windows worker.
2 réponses
vous manquez le paramètre -- endpoint-mode=DN srrr à 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
paramétrage endpoint-mode dnsrr désactivera l'adresse VIP qui est probablement à l'origine du problème.
j'ai eu le même problème en utilisant le stefanscherer/whoami
image. En utilisant microsoft/dotnet-samples:aspnetapp
fonctionne bien, donc l'erreur semble liée à l'image.
j'utilise la configuration suivante:
Ubuntu 16.04
- Panneau 18.03.1-ce
- Exécuter en tant que Manager
- Fonctionne traefik
Windows 1803
- Panneau 18.03.1-ee-2
- fonctionne en tant que travailleur (se joindre en tant que gestionnaire n'a pas de travail)
- s'Exécute microsoft/dotnet-échantillons:aspnetapp