Machine: 重新生成证书不适用于 swarm-master

创建于 2015-12-21  ·  5评论  ·  资料来源: docker/machine

考虑这个场景:

  • docker-machine create -d amazonec2 --swarm --swarm-master (等)
  • 一切正常(单节点 swarm-master + swarm 节点)
  • 更改亚马逊实例的 IP(在我的情况下,设置弹性 IP)
  • docker-machine 检测 IP 变化,通过 _magic_ 我猜
  • docker-machine env用于新 IP 会抱怨 tls cert IP 不匹配
  • docker-machine regenerate-certs使 docker 再次使用 docker-machine env
  • 然而, docker-machine env --swarm会表现得很好,但是任何 docker 或 docker-compose 命令都不会执行任何操作。 cli 中没有错误,只是什么都没有。 不使用 --swarm IP 时的 docker 图像将生成正确的图像列表,但使用 --swarm IP 它只会列出标题而没有图像。

regenerate-certs应该与现有的群体一起工作吗?

areswarm kinbug

所有5条评论

当您运行 swarm 时,它会在首次初始化时侦听公共 IP。 docker inspect swarm manage进程中的docker inspect看起来像这样。

{
  "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"
    ]
}

我发现的快速(而且有点懒惰)的解决方法只是重新运行 docker-machine 命令,但使用通用驱动程序来设置 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"

感谢@dustinblackman 的提示。 这个解决方法对我帮助很大!
重新生成 swarm master 后,是否有可能删除其中一台机器?
当同一个服务器以不同的名称列出两次时,它看起来有点混乱。

@rm-jamotion 不使用docker-machine rm ? 您可以删除~/.docker/machine/machines的机器文件夹。

@dustinblackman是的,我知道,但我必须使用 aws 驱动程序删除第一台机器。 但是如果可以删除使用通用驱动程序创建的机器并将密钥移动到aws机器会更好。 因此 aws 的启动/停止功能将保持可用...

docker-machine 版本 0.7.0,构建 783b3a8,

这不仅是 IP 地址的问题。即使在 Virtualbox 驱动程序中没有更改 IP 地址,我也注意到 regenerate-certs 会生成错误的密钥用法:

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

在 docker daemon 的日志中,您可以找到:

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

在连接到 swarm 时的 docker info 中,所有节点都处于 Pending 状态,并且在 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" 
此页面是否有帮助?
0 / 5 - 0 等级