Docker Swarm:来自守护程序的错误响应:验证根CA证书时出错:x509:证书已过期或尚未生效

Kri*_*isT 3 x509 docker docker-swarm docker-engine

操作系统:CentOS 7 VM

Docker最新版本

执行的命令:

   1) docker swarm init
   2) docker swarm join --token SWMTKN-1-3iqtmbz55yvhxkahe2ncs7d9ebxzlzmw1pwhqzvmcemiolef63-3muc4qjs3mbvh53t8ktzzmb22 192.168.10.108:2377 
    Error: Error response from daemon: error while validating Root CA Certificate: x509: certificate has expired or is not yet valid
Run Code Online (Sandbox Code Playgroud)

如您所见,群连接给了我这个错误。此错误的原因是什么,它是从哪里来的?

关于Aditya

小智 6

发生了类似的问题,因为swarm init生成了带有开始日期的ca证书。可能是由于ntp滞后。

可以使用以下命令获取CA证书信息:

docker swarm ca | openssl x509 -noout -text
Run Code Online (Sandbox Code Playgroud)

输出将如下所示:

Certificate:
Data:
    Version: 3 (0x2)
    Serial Number:
        ...
Signature Algorithm: ecdsa-with-SHA256
    Issuer: CN=swarm-ca
    Validity
        Not Before: Oct 24 20:25:00 2018 GMT
        Not After : Oct 19 20:25:00 2038 GMT
    Subject: CN=swarm-ca
    Subject Public Key Info:
        Public Key Algorithm: id-ecPublicKey
            Public-Key: (256 bit)
            pub:
                ...
                ...
                ...
                ...
            ASN1 OID: prime256v1
            NIST CURVE: P-256
    X509v3 extensions:
        X509v3 Key Usage: critical
            Certificate Sign, CRL Sign
        X509v3 Basic Constraints: critical
            CA:TRUE
        X509v3 Subject Key Identifier:
            ...
Signature Algorithm: ecdsa-with-SHA256
     ...
     ...
     ...
     ...
Run Code Online (Sandbox Code Playgroud)

您可以看到有效期介于2018年10月24日20:25:00 GMT和10月19日20:25:00 2038 GMT之间。如果尝试加入群集的计算机在该间隔内没有时钟,它将失败并显示该错误。


小智 5

当节点中的时间不同步时会生成此错误。在最初的蜂群之后

docker swarm init
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令查看集群证书的限制时间

docker swarm ca | openssl x509 -noout -text
Run Code Online (Sandbox Code Playgroud)

您的节点时间必须介于

有效期
不早于:2019 年 2 月 20 日 10:21:00 GMT
不晚于:2039 年 2 月 15 日 10:21:00 GMT

要在 Linux 中设置节点时间,可以使用“timedatectl”命令

对于自动同步时间,可以在每个节点使用follow命令

timedatectl set-timezone asia/Tehran
timedatectl set-ntp on
Run Code Online (Sandbox Code Playgroud)

你可以显示所有时区

timedatectl list-timezones
Run Code Online (Sandbox Code Playgroud)