docker 配置安全访问

一 前言

  1. 实验机器腾讯云centos7
  2. docker启用远程管理端口默认没有ssl,容易被当作矿机使用。所以可以启用ca签发证书来加密客户端和服务端。
  3. docker版本
Client: Docker Engine - Community
 Version:           20.10.0
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        7287ab3
 Built:             Tue Dec  8 18:55:43 2020
 OS/Arch:           darwin/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:37:17 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.12
  GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

二 准备

1. yum

# yum 更新
yum update
# yum 查找包
yum list [包名] --showduplicates | sort -r 
# yum 安装包
yum install [包名] 
# yum 卸载包
yum remove [包名]

2. docker

# dockerd 服务端
dockerd 
--tlsverify                    # 是否启用tls
--tlscacert=ca.pem             # ca证书公钥
--tlscert=server-cert.pem      # ca签发服务端公钥
--tlskey=server-key.pem        # 服务端私钥
-H tcp://0.0.0.0:2375          # 开放管理ip:prot   
-H unix:///var/run/docker.sock # 绑定进程

# docker 客户端
docker 
-H=www.marsareas.top:2375   # 目标服务器ip:prot  默认连接本地docker
--tlsverify=true            # 使用tls
--tlscacert=ca.pem          # ca证书公钥
--tlscert=cert.pem          # ca签发客户端公钥
--tlskey=key.pem            # 客户端私钥
[option]                    # 其他命令。例如 version

# dockerd 重载配置
systemctl daemon-reload
# docker服务重启
systemctl restart docker
# docker服务暂停
systemctl stop docker
# docker服务状态
systemctl status docker

3.filewail

腾讯云请注意服务器的访问安全策略,可能需要界面二次添加访问入口(流量出口不需要)

# 添加防火墙开放端口
sudo firewall-cmd --zone=public --add-port=21/tcp --permanent
# 移除防火墙开放端口
sudo firewall-cmd --zone=public --remove-port=21/tcp --permanent
# 防火墙重启
sudo firewall-cmd --reload

三 配置tls

step1 生成ca证书和签发docker客户端和服务端证书

# 选择证书目录
mkdir /Users/{主机名}/ssl
cd /Users/{主机名}/ssl
# !/bin/bash
# 一键生成TLS和CA证书
# Create : 2021-12-08
# Update : 2021-12-08
# @Autor : zyj

# 服务器主机名
export SERVER="请输入主机名 or 域名 or ip"
# 密码
export PASSWORD="ca签发密码"
# 证书有效时间
export DAYS=365


# 1. 生成CA证书
# 1.1 生成CA密钥
openssl genrsa -aes256 -passout pass:$PASSWORD  -out ca-key.pem 2048
# 1.2 生成CA证书
openssl req -new -x509 -passin "pass:$PASSWORD" -days $DAYS -key ca-key.pem -sha256 -out ca.pem -subj "/CN=$SERVER"

# 2. 签发服务端TLS证书
# 2.1 生成服务端密钥
openssl genrsa -out server-key.pem 2048
# 2.2 ca签发服务端证书
openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server.csr 
openssl x509 -req -days $DAYS -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem

# 3. 签发客户端TLS证书
# 3.1 生成客户端密钥
openssl genrsa -out key.pem 2048
# 3.2 ca签发客户端证书
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
sh -c 'echo "extendedKeyUsage=clientAuth" >> extfile.cnf'
openssl x509 -req -days $DAYS -in client.csr -CA ca.pem -CAkey ca-key.pem  -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem -extfile extfile.cnf

# 4,整理文件
# 4.1 添加权限
chmod 0444 ca-key.pem server-key.pem key.pem
chmod 0444 ca.pem server-cert.pem cert.pem
# 4.2 打印文件信息
ls -la

结果

 zyj@yujingzhengdeMacBook-Pro  ~/Users/zyj/ssl  sh ./generator.sh
