首页 > 其他分享 >如何锁定swarm集群?

如何锁定swarm集群?

时间:2022-10-14 14:00:07浏览次数:31  
标签:node 01 swarm 集群 key certificates 锁定 root

0、导读

看到这个问题,是不是觉得很奇怪?

 

为啥要锁定swarm集群呢?

 

你一听就明白了,在swarm集群中,raft log存储的是加密的数据,主要是secret相关的数据,raft log数据在集群的manager节点之间进行传送,传送的时候,是加密的,就是通过节点的key(密钥)进行加密、解密,同时,在使用raft log中的数据的时候,解密,也是通过swarm node key来完成的。

 

那,如果这些key要是泄漏了呢,所以,锁定swarm集群就是对这个node key进行加密。

 

避免这个key被泄露。

 

原理是这样的,事实到底是什么······

 

1、示例

 

实验的环境是一个已经搭建好的swarm集群,未开启锁定。

 

(1)查看密钥

 

[root@nccztsjb-node-01 certificates]# pwd
/var/lib/docker/swarm/certificates


[root@nccztsjb-node-01 certificates]# ls -l
total 12
-rw-r--r-- 1 root root 826 Oct 14 11:58 swarm-node.crt
-rw------- 1 root root 319 Oct 14 12:00 swarm-node.key
-rw-r--r-- 1 root root 554 Sep  6 15:44 swarm-root-ca.crt
[root@nccztsjb-node-01 certificates]# 

 

查看swarm-node.key这个节点密钥

 

[root@nccztsjb-node-01 certificates]# cat swarm-node.key 
-----BEGIN PRIVATE KEY-----
kek-version: 3663
raft-dek: EiCa16W7GEUAwmUWgrEF2Pq2DCxcAAqt7UJA9ov0RJZ7+w==

MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgtf7W1vTiH2FsobXq
5UlnsucjwQJPq99fo0RGSIP30POhRANCAAQ9ksqe9OuJxcJmvqO9Sb32YLLxEBQs
PxFXDFIVqD5JnEoJ6jDSff2u4iKX9yeUU7K7LEvsa678ALnQfjDmWZ0T
-----END PRIVATE KEY-----
[root@nccztsjb-node-01 certificates]# 

 

密钥未经过加密处理。

 

(2)锁定集群

 

docker swarm update --autolock=true

 

[root@nccztsjb-node-01 certificates]# docker swarm update --autolock=true
Swarm updated.
To unlock a swarm manager after it restarts, run the `docker swarm unlock`
command and provide the following key:

    SWMKEY-1-ow5f4fAPyDzpuK6+nO87XJRQ8IV24mwYWSFXesAbf+E

Please remember to store this key in a password manager, since without it you
will not be able to restart the manager.
[root@nccztsjb-node-01 certificates]# 

 

这个是什么意思呢?意思是说,现在集群已经锁定了,如果要重启的话,必须输入下面的key才能够进行解密。

 

更加严重的是,必须要妥善保管这个key,否则无法启动manager。

 

(3)再看swarm集群密钥

 

BEGIN ENCRYPTED PRIVATE KEY,即加密的私钥

[root@nccztsjb-node-01 certificates]# cat swarm-node.key 
-----BEGIN ENCRYPTED PRIVATE KEY-----
kek-version: 3664
raft-dek: CAESMLR6Mi+jx7HjSRi5ysTBmSJntJnXj5XcSdYjeaRWYW46uZer0ZmE0Dr0nwjn5uXTCRoYxh0zhPB/6tMvCn4EGWxH6sxHfT7spqFt

MIHeMEkGCSqGSIb3DQEFDTA8MBsGCSqGSIb3DQEFDDAOBAgupvgmBlLdJgICCAAw
HQYJYIZIAWUDBAEqBBCT8a1poeUOnKXU8BedH0BGBIGQekAKzXwoxXM5DzCAahaN
QopVuZgiOvUYp99LPQns5tiFV3Wo9y53EdQUP1k+IRky/07uiTzoc/TnKgOz02T3
C94JhprXLJ0nZNp+eiJQ0Wec8F8q8fmdRLw1tpUczWRWMskd3CL7OUfi2TivrV7s
YIGBHfgiMbfu9fdvFI1HUrG2r8GlRytPq/MbYQuxNngC
-----END ENCRYPTED PRIVATE KEY-----
[root@nccztsjb-node-01 certificates]# 

 

这样,这个私钥就被加密了,也就是说,无法通过窃取这个key来解密raft log了。

 

(4)重启docker

 

ok ,既然上面说了重启需要key,我们试试

 

重启docker

systemctl restart docker

 

查看service

[root@nccztsjb-node-01 certificates]# 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.
[root@nccztsjb-node-01 certificates]# 

 

果然,重启后,swarm集群被锁定了,无法访问了。

 

(5)解锁swarm集群

 

输入key进行解锁

