为什么Traefik不能在同一个网络上找到容器?

时间:2017-12-02 23:21:55

标签: docker-swarm traefik

我已经设置了3个节点的Docker Swarm。它们都配置为群集的一部分。主节点也是容器的主机。

每个节点都有NFS挂载到NFS以存储集中数据。

我创建了一个全局的ElasticSearch集群,因此它可以在所有节点上运行。这被配置为使用cluser中的DNS Round Robin(dnsrr)在Docker Swarm中运行。由于dnsrr不允许暴露端口,因此我有一个Nginx代理服务器,它在19200上侦听请求,然后将它们代理到端口9200上的服务elasticsearch

Traefik,ElasticSearch Proxy和ElasticSearch节点都连接到名为elastic_cluster的相同覆盖网络。网络为10.0.10.0/24

我已经配置了Traefik,因此它有一个命名主机并在端口443上回答elasticsearch.homenetwork.local(非真实域)。(我们配置了加密)并且应该转发到Nginx代理。

然而,当我尝试点击https://elasticsearch.homenetwork.local时,我在Traefik日志中收到错误:

time="2017-12-02T22:50:37Z" level=warning msg="Error forwarding to http://10.0.10.3:19200, err: dial tcp 10.0.10.3:19200: getsockopt: no route to host"

鉴于Traefik服务在10.0.10.0/24网络上,我不明白为什么会出现此错误。我使用Portainer跟踪服务,我可以看到Traefik服务的IP地址为10.0.10.4

如果我运行的交互式会话到IP地址为10.0.10.7的Nginx代理,我可以毫无问题地ping 10.0.10.4

容器都在运行Ubuntu。没有涉及iptables

有没有人见过这样的东西?我正在努力弄清楚这里有什么问题,所以如果有人有任何建议我会非常感激他们。真烦人的是,这曾经有用。我不记得改变了什么,但显然有些东西。

ElasticSearch服务命令:

docker service create --name elasticsearch \
                      --network elastic_cluster \
                      --constraint "node.labels.app_role == "elasticsearch" \
                      --mode global \
                      --endpoint-mode dnsrr \
                      docker.elastic.co/elasticsearch/elasticsearch:5.4.2 \
                      elasticsearch

ElasticSearch代理服务命令:

docker service create --name elasticsearch_proxy \
                      --network elastic_cluster \
                      --label traefik.enable=true \
                      --label traefik.backend=elasticsearch_proxy \
                      --label traefik.port=19200 \
                      --label traefik.frontend.rule=Host:elasticsearch.home.turtlesystems.co.uk \
                      --label traefik.docker.network=elastic_cluster \
                      nginx:1.13

nginx.conf - https://pastebin.com/Q5sXw6aw

Traefik服务命令

docker service create --name reverse_proxy \
                      --network elastic_cluster \
                      --network traefik-net \
                      --constraint "node.role == manager" \
                      --publish 80:80 \
                      --publish 8080:8080 \
                      --publish 443:443 \
                      traefik

traefik.toml - https://pastebin.com/GFPu8MYJ

2 个答案:

答案 0 :(得分:0)

我认为您忘记提及服务上的标签

docker service create --name elasticsearch_proxy \
                      --label traefik.docker.network=elastic_cluster
                      --label traefik.enable=true
                      --label traefik.port=19200
                      --network elastic_cluster \
                      nginx:1.13

答案 1 :(得分:0)

在所有这一切之后,我发现我遇到网络问题的原因是由于网络电缆故障。

更换后,everythig工作正常。谢谢你的所有建议。