为什么Traefik在同一个网络上找不到容器?
Why can't Traefik find a container on the same network?
我已经设置了 Docker 包含 3 个节点的 Swarm。它们都被配置为集群的一部分。主节点也是容器的宿主。
每个节点都有一个 NFS 挂载到 NFS 以存储集中数据。
我创建了一个全局的 ElasticSearch 集群,因此它 运行 在所有节点上。这被配置为 运行 in Docker Swarm using cluser 中的 DNS Round Robin (dnsrr
)。由于 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
.
如果我 运行 与 Nginx 代理的交互式会话,其 IP 地址为 10.0.10.7
,我可以毫无问题地 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
我想你忘了提及在你的服务上设置的标签
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
经过这一切,我发现网络出现问题的原因是网线故障。
更换后一切正常。谢谢大家的建议。
我已经设置了 Docker 包含 3 个节点的 Swarm。它们都被配置为集群的一部分。主节点也是容器的宿主。
每个节点都有一个 NFS 挂载到 NFS 以存储集中数据。
我创建了一个全局的 ElasticSearch 集群,因此它 运行 在所有节点上。这被配置为 运行 in Docker Swarm using cluser 中的 DNS Round Robin (dnsrr
)。由于 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
.
如果我 运行 与 Nginx 代理的交互式会话,其 IP 地址为 10.0.10.7
,我可以毫无问题地 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
我想你忘了提及在你的服务上设置的标签
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
经过这一切,我发现网络出现问题的原因是网线故障。
更换后一切正常。谢谢大家的建议。