Docker不仅仅只能本地管理,也可以远程连接,很多应用就需要用到它,但是默认的连接端口2375并不加密,总感觉不安全,所以我们需要开启TLS并使用2376端口。
具体操作步骤:
首先,在远端的docker宿主主机上新建个文件夹,保存生成的 CA 私钥和公钥文件:
mkdir ~/ca cd ~/ca
依次执行以下命令:
openssl genrsa -aes256 -out ca-key.pem 4096
这里需要输入一个密码,请牢记这个密码,后面要用到
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
这里需要输入密码、国家、省、市、组织、单位、Common name、邮箱等。Common name填写 ip地址
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
注意,将/CN=后面的$HOST替换成docker所在主机的域名或者IP地址。
echo subjectAltName = DNS:$HOST,IP:0.0.0.0 >> extfile.cnf
同样要替换$HOST为docker所在主机的域名或者IP地址
由于这是服务器公钥,所以这里的IP是指服务器IP。上面是允许所有IP远程访问,也可以只允许指定的IP访问。例如,只允许192.88.9.8进行连接
将 Docker 守护程序密钥的扩展使用属性设置为仅用于服务器身份验证:
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
rm -v client.csr server.csr extfile.cnf extfile-client.cnf
默认umask值为 022,您的密钥对您和您的组来说是世界可读和可写的。
为保护您的密钥免受意外损坏,请移除其写入权限。要使它们只能由您读取,请按如下方式更改文件模式:
chmod -v 0400 ca-key.pem key.pem server-key.pem
证书可以是全世界可读的,但您可能希望删除写入权限以防止意外损坏:
chmod -v 0444 ca.pem server-cert.pem cert.pem
cp {ca,server-*}.pem /etc/docker/
注意:基于 TLS 的 Docker 应该在 TCP 端口 2376 上运行。
一般是使用service管理docker daemon,配置:
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376
修改后记得reload一下
systemctl daemon-reload
重启docker daemon服务:
systemctl restart docker
使用scp命令拉取服务器上的客户端秘钥和签名证书:
C:\Users\xxx> scp root@$HOST:~/ca/{ca,cert,key}.pem ./.ca/docker
同样将 $HOST 替换成docker daemon所在服务器的ip或域名
本文作者:Jackie.H
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!