用户安全认证的registry server

创建registry server端

1.下载registry2.2镜像

docker pull registry:2.2
2.生成自签名证书,如果是购买的证书就不用了,直接用购买的证书即可。假如域名是:test.docker.com
创建目录:
mkdir registry && cd registry && mkdir certs && cd certs
openssl req -x509 -days 3650 -subj '/CN=test.docker.com/' -nodes -newkey rsa:2048 -keyout registry.key -out registry.crt
3.生成用户和密码
cd .. && mkdir auth
docker run --entrypoint htpasswd registry:2.2 -Bbn testuser password > auth/htpasswd
用户:testuser 密码:password 可随便填写自己想填写的
4.启动registry server
docker run -d –p 5000:5000 --restart=always --name registry -v `pwd`/auth:/root/registry/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/root/registry/auth/htpasswd -v `pwd`/certs:/root/registry/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/registry/certs/registry.crt -e REGISTRY_HTTP_TLS_KEY=/certs/registry.key -v /data:/var/lib/registry registry:2.2

确认registry server是UP状态,docker ps | grep registry

配置docker client端

同registry server在同一台服务器上配置:

1.创建证书目录(没有此目录自己创建,注意端口号)
mkdir -p /etc/docker/certs.d/test.docker.com:5000
2.下载证书
cp  /root/registry/certs/registry.crt   /etc/docker/certs.d/test.docker.com:5000
3.域名解析,如果有DNS解析无需做此步骤(registry-server-ip=192.168.1.10)

echo 192.168.1.10  test.docker.com >> /etc/hosts

其他主机配置:
1.创建证书目录(没有此目录自己创建,注意端口号)

mkdir -p /etc/docker/certs.d/test.docker.com:5000
2.下载证书
scp -r root@192.168.1.10:~/registry/certs/registry.crt   /etc/docker/certs.d/test.docker.com:5000
3.域名解析,如果有DNS解析无需做此步骤(registry-server-ip=192.168.1.10)
echo 192.168.1.10  test.docker.com >> /etc/hosts


验证测试

1.登陆(注意加端口号)
docker login  test.docker.com:5000
2.输入用户testuser,密码password以及邮箱
3.更改镜像tag
docker tag busybox  test.dockercom:5000/busybox:1.0
4.push镜像

docker push  test.docker.com:5000/busybox:1.0


docker registry v1 与docker registry v2的区别:

一、版本内容上的改进

1、registry v1 通过 id 来判断镜像是否存在,客户需不需要重新 push,而由于镜像内容和 id 无关,再重新 build 后 layer 在内容不变的情况下很可能 id 发生变化,造成无法利用 registry 中已有 layer 反复 push 相同内容。服务器端也会有重复存储造成空间浪费。
2、尽管 id 由 32 字节组成但是依然存在 id 碰撞的可能,在存在相同 id 的情况下,后一个 layer 由于 id 和仓库中已有 layer 相同无法被 push 到 registry 中,导致数据的丢失。用户也可以通过这个方法来探测某个 id 是否存在。
3、同样是由于这个原因如果程序恶意伪造大量 layer push 到 registry 中占位会导致新的 layer 无法被 push 到 registry 中。
二、安全性改进
除了对 image 内容进行唯一性哈希外,新版 registry 还在鉴权方式以及 layer 权限上上进行了大幅度调整。
三、鉴权方式改进
旧版本的服务鉴权模型如下图所示:
 
该模型每次 client 端和 registry 的交互都要多次和 index 打交道,新版本的鉴权模型去除了上图中的第四第五步,如下图所示:
 
新版本的鉴权模型需要 registry 和 authorization service 在部署时分别配置好彼此的信息,并将对方信息作为生成 token 的字符串,已减少后续的交互操作。新模型客户端只需要和 authorization service 进行一次交互获得对应 token 即可和 registry 进行交互,减少了复杂的流程。同时 registry 和 authorization service 一一对应的方式也降低了被攻击的可能。
四、权限控制
旧版的 registry 中对 layer 没有任何权限控制,所有的权限相关内容都由 index 完成。在新版 registry 中加入了对 layer 的权限控制,每个 layer 都有一个 manifest 来标识该 layer 由哪些 repository 共享,将权限做到 repository 级别。
五、Pull 性能改进
旧版 registry 中镜像的每个 layer 都包含一个 ancestry 的 json 文件包含了父亲 layer 的信息,因此当我们 pull 镜像时需要串行下载,下载完一个 layer 后才知道下一个 layer 的 id 是多少再去下载
六其他改进
全新的 API
push 和 pull 支持断点
后端存储的插件化
notification 机制


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值