©
本文档使用
php.cn手册 发布
在 Docker 1.13 及更高版本中,群集管理器使用的 Raft 日志默认在磁盘上加密。这种静态加密可以保护您的服务配置和数据免受攻击者的攻击,而攻击者可以访问加密的 Raft 日志。此功能推出的原因之一是支持新的 Docker 机密功能。
当 Docke r重新启动时,用于加密群集节点间通信的 TLS 密钥以及用于加密和解密磁盘上的 Raft 日志的密钥都会加载到每个管理器节点的内存中。Docker 1.13引入了保护相互TLS加密密钥和用于加密和解密 Raft 日志的密钥的功能,允许您拥有这些密钥的所有权并要求手动解锁管理人员。该功能称为自动锁定。
当 Docker 重新启动时,您必须先使用 Docker 在群集锁定时生成的密钥加密密钥解锁群集。您可以随时旋转此密钥加密密钥。
注意:当新节点加入群体时,不需要解锁群体,因为密钥通过相互 TLS 传播给它。
当您初始化新的群集时,可以使用该--autolock
标志在Docker 重新启动时启用群集管理器节点的自动锁定。
$ docker swarm init --autolock Swarm initialized: current node (k1q27tfyx9rncpixhk69sa61v) is now a manager.To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-0j52ln6hxjpxk2wgk917abcnxywj3xed0y8vi1e5m9t3uttrtu-7bnxvvlz2mrcpfonjuztmtts9 \ 172.31.46.109:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.To unlock a swarm manager after it restarts, run the `docker swarm unlock`command and provide the following key: SWMKEY-1-WuYH/IX284+lRcXuoVf38viIDK3HJEKY13MIHX+tTt8
将密钥存放在安全的地方,例如密码管理器。
当 Docker 重新启动时,您需要解锁群集。您会看到类似以下的错误,并且服务无法启动。
$ sudo service docker restart $ docker service ls Error response from daemon: Swarm is encrypted and needs to be unlocked before it can be used. Please use "docker swarm unlock" to unlock it.
要在现有群集上启用自动锁定,请将该autolock
标志设置为true
。
$ docker swarm update --autolock=trueSwarm updated.To unlock a swarm manager after it restarts, run the `docker swarm unlock`command and provide the following key: SWMKEY-1-+MrE8NgAyKj5r3NcR4FiQMdgu+7W72urH0EZeSmP/0Y Please remember to store this key in a password manager, since without it you will not be able to restart the manager.
要禁用自动锁定,请设置--autolock
为false
。用于读写
Raft 日志的相互 TLS 密钥和加密密钥将以未加密方式存储在磁盘上。在未加密的情况下存储加密密钥的风险与无需解锁每个管理器就能够重新启动群集的便利性之间存在折衷。
$ docker swarm update --autolock=false
在禁用自动锁定功能后,如果管理器在配置为使用旧密钥进行锁定时发生故障,请将解锁密钥保留一小段时间。
要解锁已锁定的群组,请使用docker swarm unlock
。
$ docker swarm unlock Please enter unlock key:
输入在锁定群组或旋转钥匙时生成并显示在命令输出中的加密密钥,并且群体解锁。
考虑一下你的团队按预期运行的情况,然后经理节点变得不可用。您排除故障并使物理节点重新联机,但您需要通过提供解锁密钥来解锁管理器,以便读取加密凭证和 Raft 日志。
如果自从节点离开群集后密钥没有旋转,并且群体中有法定的功能管理器节点,则可以使用docker swarm unlock-key
没有任何参数的方式查看当前的解锁密钥。
$ docker swarm unlock-key To unlock a swarm manager after it restarts, run the `docker swarm unlock`command and provide the following key: SWMKEY-1-8jDgbUNlJtUe5P/lcr9IXGVxqZpZUXPzd+qzcGp4ZYA Please remember to store this key in a password manager, since without it you will not be able to restart the manager.
如果在群组节点变得不可用并且没有前一个密钥的记录后旋转密钥,则可能需要强制经理离开群集并将其作为新经理加入群组。
您应定期轮换已锁定的群组的解锁密钥。
$ docker swarm unlock-key --rotate Successfully rotated manager unlock key.To unlock a swarm manager after it restarts, run the `docker swarm unlock`command and provide the following key: SWMKEY-1-8jDgbUNlJtUe5P/lcr9IXGVxqZpZUXPzd+qzcGp4ZYA Please remember to store this key in a password manager, since without it you will not be able to restart the manager.
警告:旋转解锁密钥时,请将旧密钥的记录保留几分钟,以便经理在获取新密钥之前关闭,但仍旧可能会锁定旧密钥。