拓扑环境(做一个安全上传下载的docker私有仓库)
整体思路:
搭建DNS服务器(本文档只做修改hosts文件操作)
安装代理服务器并根据环境配置好文件
建立CA服务器,并在代理服务器和客户端上做证书验证
在docker client做配置,完成
搭建DNS服务器(本文档只做修改hosts文件操作)
在registry server中修改好主机名
vim /etc/hostname
docker.test.comvim /etc/hosts //在registry server和Docker client都做好
192.168.1.1 docker.test.com
搭建Nginx代理服务器
yum -y install pcer-devel zlib-devel
groupadd nginx
useradd -s /sbin/nologin nginx -g nginx
tar xzf nginx-*.tar.gz -C /usr/src
cd /usr/src/nginx-*
--user=nginx //设定程序运行的用户环境
--group=nginx //设定程序运行的组环境
--prefix=PATH //设定安装目录
--with-pcre //启用pcre库,Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式
--with-http_stub_status_module //是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态
--with-http_ssl_module //开启SSL模块,支持使用HTTPS协议的网页
--with-http_realip_module //开启Real IP的支持,该模块用于从客户请求的头数据中读取Real Ip地址
--with-http_addition_module //开启Addtion模块,该模块允许你追加或前置数据到相应的主体部分
--with-http_flv_module //为Flash Video(FLV)文件 提供服务端伪流媒体支持
make && make install
编辑Nginx配置文件
# vi /opt/nginx/conf/nginx.conf
user nginx;
worker_processes 4;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream registry {
server 192.168.1.2:5000;
}
server {
listen 443 ssl;
server_name docker.test.com;
ssl_certificate /usr/local/nginx/ssl/nginx.crt;
ssl_certificate_key /usr/local/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://registry;
client_max_body_size 3000m;
proxy_set_header Host $host;
proxy_set_header X-Forward-For $remote_addr;
}
}
}
搭建CA服务器
yum -y install openssl openssl-devel
1.生成根秘钥:
openssl genrsa -out private/cakey.pem 2048
2.做自签证书
openssl req -new -x509 /etc/pki/CA/private/cakey.pem -out /etc/CA/cacert.pem
根据提示内容填写信息
3.初始化工作环境
touch /etc/pki/CA/{index.txt,serial}
echo 01 > /etc/pki/CA/serial //输入一个编号,用来以后管理办理了多少证书
4.在各节点中申请证书
1)生成各节点私钥
mkdir /usr/local/nginx/ssl
openssl genrsa -out /usr/local/nginx/ssl/nginx.key 2048
2)生成证书请求
openssl req -new -key /usr/local/nginx/ssl/nginx.key -out /usr/local/nginx/ssl/nginx.csr
这里要输入的信息必须和根证书验证时候添写的信息一样
3)把证书请求文件发送给CA服务器
scp /usr/local/nginx/ssl/nginx.csr 192.168.1.1:/etc/pki/CA/csr
4)并在CA服务器上签署证书
openssl ca -in /etc/pki/CA/csr/nginx.csr -out /etc/pki/CA/nginx.crt
5)发送给请求者
scp /etc/pki/CA/nginx.crt 192.168.1.2:/usr/local/nginx/ssl
配置docker文件并运行(在registry server中配置)
1.停止docker
systemctl stop docker
2.编辑/etc/sysconfig/docker文件,添加一行
DOCKER_OPTS=”–insecure-registry docker.benet.com –tlsverify –tlscacert /etc/pki/CA/cacert.pem”
这里需要把证书服务器上的cacert.pem发送到registry server的相应文件中
3.把根证书复制到/etc/docker/certs.d/docker.test.com/目录下
mkdir -p /etc/docker/certs.d/docker.test.com
cp /etc/pki/CA/cacert.pem /etc/docker/certs.d/docker.benet.com/ca-certificates.crt
运行私有仓库容器
1.获取官方registry镜像运行
docker pull registry
2.运行私有仓库容器并挂载在本地磁盘上
mkdir -p /data/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry docker.io/registry
docker client端配置
把docker registry服务器端的根证书追加到ca-certificates.crt文件里
先从docker registry服务器端把文件/etc/pki/CA/cacert.pem拷贝到本机,然后执行命令:
cat ./cacert.pem >> /etc/pki/tls/certs/ca-certificates.crt