Docker Remote API 并配置 TLS
一、 Docker Server 开启 remote api
注意:
方法一和方法二冲突, 只需要配置一个即可
1.1 方法一、 编辑 docker.service
ExecStart=/usr/bin/dockerd -H fd:// \ |
1.2 方法二、 编辑 /etc/docker/daemon.json
{ |
1.3 验证 remote api 是否开启
docker -H tcp://0.0.0.0:2375 version
二、 开启TLS
注意:
docker server 主机上执行
2.1 生成 CA 私钥
openssl genrsa -aes256 -out ca-key.pem 4096
2.2 生成 CA 证书
openssl req -new -x509 -days 365 -sha256 \ |
2.3 生成 Server 私钥
openssl genrsa -out server-key.pem 4096
2.4 生成 Server 证书请求
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:$HOST,IP:192.168.1.201,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
2.5 使用 CA证书 签署证书
openssl x509 -req -days 365 -sha256 -in server.csr \ |
2.6 修改 service 文件
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 \ |
systemctl daemon-reload
systemctl restart docker
三、 客户端配置
注意:
docker client 主机上执行
3.1 生成 client 私钥
openssl genrsa -out client-key.pem 4096
3.2 生成 client 证书请求
openssl req -subj '/CN=client' -new -key client-key.pem -out client.csr
3.3 使用 CA 签署证书
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 365 -sha256 \ |
3.4 访问验证
docker --tlsverify \ |
3.5 配置全局docker变量
mkdir -pv ~/.docker
cp ./ca.pem ~/.docker/ca.pem
cp ./client-cert.pem ~/.docker/cert.pem
cp ./client-key.pem ~/.docker/key.pem
export DOCKER_HOST=tcp://$HOST:2376 DOCKER_TLS_VERIFY=1
配置完成之后可以直接使用 docker ps 查看
四、 相关问题
4.1 cannot validate certificate for xx.xx.xx.xx because it doesn’t contain any IP SANs
解决: 证书生成的过程中要指定ip, 参照docker