聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长

Enable HTTPS in dockerd

2021-05-08 13:18 浏览: 5352 次 我要评论(0 条) 字号:

在Ubuntu中安装Docker后,默认监听本地的socket地址,可以通过/etc/systemd/system/multi-user.target.wants/docker.service看到启动参数为ExecStart=/usr/bin/dockerd -H fd://,如果我们想通过远程访问的方式连接到这台主机,使用这台主机的Docker,则需要添加如下参数:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert /etc/docker/ssl/ca.pem --tlscert /etc/docker/ssl/cert.pem --tlskey /etc/docker/ssl/key.pem
其中使用到的证书可以通过如下命令来生成:
# 创建CA的私钥和公钥
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

# 创建服务端的密钥
openssl genrsa -out server-key.pem 4096

# 创建证书签名请求
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

# 为服务端的公钥签发证书(注意修改IP地址为连接发起方的IP地址)
echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 365 -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 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem 
  -CAcreateserial -out cert.pem -extfile extfile-client.cnf

# 删除中间文件

# 将{ca,server-key,server-cert}.pem拷贝至/etc/docker/ssl
# 将{ca,key,sert}.pem拷贝至客户端的~/.docker目录
然后重新加载配置,并重启docker,使用如下命令即可:
sudo systemctl deamon-reload
sudo systemctl restart docker
重启完成后,在将/etc/docker/ssl内的文件拷贝到需要远程访问的主机内,一般我们使用目录~/.docker,然后在该主机上配置环境变量:
DOCKER_CERT_PATH=$HOME/.docker
DOCKER_HOST=tcp://IP:PORT
DOCKER_TLS_VERIFY=1
然后执行命令docker info难即可。 PS:Ubuntu每次升级docker都会重置docker.service内的内容,如何持久化上面的修改,还待改进。 PS:上面的证书签发了1年的时候,过期后重新执行签发证书操作即可。

The post Enable HTTPS in dockerd first appeared on AgilePHP.net.



网友评论已有0条评论, 我也要评论

发表评论

*

* (保密)

Ctrl+Enter 快捷回复