2016-04-15 6 views
1

ich dieses Protokoll auf meinem Schwarm habe verwalten Container:Docker Schwarm TLS ausgefallener Knoten zu validieren anhängigen

time="2016-04-15T02:47:59Z" level=debug msg="Failed to validate pending node: lookup node1 on 10.0.2.3:53: server misbehaving" Addr="node1:2376" 

Ich habe einen GitHub Repo einrichten, um mein Problem zu reproduzieren: https://github.com/casertap/playing-with-swarm-tls Ich arbeite mit einer Cluster ok 2 Maschine (gebaut mit vagabundierenden)

$script2 = <<STOP 
service docker stop 
sed -i 's/DOCKER_OPTS=/DOCKER_OPTS="-H tcp:\\/\\/0.0.0.0:2376 -H unix:\\/\\/\\/var\\/run\\/docker.sock --tlsverify --tlscacert=\\/home\\/vagrant\\/.certs\\/ca.pem --tlscert=\\/home\\/vagrant\\/.certs\\/cert.pem --tlskey=\\/home\\/vagrant\\/.certs\\/key.pem"/' /etc/init/docker.conf 
service docker start 
STOP 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "ubuntu/trusty64" 

    config.vm.define "node1" do |app| 
     app.vm.network "private_network", ip: "192.168.33.10" 
     app.vm.provision "file", source: "ca.pem", destination: "~/.certs/ca.pem" 
     app.vm.provision "file", source: "node1-cert.pem", destination: "~/.certs/cert.pem" 
     app.vm.provision "file", source: "node1-priv-key.pem", destination: "~/.certs/key.pem" 
     app.vm.provision "file", source: "node1.csr", destination: "~/.certs/node1.csr" 
     app.vm.provision "docker" 
     app.vm.provision :shell, :inline => $script2 
    end 
    config.vm.define "swarm" do |app| 
     app.vm.network "private_network", ip: "192.168.33.12" 
     app.vm.provision "shell", inline: "echo '192.168.33.10 node1' >> /etc/hosts" 
     app.vm.provision "shell", inline: "echo '192.168.33.12 swarm' >> /etc/hosts" 
     app.vm.provision "docker" 
     app.vm.provision "file", source: "ca.pem", destination: "~/.certs/ca.pem" 
     app.vm.provision "file", source: "swarm-cert.pem", destination: "~/.certs/cert.pem" 
     app.vm.provision "file", source: "swarm-priv-key.pem", destination: "~/.certs/key.pem" 
     app.vm.provision "file", source: "swarm.csr", destination: "~/.certs/swarm.csr" 
    end 
end 

Wie Sie meinen node1 /etc/init/docker.conf sehen kann, hat die Optionen:

DOCKER_OPTS="-H tcp:\\/\\/0.0.0.0:2376 -H unix:\\/\\/\\/var\\/run\\/docker.sock --tlsverify --tlscacert=\\/home\\/vagrant\\/.certs\\/ca.pem --tlscert=\\/home\\/vagrant\\/.certs\\/cert.pem --tlskey=\\/home\\/vagrant\\/.certs\\/key.pem" 

ich

vagrant up

dann verbinde ich

vagrant ssh swarm 
export TOKEN=$(docker run swarm create) 
#dd182b8d2bc8c03f417376296558ba29 

docker run -d swarm join --advertise node1:2376 token://dd182b8d2bc8c03f417376296558ba29 

node1 in der Datei/etc definiert Schwarm/hosts wie Sie auf der Vagabund Bereitstellung Datei sehen können.

die mit log Debug-Level Schwarm-Manager starten (wihthout -d)

docker run -p 3376:3376 -v /home/vagrant/.certs:/certs:ro swarm -l debug manage --tlsverify --tlscacert=/certs/ca.pem --tlscert=/certs/cert.pem --tlskey=/certs/key.pem --host=0.0.0.0:3376 token://dd182b8d2bc8c03f417376296558ba29 

Das Protokoll mir zeigt:

time="2016-04-15T02:47:59Z" level=debug msg="Failed to validate pending node: lookup node1 on 10.0.2.3:53: server misbehaving" Addr="node1:2376" 

meine node1 IP-Adresse in/etc/hosts ist eigentlich:

Es scheint, dass docker versucht, den Alias ​​node1 auf dem falschen Brückennetzwerk zu suchen?

========== weitere Informationen:

Sie diese URL überprüfen, um zu sehen, wenn der Auffindungsdienst Ihre node1 gefunden und es tut:

https://discovery.hub.docker.com/v1/clusters/dd182b8d2bc8c03f417376296558ba29 

Nun, wenn Sie laufen der Schwarm-Manager mit -d und zu tun:

[email protected]:~$ docker --tlsverify --tlscacert=/home/vagrant/.certs/ca.pem --tlscert=/home/vagrant/.certs/cert.pem --tlskey=/home/vagrant/.certs/key.pem -H swarm:3376 info 
Containers: 0 
Running: 0 
Paused: 0 
Stopped: 0 
Images: 0 
Server Version: swarm/1.2.0 
Role: primary 
Strategy: spread 
Filters: health, port, dependency, affinity, constraint 
Nodes: 1 
(unknown): node1:2376 
    └ Status: Pending 
    └ Containers: 0 
    └ Reserved CPUs: 0/0 
    └ Reserved Memory: 0 B/0 B 
    └ Labels: 
    └ Error: (none) 
    └ UpdatedAt: 2016-04-15T03:03:28Z 
    └ ServerVersion: 
Plugins: 
Volume: 
Network: 
Kernel Version: 3.13.0-85-generic 
Operating System: linux 
Architecture: amd64 
CPUs: 0 
Total Memory: 0 B 
Name: ee85273cbb64 
Docker Root Dir: 
Debug mode (client): false 
Debug mode (server): false 
WARNING: No kernel memory limit support 

Sie sehen den Knoten zu sein: Bis

Antwort

1

Obwohl Sie Knoten definieren 1 in der/etc/hosts Ihres Rechners hat der Container, in dem der swarm manager läuft, in seiner Datei/etc/hosts keinen Knoten1. Standardmäßig teilt ein Container das Dateisystem des Hosts nicht. Siehe https://docs.docker.com/engine/userguide/containers/dockervolumes/. Swarm Manager versucht, Node1 durch DNS-Resolver nachzuschlagen, und schlägt fehl.

Es gibt mehrere Möglichkeiten, dies zu beheben.

  1. Verwenden Sie einen auflösbaren FQDN so Swarm-Manager im Container kann
  2. die Knoten lösen oder node1 IP in Schwarm beitreten Befehl
  3. liefern oder Pass/etc/hosts vom Host zum Swarm Manager-Container-Datei mit -v Möglichkeit. Siehe den obigen Link.
Verwandte Themen