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.

26
demandé sur Matt Hawes 2017-08-22 19:04:16

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.

1
répondu Miq 2018-04-04 12:40:26

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
0
répondu Dresel 2018-08-07 19:04:52