美文网首页
docker swarm TLS certificate 失效的

docker swarm TLS certificate 失效的

作者: CodingCode | 来源:发表于2021-09-17 01:35 被阅读0次

    问题描述:
    docker swarm状态不正常,节点不能加入swarm集群。
    用docker info命令查看状态有类似如下错误:

    $ docker info
    ...
    Swarm: error
     NodeID:
     Error: error while loading TLS certificate in /var/lib/docker/swarm/certificates/swarm-node.crt: certificate (1 - ea84ts6urascdbgr50lrlljih) not valid after Thu, 26 Aug 2021 09:17:00 UTC, and it is currently Mon, 13 Sep 2021 15:26:56 UTC: x509: certificate has expired or is not yet valid
     Is Manager: false
     Node Address: 192.168.15.19
    ...
    

    解决办法:
    基本就是把坏的节点先从cluster里面挪出去,然后再重新加入即可。

    分几种情况:

    1. 作为worker节点坏了
    $ docker swarm leave
    $ docker swarm join --token ...
    

    然后跑到任意一个manger节点上,把之前的那个换的node删除,不然你会有两个同名node(虽然ID不同,状态不同,但看起来很难看了)。

    $ docker node rm <BAD-NODE-ID>
    
    1. 作为manager节点坏了,但是cluster还能运行,即少数的节点坏了
      和作为worker节点坏了类似处理。

    2. 整个cluster已经不能运行,作为超过半数的多数节点都坏了

    此时因为cluster已经坏点了,你不能操作任何docker swarm相关的命令;那么此时需要在一个manager节点上执行:

    $ docker swarm init --force-new-cluster
    

    来基于现有的docker环境重新初始化cluster,加了参数--force-new-cluster在swarm初始化时不会丢弃原来的swarm信息;然后再把其他的manger和worker节点按照前面的步骤,一个一个重新加进来就行了。其实都很简单哈。

    这个办法对于只有一个manager节点的cluster不适应,因为对这个情况,证书失效后,节点的manager属性变成false了,此时执行上述命令会得到当前节点不是manager节点的错误;目前我还没有找到更好的办法处理这个场景,都是用修改系统时间来完成的:

    1. $ sudo systemctl stop docker
      停止docker服务
    2. $ sudo openssl x509 -text -noout -in /var/lib/docker/swarm/certificates/swarm-node.crt
      获取当前证书的有效区间,为了下一步把系统时间设成有效区间内
    3. $ sudo date -s '<datetimestr>'
      这个时间串必须在第二步证书的有效时间内。
    4. $ sudo systemctl start docker
      启动docker
    5. $ docker swarm ca --rotate --cert-expiry <num>h
      计算出<num>为证书的有效期时间到当前的时间差(小时)。
      这一步可能会失败,如果无法连接其他worker节点,那么就先把worker节点从cluster里面删除,再重新执行命令。
    6. $ sudo systemctl stop docker
    7. $ sudo date -s '<current_datetimestr>'
    8. $ sudo systemctl start docker
    9. $ docker swarm ca --rotate
      重置--cert-expiry为缺省值(不带参数)。
    10. 重新加入其他的worker节点。

    相关文章

      网友评论

          本文标题:docker swarm TLS certificate 失效的

          本文链接:https://www.haomeiwen.com/subject/bzqjgltx.html