3 개의 노드가있는 Docker Swarm을 설정했습니다. 그것들은 모두 클러스터의 일부로 구성됩니다. 마스터 노드는 컨테이너의 호스트이기도합니다.Traefik이 같은 네트워크에서 컨테이너를 찾을 수없는 이유는 무엇입니까?
각 노드에는 중앙 집중식 데이터를 저장하기 위해 NFS에 대한 NFS 마운트가 있습니다.
전 세계의 ElasticSearch 클러스터를 만들었으므로 모든 노드에서 실행됩니다. 이것은 DNS 라운드 로빈 (dnsrr
)을 사용하여 Docker Swarm에서 실행되도록 구성됩니다. dnsrr
으로 포트 내가 19200에 요청을 대기하는 Nginx에 프록시 서버가 다음 ElasticSearch 프록시 및 ElasticSearch 노드 모두에 연결되어 9200
Traefik, 포트에서 서비스 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 프록시에 대화 형 세션을 실행하는 경우 문제없이 10.0.10.4
을 ping 할 수 있습니다.
컨테이너에는 모두 우분투가 실행됩니다. 관련된 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
당신은 정확합니다, 나는 그들을 잊었습니다. 내가 설정 한 레이블로 내 질문을 업데이트했습니다. 고맙습니다. –
nginx 서비스는 포트 19200을 노출시키지 않습니다.'docker service create --name elasticsearch_proxy \ --network elastic_cluster \ --label traefik.enable = true \ 에 '--expose 19200'을 추가해야합니다. 레이블 traefik.backend = elasticsearch_proxy \ - 레이블 traefik.port = 19200 \ - 레이블 traefik.frontend.rule = 호스트 : elasticsearch.home.turtlesystems.co.uk \ - 레이블 traefik.docker.network = elastic_cluster \ nginx : 1.13' –
나는 이것에 대해 혼란스러워합니다. Traefik은 NGinx 서비스와 동일한 네트워크에 있으므로, 포트를 노출 할 필요는 없습니다. 사실 그것은 내가하고 싶었던 것들 중 하나였습니다. 그래서 스웜에 노출 된 항구가 없었습니다. 내가 놓친 게 있니? 포트 노출에 대한 나의 이해는 직접 서비스를 공격 할 수 있도록하기 위함입니다. Traefik을 사용하여 프록시를 사용하려고합니다. –