1.harbor介绍
1.1 Harbor是什么?
Harbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。
它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。
简单说来,Harbor封装了Docker的registry v2,帮用户提供了许多便捷管理的特性,方便用户操作。
1.2 harbor的架构
harbor的整体架构还是很清晰的,下面简单介绍一下,下图展示barbor主要的功能逐渐和信息流向。
主要组件包括proxy,他是一个nginx前端代理,主要是分发前端页面ui访问和镜像上传和下载流量,上图通过深蓝色线标志;ui提供了一个web管理页面,当然还包括了一个前端页面和后端API,底层使用mysql数据库;registry是镜像仓库,负责存储镜像文件,当镜像上传完毕后通过hook通知ui创建repositry,上图通过红色线标志,当然registry的token认证也是通过ui组件完成;adminserver是系统的配置管理中心附带检查存储用量,ui个jobservice启动时候需要加载adminserver的配置,通过灰色线标志;jobservice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log,上图通过紫色线标志;log是日志汇总组件,通过docker的log-dirver把日志汇总到一起,通过蓝色线条标志。
2. harbor的下载及安装
- 软件下载:https://github.com/goharbor/harbor/releases
- 部署:(依赖性 docker 17.06.0-ce+ and docker-compose 1.18.0+) ##compose下载
# tar zxf harbor-offline-installer-v1.10.1.tgz
# cd harbor
# vim harbor.yml
hostname: reg.westos.org ##主机名(一定要有解析)
http:
port: 80
https:
port: 443
certificate: /certs/westos.org.crt ##证书文件未知
private_key: /certs/westos.org.key ##证书密钥位置
harbor_admin_password: westos ##登陆harbor密码
database:
password: westos ##登陆数据库密码
data_volume: /data ##数据目录
# ./install.sh --with-notary --with-clair --with-chartmuseum ##(下面实验先不加后面参数,直接安装最简单的)
[root@server1 certs]# docker ps ##清空进程,保证实验的纯净
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5aa1dd21ce3e registry "/entrypoint.sh /etc…" 13 hours ago Up 13 hours 0.0.0.0:443->443/tcp, 5000/tcp registry
[root@server1 certs]# docker rm -f registry
registry
[root@server1 ~]# ll harbor-offline-installer-v1.10.1.tgz
-rwxr-xr-x 1 root root 674078519 Jan 25 09:14 harbor-offline-installer-v1.10.1.tgz
[root@server1 ~]# tar zxf harbor-offline-installer-v1.10.1.tgz
[root@server1 ~]# ll -d harbor
drwxr-xr-x 2 root root 118 Jan 25 09:18 harbor
[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
common.sh harbor.v1.10.1.tar.gz harbor.yml install.sh LICENSE prepare
[root@server1 ~]# ll docker-compose-Linux-x86_64-1.27.0 ##下载compose组件
-rwxr-xr-x 1 root root 12215880 Jan 25 09:25 docker-compose-Linux-x86_64-1.27.0
[root@server1 ~]# mv docker-compose-Linux-x86_64-1.27.0 /usr/local/bin/docker-compose
[root@server1 ~]# chmod +x /usr/local/bin/docker-compose
[root@server1 harbor]# ./install.sh ##安装最简单的默认配置
[root@server1 harbor]# docker-compose ps ##安装完成查看进程
3.2 server2拉取公共仓库镜像
[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# ls
certs.d daemon.json key.json
[root@server2 docker]# vim daemon.json
[root@server2 docker]# cat daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
[root@server2 docker]# systemctl reload docker.service
[root@server1 ~]# scp -r /etc/docker/certs.d/ server2:/etc/docker/ ##将证书文件发送给server2,不然不可以拉取
[root@server2 docker]# docker pull busybox:latest
创建一个新的虚拟机
免密认证
镜像获取地址设置为server1
在web端可以查到日志信息
4.harbor的内容信任与扫描漏洞
4.1 前期准备
[root@server1 harbor]# docker-compose down ##down掉
[root@server1 harbor]# ./install.sh --with-notary --with-clair --with-chartmuseum ##三个参数分别是证书签名(内容信任),漏洞扫描,chartmuseum
4.2 内容信任
内容信任时server2拉取不成功
漏洞扫描 执行脚本多出来的参数的层级
打包上传
4.2.1 认证
- 镜像签名:https://goharbor.io/docs/1.10/working-with-projects/working-with-images/pulling-pushing-images/
- 部署根证书:
/etc/docker/certs.d/reg.westos.org/ca.crt ##之前弄过的证书文件
~/.docker/tls/reg.westos.org:4443/ca.crt ##443端口的证书
- 启用docker内容信任:
export DOCKER_CONTENT_TRUST=1
export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443
- 上传镜像:
# docker push reg.westos.org/library/nginx:latest
...
Enter passphrase for root key with ID e42f679: ##这个key在仓库名字没有修改的情况下,再次上传不需要输入
Enter passphrase for new repository key with ID 383f503: ##这个是仓库密钥,需要输入
- 删除签名:
# docker trust revoke reg.westos.org/library/nginx:latest
4.3 漏洞扫描