如何使用 docker swarm ca 命令管理 Swarm CA

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 docker swarm ca 命令管理 Docker Swarm 证书颁发机构(Certificate Authority,CA)。我们将涵盖一些基本操作,包括查看当前 Swarm CA 证书,以了解其详细信息和有效性。

此外,你将探索如何轮换 Swarm CA。这包括使用新生成的证书进行常规更新来轮换 CA,使用自定义证书和密钥以满足特定安全要求来轮换 CA,以及在分离模式下执行轮换以实现后台运行。这些步骤对于维护 Docker Swarm 集群的安全性和健康状况至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/system("Manage Docker") subgraph Lab Skills docker/info -.-> lab-555239{{"如何使用 docker swarm ca 命令管理 Swarm CA"}} docker/system -.-> lab-555239{{"如何使用 docker swarm ca 命令管理 Swarm CA"}} end

查看当前 Swarm CA 证书

在这一步中,我们将学习如何查看当前的 Swarm CA 证书。Swarm CA(证书颁发机构)负责为 Docker Swarm 集群中的节点颁发证书,这些证书用于节点之间的安全通信。

要查看当前的 Swarm CA 证书,你可以使用 docker swarm ca 命令,并使用 --cert-dir 标志指定存储 Swarm 证书的目录。默认情况下,该目录为 /var/lib/docker/swarm/certificates

首先,确保你位于正确的目录中。你的默认工作目录是 ~/project

pwd

你应该会看到类似以下的输出:

/home/labex/project

现在,让我们来查看当前的 Swarm CA 证书。我们将使用 sudo,因为访问 /var/lib/docker 目录需要 root 权限。

sudo docker swarm ca --cert-dir /var/lib/docker/swarm/certificates

此命令将输出有关 Swarm CA 证书的信息,包括其有效期和颁发者。输出将类似于以下内容:

Certificate information:
------------------------
Common Name: swarm-ca
Organization:
Organizational Unit:
Country:
Province:
Locality:
Valid From: 2023-10-27 00:00:00 +0000 UTC
Valid Until: 2024-10-26 00:00:00 +0000 UTC
Issuer: CN=swarm-ca

此输出显示了当前 Swarm CA 证书的详细信息。Valid FromValid Until 字段表示证书的有效期。Issuer 字段显示了证书的颁发者,在这种情况下是 Swarm CA 本身。

使用新生成的证书轮换 Swarm CA

在这一步中,你将学习如何使用新生成的证书来轮换 Swarm CA。轮换 Swarm CA 是一项安全最佳实践,可确保 Swarm 集群内用于通信的证书得到定期更新。

当你轮换 Swarm CA 时,Docker 会生成一个新的 CA 证书和密钥,然后向 Swarm 中的所有节点颁发新证书。这个过程通常是无缝的,无需你的服务停机。

要使用新生成的证书轮换 Swarm CA,你可以使用 docker swarm ca --rotate 命令。该命令会自动生成一个新的 CA 并将新证书分发给各个节点。

确保你位于主目录 ~/project 中。

pwd

你应该会看到 /home/labex/project

现在,让我们来轮换 Swarm CA。由于此操作需要 root 权限,我们将使用 sudo

sudo docker swarm ca --rotate

你会看到表明正在轮换 CA 的输出。输出将类似于以下内容:

Swarm CA rotated.

轮换完成后,Swarm 将开始使用新的 CA 证书。Swarm 中的节点将自动更新其证书,以由新的 CA 进行签名。

要验证 CA 是否已轮换,你可以使用上一步中的命令再次查看 Swarm CA 证书:

sudo docker swarm ca --cert-dir /var/lib/docker/swarm/certificates

Valid FromValid Until 日期与之前的输出进行比较。你应该会看到 Valid From 日期现在更接近当前日期,这表明已生成了新证书。

使用自定义证书和密钥轮换 Swarm CA