[root@nccztsjb-node-01 certificates]# docker swarm unlock
Please enter unlock key: 
[root@nccztsjb-node-01 certificates]# docker service ls
ID             NAME        MODE         REPLICAS   IMAGE                                   PORTS
p5a8ef3pna87   nginx_sec   replicated   1/1        172.20.58.152/middleware/nginx:1.21.4   
[root@nccztsjb-node-01 certificates]# 

 

swarm集群已经解锁。

 

(6)更新swarm集群为不自动锁定

 

docker swarm update --autolock=false

 

[root@nccztsjb-node-01 certificates]# docker swarm update --autolock=false
Swarm updated.
[root@nccztsjb-node-01 certificates]# 

 

(7)查看密钥

 

key变为非加密的了。

[root@nccztsjb-node-01 certificates]# cat swarm-node.key 
-----BEGIN PRIVATE KEY-----
kek-version: 3675
raft-dek: EiDbu3N2vDWX6rcO/qk0yksqtoxuOpLwqHUvwhSsQEzlKA==

MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgfw2GHEV/OdAwtZou
+Oi24oBh3HF3XimKTVfxTURWtYihRANCAATkKqPLbLxsdCVmHLFYeQ7A1vZ578y9
Qb+lrPyHAfQcz1L1iKKakgeSxCqheLJluJms9Z600q9z5Tyo1gR9bXIq
-----END PRIVATE KEY-----
[root@nccztsjb-node-01 certificates]# 

 

2、初始化swarm集群是如何开启自动锁定

 

docker swarm init --autolock

 

3、总结

锁定集群的目的:对集群私钥进行加密。

 

重启之后,由于需要和manager进行通讯,自然需要密钥。所以,需要输入key.

 

docker重启时:

用于加密群节点之间通信的TLS密钥和用于加密和解密磁盘上Raft日志的密钥都被加载到每个管理节点的内存中。

 

Docker能够保护相互TLS加密密钥和用于加密和解密Raft日志的密钥,允许您获得这些密钥的所有权,并要求手动解锁管理器。这个特性被称为自动锁定。

 

手动解锁的目的:获取这个密钥的所有权。否则,无法加载到内存中,或者说,无法使用。

 

标签:node,01,swarm,集群,key,certificates,锁定,root
From: https://www.cnblogs.com/chuanzhang053/p/16791410.html

相关文章

  • 通过kubeadm搭建k8s集群
    ======通过kubeadm搭建k8s集群======1、版本统一Docker18.09.0---kubeadm-1.14.0-0kubelet-1.14.0-0kubectl-1.14.0-0---k8s.gcr.io/kube-......
  • kafka进行websocket消息分发,解决双机/集群情况下客户端与服务器的连接问题
     /***websocket消息订阅处理*/@Slf4j@Component@ServerEndpoint(value="/socket/subscribe")@ToStringpublicclassSocketSubscribeEndPoint{/**......
  • k8s中部署三节点zookeeper集群
    目录k8s中部署三节点zookeeper集群一、部署三节点zookeeper集群注意事项二、yaml文件目录k8s中部署三节点zookeeper集群一、部署三节点zookeeper集群注意事项1、使用S......
  • 大数据集群常用命令
    前提本文中的命令都是在已添加相关环境变量的情况下执行,不用再到相关的文件夹下。zookeeper启动(每台服务器上都要执行)zkServer.shstart查看状态(在需要的服务器上......
  • Centos7部署rocketmq分片集群
    目录Centos7部署rocketmq分片集群一、环境准备二、部署rocketmq2.1、下载rocketmq2.2、解压包2.3、根据实际,修改jvm参数三、修改配置文件,配置集群3.1、broker.properties文......
  • Centos7 部署es三节点集群
    目录Centos7部署es三节点集群本地dev环境es已经降级为5.6.4一、环境准备1.1、JDK1.2、禁用swap分区2.3、调整文件句柄限制2.4、调整虚拟内存限制2.5、调整线程数量限制二......
  • Elasticsearch 6.8 集群索引异常问题修复
    1[root@soar~]#curlhttp://localhost:31600/_cluster/allocation/explain?pretty2{3"index":"event20220429_v4",4"shard":3,5"primary":fa......
  • docker 安装RocketMQ集群(主从,同一服务器)
    一、安装1.选择镜像(1)镜像搜索:dockersearchrocketmq也可以访问网址:https://hub.docker.com/r/apache/rocketmq/tags(2)下拉镜像:dockerpullapache/rocketmq:4.9.0(3......
  • MySQL高可用集群MHA方案
    MySQL高可用集群MHA方案爱奇艺在用的数据库高可用方案MHA是目前比较成熟及流行的MySQL高可用解决方案,很多互联网公司正是直接使用或者基于MHA的架构进行改造实现......
  • 如何30分钟搭建kubernets集群
    ​在master上安装rancher。其他node,安装docker,不需要安装rancher。每个服务器都得说清楚master,noderancher的相关资料:​​​https://blog.51cto.com/13043516/2299949​......