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
相关推荐
susu10830189111 天前
docker部署 Java 项目jar
java·docker·jar
迷茫运维路1 天前
【K8S集群漏洞扫描】kube-proxy进程所监听的443端口证书过期问题分析与解决
linux·容器·kubernetes·漏洞处理
派大鑫wink1 天前
DevOps与AIOps融合:智能化运维体系构建与实战
docker·容器·kubernetes
叫致寒吧1 天前
K8s 组网方案
云原生·容器·kubernetes
mr_orange_klj1 天前
关于k8s PV的AI问答(豆包)
人工智能·容器·kubernetes
星环处相逢1 天前
K8S 概念与安装全解析:从入门到部署
云原生·容器·kubernetes
大海绵啤酒肚1 天前
WordPress部署新玩法:利用NFS存储在Kubernetes中实现数据持久化
adb·容器·kubernetes
面对疾风叭!哈撒给1 天前
Liunx之Docker安装时序数据库Tdengine:2.6.0.34
docker·时序数据库·tdengine
大都督老师1 天前
CentOS 7 系统Kubernetes环境搭建与Docker安装配置
docker·kubernetes·centos
原神启动11 天前
K8S(四)—— K8s资源管理与项目生命周期
云原生·容器·kubernetes