搭建远程容器仓库harbor、漏洞扫描和内容信任
1、harbor简介
(1)虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
(2)Harbor是由VMware公司开源的企业级的Docker Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。
(3)它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP 集成,日志审核等功能。
harbor的主要功能:基于角色的访问控制、基于镜像的复制策略、图形化用户界面、支持 AD/LDAP、镜像删除和垃圾回收、审计管理、RESTful API、部署简单。
harbor的整体架构如下
2、harbor的安装
提供在线和离线两种安装工具,本文使用离线安装,需要先安装好docker,并能上网。还需要准备有docker-compose-Linux-x86_64-1.27.0和harbor-offline-installer-v1.10.1.tgz。
docker-compose用来管理多个容器,形成一个完整独立的服务。
首先安装docker-compose:
[root@server1 ~]# ll
total 671560
-rwxr-xr-x 1 root root 1378816 Jul 21 21:18 busybox.tar
-rwxr-xr-x 1 root root 12215880 Jul 21 21:16 docker-compose-Linux-x86_64-1.27.0
-rwxr-xr-x 1 root root 674078519 Jul 21 21:17 harbor-offline-installer-v1.10.1.tgz
[root@server1 ~]# mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/ %因为docker-compose安装包是二进制文件,所以放到/usr/local/bin
[root@server1 ~]# cd /usr/local/bin/
[root@server1 bin]# ls
docker-compose-Linux-x86_64-1.27.0
[root@server1 bin]# mv docker-compose-Linux-x86_64-1.27.0 docker-compose %改名
[root@server1 bin]# ls
docker-compose
[root@server1 bin]# chmod +x docker-compose %赋予执行权限
[root@server1 bin]# docker-compose -v %查看版本号
docker-compose version 1.27.0, build 980ec85b
安装harbor:
[root@server1 ~]# tar zxf harbor-offline-installer-v1.10.1.tgz -C /usr/local/ %解压tar包
[root@server1 ~]# cd /usr/local/harbor/
[root@server1 harbor]# ls
common.sh harbor.v1.10.1.tar.gz harbor.yml install.sh LICENSE prepare
[root@server1 harbor]# vim harbor.yml %修改配置文件
hostname: reg.westos.org
certificate: /data/certs/westos.org.crt %证书和密钥路径要对
private_key: /data/certs/westos.org.key
harbor_admin_password: westos
[root@server1 harbor]# mv /root/certs/ /data/ %把之前的证书放到data路径下
[root@server1 harbor]# cd /data/
[root@server1 data]# ls
certs
[root@server1 data]# cd /usr/local/harbor/
[root@server1 harbor]# ./install.sh %执行安装脚本(时间较长耐心等待)
安装成功
开启docker-compose
查看开启状态
可以查看日志
然后在真机/etc/hosts加上该主机域名解析,reg.westos.org
在浏览器输入reg.westos.org访问出现如下界面,
因为我们是自签名证书,没有经过可信第三方,所以会显示不安全的连接,我们手动信任即可,点击advanced
confirm
访问到了,输入账户admin和设定的密码westos
成功进入harbor,可以设置中文
[root@server1 reg.westos.org]# docker login reg.westos.org %登陆reg.westos.org
Username: admin
Password: westos
Login Succeeded
[root@server1 harbor]# docker tag nginx:latest reg.westos.org/library/nginx:latest %修改标签到reg.westos.org下
[root@server1 harbor]# docker push reg.westos.org/library/nginx:latest %%上传镜像
%注意本机也要加入域名解析reg.westos.org,否则无法识别。
看网页,library中多了一个nginx镜像,上传成功
添加默认仓库路径
[root@server1 harbor]# cd /etc/docker/
[root@server1 docker]# ls
certs.d key.json
[root@server1 docker]# vim daemon.json
[root@server1 docker]# systemctl reload docker.service
[root@server1 docker]# cat daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
[root@server1 docker]# docker info %如果出现warning,下面解决
[root@server1 docker]# cd /etc/sysctl.d/
[root@server1 sysctl.d]# ls
99-sysctl.conf
[root@server1 sysctl.d]# vim docker.conf %内容如下
[root@server1 sysctl.d]# sysctl --system
server2进行同样操作并测试,将daemon.json传给server2
[root@server1 docker]# scp daemon.json server2:/etc/docker/
拉取ngnix
网页可以查看下载和上传日志
删除后还可以run 拉取仓库的nginx
接下来,对项目进行管理,首先web添加项目westos
添加用户
添加用户到项目成员
添加镜像到westos项目中
网页查看已经加入了
server2中测试拉取:
web界面查看日志
3、漏洞扫描
[root@server1 harbor]# docker logout reg.westos.org %登出
[root@server1 harbor]# docker-compose down %关闭并清理
[root@server1 harbor]# ./prepare %清理缓存
[root@server1 harbor]# ./install.sh --with-notary --with-clair --with-chartmuseum %安装时添加扫描,签名等功能
[root@server1 ~]# docker login reg.westos.org %登陆
[root@server1 ~]# docker load -i busybox.tar %加载
[root@server1 ~]# docker tag busybox:latest reg.westos.org/library/busybox:latest %改名到reg.westos.org/library/分类中
[root@server1 ~]# docker push reg.westos.org/library/busybox %上传
进入页面,查看显示未扫描
可以手动扫描
扫描结束,显示没有漏洞
或者,我们也可以使用自动扫描,并保存,之后新添加的镜像就可以自动扫描
4、内容信任
mkdir -p /root/.docker/tls/reg.westos.org:4443 %创建根证书目录
cp /certs/westos.org.crt /root/.docker/tls/reg.westos.org\:4443/ca.crt %复制证书到根证书目录
启用docker内容信任
并在web中开启内容信任并保存
之前上传的镜像是未签名,远程无法下载未签名的镜像
之后上传内容信任的镜像,在web界面显示已签名
docker push reg.westos.org/library/nginx:latest
...
Enter passphrase for root key with ID e42f679:
Enter passphrase for new repository key with ID 383f503:
%第一次要输入 root key和repository key
%之后只需要输入repository key
关闭内容信任时export DOCKER_CONTENT_TRUST=0
,在web页面也取消内容信任勾选并保存