Docker的TLS认证和Portainer配置
请先确保Docker在服务器上的正常安装
docker -v 查看当前docker版本并确认安装docker指令
建立证书授权中心
-
第一步:确保系统安装了openssl
which openssl
-
*第二步*: 默认情况下,宿主机中有一个/etc/docker/目录,待会我们用这个目录来保存我们的CA和相关资料,当然,也可以使用自定义的其他文件路径
ls /etc/docker
-
第三步:进入上面那个目录,生成一个私钥,命令如下,在创建私钥的过程中,我们需要为CA秘钥设置一个密码(要自己记住这个密码,在新CA中,我们需要用这个秘钥来创建并对证书签名)
cd /etc/docker echo 01 | sudo tee ca.srl sudo openssl genrsa -des3 -out ca-key.pem
-
之后会生成一个名为ca-key.pem的新文件,这个文件是我们的CA的秘钥(不要把这个文件透露出去,也不能丢失这个文件)
-
第四步:现在我们来创建一个CA证书
除了密码,其他信息可以直接按enter跳过输入
sudo openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem
-
上面命令输入之后会传建一个ca.pem文件,这个文件就是我们的CA证书,我们后面会使用这个文件来验证连接的安全性。
-
现在我们有了自己的CA,让我们用它为我们的Docker服务器创建证书和秘钥
创建服务器的证书签名和秘钥
-
第一步:创建服务器密钥
sudo openssl genrsa -des3 -out server-key.pem
之后会创建一个密钥server-key.pem。
-
第二步:现在让我们创建服务器的证书签名请求(CSR)
sudo openssl req -new -key server-key.pem -out server.csr
注意!!!!:其中的Common Name比较重要,这个选项的值要么为Docker服务器(即从DNS中解析后得到的结果,比如docker.example.com)的FQDN(fully qualified domain name,完全限定域名)形式,要么为*(这将允许在任何服务器上使用该服务器证书)。
之后生成一个server.csr文件。
-
第三步:现在让我们来对CSR进行签名并生成服务器证书
sudo openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem
上面命令输入完成之后会生成一个名为server-cert.pem的文件,这个文件就是我们的服务器证书。
-
第四步:现在就让我们来清除服务器密钥的密码,如下所示
- 输入命令之后,我们要输入先前设置的服务器密钥的密码(见上面第一步)。
- 我们不想在Docker守护进程启动的时候再输入一次密码,因此需要清除它。
sudo openssl rsa -in server-key.pem -out server-key.pem
-
第五步:将文件下载到本地,然后给服务器上的文件设置严格的权限
sudo chmod 0600 /etc/docker/server-key.pem /etc/docker/server-cert.pem /etc/docker/ca-key.pem /etc/docker/ca.pem
需要下载server-cert.pem和server-key.pem到本地,后续配置Portainer的时候需要用到
Docker启用TLS认证配置
-
第一步修改docker.service配置
#查找docker.service 在哪里 sudo find / -name docker.service #这里的文件地址也可能在 sudo vim /etc/systemd/system/docker.service
-
修改ExecStart
#非TLS都是从2375进行remote连接 #ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock #2022.07.13 lizhengyang 修改docker remote配置添加TLS认证,docker的TLS端口默认2376 ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem
-
第二步:之后重启Docker服务,然后再重启Docker守护进程,之后查看守护进程的状态。
sudo systemctl daemon-reload sudo service docker restart sudo service docker status
Portainer配置
登录Portanier管理网页
进入节点配置
- 开启TLS认证
- 连接端口为2376
- 选择TLS with client verification only (只校验客户端)
- 点击update endpoint
- 回到home界面,尝试进入配置的服务器节点(页面可能没刷新,显示节点还是down,尝试点进去看下)
- 如果是新增的,选择Docker节点,然后填写对应的表单
如果有报错,大概率是防火墙的问题,需要修改防火墙规则(确认下是否可以直接关闭防火墙)
至此,Docker的TLS配置和Portainer配置修改完毕