使用公钥基础设施 (PKI) 管理群安全

Docker 中内置的 Swarm 模式公钥基础设施 (PKI) 系统 使安全部署容器编排系统变得简单。节点 在 swarm 中,使用相互传输层安全性 (TLS) 进行身份验证、授权、 并加密与 Swarm 中其他节点的通信。

当您通过运行docker swarm init,Docker 自称 作为 Manager 节点。默认情况下,管理器节点会生成新的根证书 颁发机构 (CA) 以及密钥对,用于保护通信 与加入 Swarm 的其他节点一起。如果您愿意,您可以指定自己的 外部生成的根 CA,使用--external-cadocker swarm init 命令的标志。

管理器节点还会生成两个令牌,以便在您加入其他节点时使用 到 Swarm:一个 worker token 和一个 manager token。每个令牌 包括根 CA 证书的摘要和随机生成的 秘密。当节点加入群时,加入的节点会使用摘要来 从远程管理器验证根 CA 证书。远程管理器 使用密钥来确保加入的节点是已批准的节点。

每次有新节点加入群时,管理器都会向 节点。证书包含随机生成的节点 ID 以标识节点 在证书公用名 (CN) 下和组织 单位 (OU)。节点 ID 用作 当前群中节点的生命周期。

下图说明了管理器节点和 worker 节点如何加密 通信至少使用 TLS 1.2。

TLS 图

以下示例显示了来自 worker 节点的证书中的信息:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            3b:1c:06:91:73:fb:16:ff:69:c3:f7:a2:fe:96:c1:73:e2:80:97:3b
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: CN=swarm-ca
        Validity
            Not Before: Aug 30 02:39:00 2016 GMT
            Not After : Nov 28 03:39:00 2016 GMT
        Subject: O=ec2adilxf4ngv7ev8fwsi61i7, OU=swarm-worker, CN=dw02poa4vqvzxi5c10gm4pq2g
...snip...

默认情况下,Swarm 中的每个节点每三个月更新一次证书。 您可以通过运行docker swarm update --cert-expiry <TIME PERIOD>命令。最小旋转值为 1 小时。 请参阅 docker swarm update CLI 有关详细信息,请参阅。

轮换 CA 证书

注意

Mirantis Kubernetes Engine (MKE),以前称为 Docker UCP,提供了一个外部 Swarm 的 Certificate Manager 服务。如果您在 MKE 上运行 swarm,则不应 手动轮换 CA 证书。相反,如果您需要,请联系 Mirantis 支持 以轮换证书。

如果集群 CA 密钥或管理器节点被盗用,您可以 轮换群根 CA,以便没有任何节点信任证书 不再由旧的根 CA 签名。

docker swarm ca --rotate以生成新的 CA 证书和密钥。如果你 prefer,则可以将--ca-cert--external-ca标志来指定 根证书,并使用 swarm 外部的根 CA。交互 您可以将--ca-cert--ca-key标志来指定确切的 证书和密钥。

当您发出docker swarm ca --rotate命令,以下内容 按顺序发生:

  1. Docker 会生成交叉签名证书。这意味着 新的根 CA 证书使用旧的根 CA 证书进行签名。 此交叉签名证书用作所有 新节点证书。这可确保仍然信任旧根的节点 CA 仍然可以验证由新 CA 签名的证书。

  2. Docker 还告诉所有节点立即更新其 TLS 证书。 此过程可能需要几分钟时间,具体取决于 虫群。

  3. 在 swarm 中的每个节点都拥有由新 CA 签名的新 TLS 证书后, Docker 忘记了旧的 CA 证书和密钥材料,并告诉 所有节点仅信任新的 CA 证书。

    这也会导致 swarm 的 join tokens 发生变化。上一个 join 令牌不再有效。

从此时起,所有颁发的新节点证书都使用新的 根 CA,并且不包含任何中间体。

了解更多信息

  • 了解节点的工作原理。
  • 了解 Swarm 模式服务的工作原理。