刚刚发了一篇新鲜滚热辣~Debian 10正式版安装以及部署Docker-CE的简单教程
立刻就趁热打铁~来一篇基于TLS证书验证的Portainer Docker-CE远程管理~

首先我们说说为啥要写这么一篇~~
因为有时候Docker服务器并不是只有一台,那么当机子不是特别多特别繁杂的环境的时候,用功能强大的K8s来管理,基本上就是自找麻烦。
那么我们有什么简单地办法做统一管理呢?
有!Portainer本身就支持多节点,可以组成一个简单的“松散集群”。
这里所说的松散集群,代表严格来说这也支持多Endpoint,但并没有支持复杂而且完整的故障转移或者统一资源调配。
但当节点不是特别多的时候,松散集群反而更灵活也更清晰。

那么为什么要用TLS证书呢?首先是因为安全,直接给Docker-CE部署TCP管理的话其实并没有密码。
那么废话不多说~我们开始吧~~

首先确保你的服务器有安装OpenSSL,不过Debian 10最小化安装默认是有的~
创建证书文件夹和serial等文件与文件夹

mkdir /etc/openssl
cd /etc/openssl
mkdir -p {certs,private,tls,crl,newcerts}
echo 00 > serial
touch index.txt


然后编辑/etc/ssl/openssl.conf
定义证书目录
[ CA_default ]
dir = /etc/openssl

然后开始生成私钥并自签证书

openssl genrsa -out private/cakey.pem -des 1024
openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem

输入密码以及回答问题(要记住自己回答的问题和密码哦)

然后就颁发证书,
生成证书的秘钥文件、生成证书请求、颁发证书

openssl genrsa -out private/docker.key 1024
openssl req -new -key private/docker.key -days 3650 -out docker.csr
openssl ca -in docker.csr -out certs/docker.crt -days 3650

再次回答问题以及输入密码
到这里证书签发就完成了~

下来就是部署到Docker服务上
首先创建服务文件夹以及编辑服务文件

mkdir /etc/systemd/system/docker.service.d/
vi /etc/systemd/system/docker.service.d/startup_options.conf

内容如下~,大致意思就是指定证书文件以及发布端口,这里我的发布端口是2376

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --tls \
--tlscacert /etc/openssl/cacert.pem \
--tlscert /etc/openssl/certs/docker.crt \
--tlskey /etc/openssl/private/docker.key \
 -H fd:// -H tcp://0.0.0.0:2376

然后reload一次服务列表以及重启docker服务

systemctl daemon-reload
systemctl restart docker

好了服务器端就弄好了~然后用Winscp下载服务器里面的这两份证书文件
/etc/openssl/certs/docker.crt
/etc/openssl/private/docker.key

打开主Docker服务器的Portianer
如果不知道Portainer是啥就可以翻看我之前的文章分享个入门NAS方案-第三部分,软件服务篇(Docker & Portainer)


首先打开Portianer的Endpoint菜单,可以看到现在正在本管理平台下管理的节点,直接点击 + Add endpoint按键


然后再Environment details环境细节里面填入你的Debian 10 Docker服务器的资料
TLS证书模式选择TLS with client verification only
在TLS certificate选择刚才在服务器生成并下载的docker.crt
在TLS key选择刚才在服务器生成并下载的docker.key
拖下来点击+ Add endpoint就完成了~当然你可以新建分组把这台服务器划入分组里~这里就不想细说了

添加后你就可以看到Endpoint列表里面有了这台新加的节点了

在Home里面也可以看到这台新加的Endpoint状态是up了~
好了~开始爽玩Docker吧~~~