2017-12-02 4 views
0

3つのノードを持つDocker Swarmをセットアップしました。それらはすべてクラスタの一部として構成されています。マスターノードはコンテナのホストでもあります。Traefikが同じネットワーク上のコンテナを見つけることができないのはなぜですか?

各ノードには、集中化されたデータを格納するNFSへのNFSマウントがあります。

グローバルなElasticSearchクラスタを作成しているので、すべてのノードで実行されます。これは、DNSラウンドロビン(dnsrr)を使用してDocker Swarmで実行されるように構成されています。 dnsrrは、ポートを露出することはできませんので、私は19200の要求をリッスンし、その後9200

Traefik、ElasticSearch ProxyとElasticSearchノードが全てに接続されているポート上のサービスelasticsearchにそれらをプロキシnginxのプロキシサーバーを使用しています同じオーバレイネットワークelastic_clusterと呼ばれます。ネットワークは10.0.10.0/24です。

Traefikが名前付きホストを持ち、ポート443でelasticsearch.homenetwork.local(実ドメインではない)に応答するように設定しました。(暗号化が設定されました)、Nginxプロキシに転送する必要があります。 Traefikサービスは、私はこのエラーを取得する理由を私は理解していない10.0.10.0/24ネットワーク上にあることを考えると

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" 

:私がしようとするとhttps://elasticsearch.homenetwork.localを打ったとき

は、しかし、私はTraefikログにエラーが発生します。私はPortainerを使ってサービスを追跡しています.TraefikサービスのIPアドレスは10.0.10.4です。

IPアドレスが10.0.10.7のNginxプロキシとの対話セッションを実行すると、問題なく10.0.10.4にpingすることができます。

コンテナはすべて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 serviceコマンド

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

答えて

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 
+0

あなたは正しいです、私はそれらを忘れました。私は設定したラベルで質問を更新しました。ありがとうございました。 –

+0

あなたは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' –

+0

私はこれについて混乱しています。 TraefikはNGinxサービスと同じネットワーク上にあるので、ポートを公開する必要はありません。実際、それは私がスワームに暴露された港がないためにやりたいことの一つでした。何か不足していますか?ポートを公開することについての私の理解は、サービスを直接打つことができるようにすることです - 私はTraefikをここで代理することを試みています。 –

関連する問題