29 votes

Docker Swarm Windows Worker avec Traefik renvoie le délai d'expiration de la passerelle

L'objectif est d'obtenir un mixte OS Docker essaim cours d'exécution à l'aide de serveurs Linux et Windows 10 Machines de course de Docker Pour Windows

Actuellement Windows travailleurs sont théoriquement pris en charge sur les os des essaims fourni l'-paramètre-mode drapeau est réglé à "dnsrr'. C'est expliqué ici. Cependant, les tentatives d'utilisation de traefik de route pour un simple débardeur whoami image stefanscherer/whoami image ont échoué.

Minimes Exemple D'Échec De

// 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 installe bien backend règles, afin de vérifier le routage, j'ai utilisé le traefik tableau de bord pour trouver l'URL qui est acheminé par la règle par exemple '10.0.0.12:8080'. J'ai ensuite la comparer avec l'adresse IP de chaque tâche, la tâche peut être considérée avec docker service ps, et leur adresse' trouvé à l'aide de

docker inspect <taskID> \
    --format '{{ range .NetworksAttachments }}{{ .Addresses }}{{ end }}'

Le Problème

Une requête HTTP avec un en-tête 'de l'Hôte:whoami.docker' envoyé à l'adresse IP du gestionnaire de réussir quand acheminé vers le gestionnaire et ne parviennent pas à 504 Gateway Timeout lors de l'acheminés vers des Tâches de Windows sur Windows travailleur.

3voto

Miq Points 460

Il vous manque le paramètre --endpoint-mode = dnsrr pour 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
 

La définition de dnsrr en mode point final désactivera l'adresse VIP, ce qui est probablement à l'origine du problème.

0voto

Dresel Points 863

J'ai eu le même problème lors de l'utilisation de l'image stefanscherer/whoami . L'utilisation de microsoft/dotnet-samples:aspnetapp fonctionne cependant, donc l'erreur semble liée à l'image.

J'utilise la configuration suivante:

Ubuntu 16.04

  • Docker 18.03.1-ce
  • Exécuter en tant que gestionnaire
  • Exécute traefik

Windows 1803

  • Docker 18.03.1-ee-2
  • Fonctionne en tant que travailleur (rejoindre en tant que gestionnaire n'a pas fonctionné)
  • Exécute microsoft / dotnet-samples: aspnetapp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X