使用Traefik的Docker Swarm Windows Worker返回Gateway Timeout

Mat*_*wes 29 tcp-ip docker docker-swarm bad-gateway traefik

目标是使用Linux服务器和运行Docker For Windows的Windows 10计算机运行混合OS Docker swarm

目前,只要将--endpoint-mode标志设置为'dnsrr',Windows工作者理论上就支持混合操作系统群.这在这里解释.然而,尝试使用traefik路由到简单的码头工人图像stefanscherer/whoami图像失败.

最小失败的例子

// 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
Run Code Online (Sandbox Code Playgroud)

Traefik成功设置了后端规则,检查我使用traefik仪表板找到由规则路由到的URL的路由,例如'10 .0.0.12:8080'.然后,我将其与每个任务的IP地址进行比较,可以查看任务docker service ps,并使用找到的地址

docker inspect <taskID> \
    --format '{{ range .NetworksAttachments }}{{ .Addresses }}{{ end }}'
Run Code Online (Sandbox Code Playgroud)

问题

发送到管理器IP的标头为"Host:whoami.docker"的HTTP请求在路由到管理器时将成功,并在路由到Windows工作服务器上的Windows任务时失败,并显示504网关超时.

Miq*_*Miq 3

您缺少对 whoami 服务的设置 --endpoint-mode=dnsrr 。

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
Run Code Online (Sandbox Code Playgroud)

设置端点模式 dnsrr 将禁用可能导致问题的 VIP 地址。