在这一步中,你将学习如何使用自定义证书和密钥来轮换 Swarm CA。如果你想使用自己的 CA 基础设施,或者将 Swarm 与现有的 PKI(公钥基础设施)集成,这将非常有用。

要使用自定义证书和密钥轮换 Swarm CA,你需要在 docker swarm ca --rotate 命令中使用 --cert--key 标志,提供自定义 CA 证书和密钥文件的路径。

首先,为了演示目的,我们来创建虚拟的证书和密钥文件。在实际场景中,你会使用实际的 CA 证书和密钥。

确保你位于主目录 ~/project 中。

pwd

你应该会看到 /home/labex/project

现在,让我们创建虚拟的证书和密钥文件。我们将使用 openssl 来生成自签名证书和私钥。

openssl req -x509 -nodes -newkey rsa:2048 -keyout ~/project/custom_ca.key -out ~/project/custom_ca.crt -days 365 -subj "/CN=custom-swarm-ca"

此命令会生成一个私钥 (custom_ca.key) 和一个自签名证书 (custom_ca.crt),有效期为 365 天,通用名称为 "custom-swarm-ca"。

现在我们有了自定义证书和密钥,就可以使用这些文件来轮换 Swarm CA 了。

sudo docker swarm ca --rotate --cert ~/project/custom_ca.crt --key ~/project/custom_ca.key

你会看到表明正在使用自定义证书和密钥轮换 CA 的输出。输出将类似于以下内容:

Swarm CA rotated.

轮换完成后,Swarm 将开始使用你的自定义 CA 证书。Swarm 中的节点将自动更新其证书,以由你的自定义 CA 进行签名。

要验证 CA 是否已使用你的自定义证书进行轮换,你可以再次查看 Swarm CA 证书:

sudo docker swarm ca --cert-dir /var/lib/docker/swarm/certificates

检查输出。Issuer 字段现在应该显示你的自定义 CA 的通用名称,即 "CN=custom-swarm-ca"。

在分离模式下轮换 Swarm CA

在这一步中,你将学习如何在分离模式下轮换 Swarm CA。分离模式允许你生成新的 CA 证书和密钥,而无需立即将它们分发给 Swarm 节点。在你需要手动管理新证书分发的场景中,这种模式非常有用。

要在分离模式下轮换 Swarm CA,你可以使用 docker swarm ca --rotate --detach 命令。该命令会生成新的 CA 证书和密钥,并将它们保存到 Swarm 证书目录 (/var/lib/docker/swarm/certificates),但不会自动更新节点。

确保你位于主目录 ~/project 中。

pwd

你应该会看到 /home/labex/project

现在,让我们在分离模式下轮换 Swarm CA。由于此操作需要 root 权限,我们将使用 sudo

sudo docker swarm ca --rotate --detach

你会看到表明已在分离模式下轮换 CA 的输出。输出将类似于以下内容:

Swarm CA rotated in detached mode.

在分离模式下,新的 CA 证书和密钥会被生成并存储,但 Swarm 节点不会自动更新。然后,你需要手动将新的 CA 证书分发给 Swarm 集群中的其他节点,并指示它们重新加载配置。

要验证 CA 是否已在分离模式下轮换,你可以再次查看 Swarm CA 证书:

sudo docker swarm ca --cert-dir /var/lib/docker/swarm/certificates

你应该会看到证书的 Valid From 日期已更新,这表明已生成了新的 CA。不过,Swarm 中的节点在手动更新之前仍在使用旧的 CA。

总结

在本次实验中,你学习了如何使用 docker swarm ca 命令管理 Swarm 证书颁发机构(Certificate Authority,CA)。首先,你使用 --cert-dir 标志查看了当前的 Swarm CA 证书,以了解其详细信息,如有效期和颁发者。

随后,你探索了如何使用新生成的证书轮换 Swarm CA,这是更新 Swarm 集群内安全通信所用证书的一项重要安全实践。