Machine: regenerate-certs ne fonctionne pas sur swarm-master

Créé le 21 déc. 2015  ·  5Commentaires  ·  Source: docker/machine

Considérez ce scénario :

  • docker-machine create -d amazonec2 --swarm --swarm-master (etc)
  • tout fonctionne (nœud unique swarm-master + nœud swarm)
  • changer l'IP de l'instance amazon (dans mon cas, définir Elastic IP)
  • docker-machine détecte le changement d'IP, via _magic_ je suppose
  • docker-machine env pour la nouvelle IP se plaindra de la non-concordance de l'IP de tls cert
  • docker-machine regenerate-certs fait fonctionner à nouveau docker avec docker-machine env
  • docker-machine env --swarm cependant, agira comme si tout allait bien, mais aucune commande docker ou docker-compose ne fera rien. Aucune erreur dans cli, juste rien. Les images docker lorsque vous n'utilisez pas --swarm IP généreront une liste d'images appropriée, mais avec --swarm IP, il ne répertoriera que les en-têtes et aucune image.

Est-ce que regenerate-certs censé fonctionner avec un essaim existant ?

areswarm kinbug

Tous les 5 commentaires

Lorsque vous exécutez swarm, il écoute l'adresse IP publique lors de sa première initialisation. docker inspect sur le processus swarm manage ressemble à ceci.

{
  "Path": "/swarm",
  "Args": [
      "manage",
      "--tlsverify",
      "--tlscacert=/etc/docker/ca.pem",
      "--tlscert=/etc/docker/server.pem",
      "--tlskey=/etc/docker/server-key.pem",
      "-H",
      "tcp://0.0.0.0:3376",
      "--strategy",
      "spread",
      "--advertise",
      "PUBLICIP:2376",
      "--replication",
      "etcd://ectd.host:2379/swarm"
    ]
}

La solution de contournement rapide (et un peu paresseuse) que j'ai trouvée consiste simplement à réexécuter la commande docker-machine mais à utiliser le pilote générique à la place pour configurer swarm.

docker-machine --debug create NEWNAME -d generic \
--generic-ip-address SERVERIP \
--generic-ssh-key KEYPATH \
--generic-ssh-user core \
--engine-label public=false \
--swarm \
--swarm-master \
--swarm-opt replication \
--swarm-discovery=etcd:/URL:PORT/swarm \
--engine-opt "cluster-store=etcd://URL:PORT/store" \
--engine-opt "cluster-advertise=eth0:2376"

Merci pour cette astuce @dustinblackman. Cette solution de contournement m'aide beaucoup!
Existe-t-il une possibilité de supprimer l'une de ces machines après avoir régénéré le maître de l'essaim ?
Cela semble un peu confus lorsque le même serveur est répertorié deux fois avec des noms différents.

@rm-jamotion Sans utiliser docker-machine rm ? Vous pouvez supprimer le dossier des machines dans ~/.docker/machine/machines .

@dustinblackman Oui, je sais, mais je dois supprimer la première machine à l'aide du pilote aws. Mais ce serait mieux s'il était possible de supprimer la machine créée avec le pilote générique et de déplacer les clés vers la machine aws. Ainsi, les fonctionnalités de démarrage/arrêt d'aws resteront disponibles...

docker-machine version 0.7.0, build 783b3a8,

Ce n'est pas seulement une question d'adresse IP. Même sans changement d'adresse IP dans le pilote Virtualbox, j'ai remarqué que regenerate-certs générait une mauvaise utilisation des clés :

sudo openssl x509 -in /var/lib/boot2docker/server.pem -noout -text | grep -A8 "X509v3 extensions"
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment, Key Agreement
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Alternative Name: 
                DNS:localhost, IP Address:10.10.0.148

Dans les journaux du démon docker, vous pouvez trouver :

2016-07-29 13:13:58.745094 I | http: TLS handshake error from 10.10.0.60:33214: tls: failed to verify client's certificate: x509: certificate specifies an incompatible key usage

Dans les informations de docker lorsqu'ils sont connectés à swarm, tous les nœuds sont en attente et dans les journaux de swarm master :

time="2016-07-29T13:22:58Z" level=debug msg="Failed to validate pending node: The server probably has client authentication (--tlsverify) enabled. Please check your TLS client certification settings: Get https://10.10.0.60:2376/info: remote error: bad certificate" Addr="10.10.0.60:2376" 
Cette page vous a été utile?
0 / 5 - 0 notes