Generating RSA private key, 2048 bit long modulus (2 primes)
.....................+++++
..............................................................................+++++
e is 65537 (0x010001)
Generating RSA private key, 2048 bit long modulus (2 primes)
.......................+++++
....................+++++
e is 65537 (0x010001)
Signature ok
subject=CN = 请输入主机名 or 域名 or ip
Getting CA Private Key
Generating RSA private key, 2048 bit long modulus (2 primes)
...........+++++
......................................+++++
e is 65537 (0x010001)
Signature ok
subject=CN = client
Getting CA Private Key
total 104
drwxr-xr-x  14 zyj  staff   448 12  8 23:46 .
drwxr-xr-x   8 zyj  staff   256 12  8 23:08 ..
-rw-r--r--@  1 zyj  staff  6148 12  8 23:46 .DS_Store
-r--r--r--   1 zyj  staff  1766 12  8 23:46 ca-key.pem   # ca密钥
-r--r--r--   1 zyj  staff  1135 12  8 23:46 ca.pem       # ca证书
-rw-r--r--   1 zyj  staff    41 12  8 23:46 ca.srl       # 无用     
-r--r--r--   1 zyj  staff  1038 12  8 23:46 cert.pem     # ca签发客户端证书
-rw-r--r--   1 zyj  staff   887 12  8 23:46 client.csr   # 无用
-rw-r--r--   1 zyj  staff    28 12  8 23:46 extfile.cnf  # 无用
-rwxrwxrwx@  1 zyj  staff  1428 12  8 23:46 generator.sh 
-r--r--r--   1 zyj  staff  1675 12  8 23:46 key.pem      # 客户端密钥
-r--r--r--   1 zyj  staff  1013 12  8 23:46 server-cert.pem # ca签发服务端证书
-r--r--r--   1 zyj  staff  1675 12  8 23:46 server-key.pem  # 服务端密钥
-rw-r--r--   1 zyj  staff   903 12  8 23:46 server.csr  # 无用

step2 配置docker服务端证书

上传证书

# 1 建立ssl证书目录
mkdir  -p /usr/local/ssl/docker
# 2 上传服务端证书 密钥 和ca证书
rz 
ca.pem server-cert.pem server-key.pem

配置dockerd使用证书

# 1 备份配置
cp /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service.back
# 2 修改docker使用证书
vim /usr/lib/systemd/system/docker.service
# 注释
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 添加
ExecStart=/usr/bin/dockerd \
--tlsverify \
--tlscacert=/usr/local/ssl/docker/ca.pem \
--tlscert=/usr/local/ssl/docker/server-cert.pem \
--tlskey=/usr/local/ssl/docker/server-key.pem \
-H tcp://0.0.0.0:2375
# 保存
ESC :wq ENTER

# 3 重启生效docker
systemctl daemon-reload && systemctl restart docker

# 4 开启防火墙端口
sudo firewall-cmd --zone=public --add-port=2375/tcp --permanent

# 5 防火墙重启
sudo firewall-cmd --reload

step3 配置docker客户端使用证书

方式1:环境变量

# 设置证书位置 
# 客户端证书 cert.pem  
# 客户端密钥 key.pem   
# ca证书 ca.pem       
export DOCKER_CERT_PATH=/Users/zyj/ssl/

# 设置使用TLS (使用后本地docker无法连接) 不推荐
export DOCKER_TLS_VERIFY=1    

# 设置远程dockerhost (使用后本地docker无法连接)不推荐
export DOCKER_HOST= tcp://ip:port
docker version
docker -H=ip:host --tlsverify=true version 

方式2:命令行

docker -H=ip:host --tlsverify=true --tlscacert=/Users/zyj/ssl/ca.pem --tlscert=/Users/zyj/ssl/cert.pem --tlskey=/Users/zyj/ssl/key.pem  version

方式3:idea插件

docker 配置安全访问_第1张图片
在这里插入图片描述

你可能感兴趣的:(docker,#,工作经验,#,linux,docker,tls,ssl)