Docker | 远程访问加密
docker的远程访问
方法一 :编辑docker.service文件 编辑docker.service文件
sudo vim /lib/systemd/system/docker.service
修改ExecStart行为下面内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
重新加载docker配置
sudo systemctl daemon-reload // 1,加载docker守护线程
sudo systemctl restart docker // 2,重启docker
方法二:修改daemon.json
的配置
下面修改daemon.json
的配置
vim /etc/docker/daemon.json
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
“unix:///var/run/docker.sock”:unix socket,本地客户端将通过这个来连接 Docker Daemon。
“tcp://0.0.0.0:2375”:tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon。
修改配置以后 然后让docker重新读取配置文件,并重启docker服务
systemctl daemon-reload
systemctl restart docker
方法三 首先是怎么配置远程访问的API:
vim /etc/default/docker
加入下面一行
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
重启docker即可:
sudo systemctl restart docker
PS:这是网上给的配置方法,也是这种简单配置让Docker Daemon把服务暴露在tcp的2375端口上,这样就可以在网络上操作Docker了。Docker本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作Docker。
通过IDEA和CA证书加密远程链接到服务器上的Docker
因为docker 默认是root 权限,允许所有人访问,直接把2375端口暴露在外网相当于直接把服务器的root 权限拱手送人,因此我们需要构建一个加密的TCP链接,以Https的方式连接到远程的docker 服务器
创建ca证书
创建一个ca文件夹:
sudo mkdir -p /usr/local/ca
cd /usr/local/ca
创建一个key
sudo openssl genrsa -aes256 -out ca-key.pem 4096
sudo openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
提示你需要输入密码和确认密码,请记住这个密码
填写一些基本的信息,国家啊,地区
生成server-key.pem
sudo openssl genrsa -out server-key.pem 4096
绑定IP或者域名
$HOST 这个值,填写你的服务器外网IP 或者服务器外网域名
sudo openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
配置白名单
sudo vim extfile.cnf
$HOST 是上一步设置的那个 $HOST,加入下列内容:
subjectAltName = DNS:106.54.84.33,IP:106.54.84.33,IP:127.0.0.1,IP:0.0.0.0
extendedKeyUsage = serverAuth
你如果希望只有指定的IP能够访问的话,请把0.0.0.0 改为指定IP,不过一般情况下,个人的网络是没有固定的公网IP的,所以建议设置成0.0.0.0,但是需要证书才能访问
生成ca-key
sudo openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
执行这一句需要输入之前设置的密码
创建客户端密钥和证书签名请求:
sudo openssl genrsa -out key.pem 4096
sudo openssl req -subj '/CN=client' -new -key key.pem -out client.csr
修改 extfile.cnf
subjectAltName = DNS:106.54.84.33,IP:106.54.84.33,IP:127.0.0.1,IP:0.0.0.0
extendedKeyUsage = clientAuth
生成签名私钥:
sudo openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
需要输入之前设置的密码
修改权限
sudo chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
现在client.csr
和server.csr
两个文件可以删除了。
docker配置ca证书
把证书复制过去
sudo cp server-*.pem /etc/docker/
sudo cp ca.pem /etc/docker/
将Docker服务停止了,然后:
修改docker 的配置
sudo vi /lib/systemd/system/docker.service
把ExecStart 的值设置为如下
/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
启动Docker守护进程,并将其挂载在2375端口。
重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
使用证书连接
复制ca.pem
,cert.pem
,key.pem
三个文件到客户端
执行命令连接:
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=192.168.211.238:2375 version
默认连接
如果想默认连接该Docker服务器,可以进行如下配置:
将ca.pem
,cert.pem
,key.pem
三个文件移动到 ~/.docker
设置环境变量:
export DOCKER_HOST=tcp://$HOST:2375 DOCKER_TLS_VERIFY=1
执行docker xxx
即默认连接Docker服务器进行操作。
通过IDEA 的docker 插件进行连接
- 默认是tcp 的,你要改成https,端口你之前设置的什么端口就是什么端口,第十二步- 选择你放证书的那个文件夹
连接到远程docker
成功连接,连接不上的,查找如下原因
1、tcp连接没换
2、端口不对
3、服务器防火墙没放端口
4、云服务器防火墙没放端口
5、证书没弄好
证书配置错误
Can't load /home/ubuntu/.rnd into RNG
139826195939776:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/ubuntu/.rnd
解决办法
进入.rnd所在目录
cd /home/ubuntu/
sudo openssl rand -writerand .rnd
--完--
- 原文作者: 留白
- 原文链接: https://zfunnily.github.io/2020/08/dockersecret/
- 更新时间:2024-04-16 01:01:05
- 本文声明:转载请标记原文作者及链接