Docker配置带证书的远程访问监听

一、生成证书和密钥

1、准备证书目录和生成CA证书

创建证书目录

bash 复制代码
mkdir -p /etc/docker/tls
cd /etc/docker/tls

生成CA密钥和证书

bash 复制代码
openssl req -x509 -newkey rsa:4096 -keyout ca-key.pem \
-out ca-cert.pem -days 365 -nodes -subj "/CN=Docker CA"

2、为Docker守护进程(server)配置TLS证书

生成服务器密钥和证书签名请求(CSR)

bash 复制代码
openssl req -newkey rsa:4096 -keyout server-key.pem \
-out server-csr.pem -nodes -subj "/CN=192.168.XX.230"

创建一个配置文件

bash 复制代码
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = 192.168.XX.230

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.XX.230
IP.2 = 127.0.0.1
DNS.1 = localhost

使用CA证书对服务器CSR进行签名

bash 复制代码
openssl x509 -req -in server-csr.pem -CA ca-cert.pem \
-CAkey ca-key.pem -CAcreateserial -out server-cert.pem \
-days 365 -extensions v3_req -extfile openssl.cnf

2、为Docker命令(client)配置TLS证书

生成客户端密钥和证书签名请求(CSR)

bash 复制代码
openssl req -newkey rsa:4096 -keyout client-key.pem \
-out client-csr.pem -nodes -subj "/CN=client"

生成客户端密钥和证书签名请求(CSR)

bash 复制代码
openssl x509 -req -in client-csr.pem -CA ca-cert.pem \
-CAkey ca-key.pem -CAcreateserial \
-out client-cert.pem -days 365

二、配置Docker守护进程

编辑Docker守护进程的配置文件(通常是/etc/docker/daemon.json),添加以下内容

bash 复制代码
{
  "tlsverify": true,
  "tlscacert": "/etc/docker/tls/ca-cert.pem",
  "tlscert": "/etc/docker/tls/server-cert.pem",
  "tlskey": "/etc/docker/tls/server-key.pem",
  "hosts": ["tcp://0.0.0.0:2376"]
}

编辑Docker服务文件

#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

ExecStart=/usr/bin/dockerd

bash 复制代码
systemctl daemon-reload

重启Docker守护进程

bash 复制代码
sudo systemctl restart docker

三、配置Docker客户端

将生成的客户端证书和密钥放置在客户端机器上的一个目录中,例如~/.docker/tls:

bash 复制代码
mkdir -p ~/.docker/tls
cp client-cert.pem ~/.docker/tls/
cp client-key.pem ~/.docker/tls/
cp ca-cert.pem ~/.docker/tls/

在运行docker命令时,指定客户端证书和密钥:

bash 复制代码
docker --tlsverify \
  --tlscacert ~/.docker/tls/ca-cert.pem \
  --tlscert ~/.docker/tls/client-cert.pem \
  --tlskey ~/.docker/tls/client-key.pem \
  -H tcp://192.168.XX.230:2376 \
images

为了方便,可以设置环境变量以避免每次命令都指定证书路径:

export DOCKER_TLS_VERIFY=1

export DOCKER_CERT_PATH=~/.docker/tls

export DOCKER_HOST=tcp://192.168.XX.230:2376

环境变量场景,ca证书需要命名为ca.pem,否则找不到ca文件:Failed to initialize: unable to resolve docker endpoint: open /home/user1/.docker/tls/ca.pem: no such file or directory

好像也要指定,否则会报错:error during connect: Get "https://192.168.XX.230:2376/v1.45/containers/json?all=1": remote error: tls: certificate required

bash 复制代码
docker --tlscert ~/.docker/tls/client-cert.pem \
   --tlskey ~/.docker/tls/client-key.pem \
   ps -a
相关推荐
ccccczy_37 分钟前
Java 容器化实战:Docker 多阶段构建、网络设计与日志持久化在微服务中的落地
docker· spring boot· java· microservices· containerization· architecture· performance
二饭2 小时前
使用Docker安装Neo4j
docker·容器·neo4j
戴誉杰2 小时前
cloudfared 内网穿透通过docker方式遇到的问题
运维·docker·容器·cloudfared
野熊佩骑4 小时前
CentOS7二进制安装包方式部署K8S集群之CA根证书生成
linux·运维·docker·云原生·容器·kubernetes·centos
妮妮喔妮6 小时前
docker-compose端口冲突问题
运维·docker·容器
kjl53656610 小时前
docker命令
运维·docker·容器
野熊佩骑10 小时前
CentOS7二进制安装包方式部署K8S集群之ETCD集群部署
运维·数据库·云原生·容器·kubernetes·centos·etcd
Insist75317 小时前
基于OpenEuler--docker容器化部署ceph集群
ceph·docker·容器
jyan_敬言18 小时前
【Docker】docker网络配置
网络·docker·容器
2501_9200470319 小时前
k8s-pod的启动
云原生·容器·kubernetes