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主要的功能逐渐和信息流向。

harbor搭建helm仓库 harbor架构_运维

主要组件包括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  ##安装完成查看进程

harbor搭建helm仓库 harbor架构_运维_02

harbor搭建helm仓库 harbor架构_json_03

 

harbor搭建helm仓库 harbor架构_json_04

 

harbor搭建helm仓库 harbor架构_运维_05

 

harbor搭建helm仓库 harbor架构_json_06

  

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_07

harbor搭建helm仓库 harbor架构_容器_08

 

harbor搭建helm仓库 harbor架构_容器_09

 

harbor搭建helm仓库 harbor架构_docker_10

 

harbor搭建helm仓库 harbor架构_容器_11

 

harbor搭建helm仓库 harbor架构_json_12

 

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_13

 

harbor搭建helm仓库 harbor架构_容器_14

 

harbor搭建helm仓库 harbor架构_docker_15

 

harbor搭建helm仓库 harbor架构_docker_16

 

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

 创建一个新的虚拟机

 

harbor搭建helm仓库 harbor架构_容器_17

免密认证 

 

harbor搭建helm仓库 harbor架构_docker_18

harbor搭建helm仓库 harbor架构_运维_19

 

harbor搭建helm仓库 harbor架构_json_20

 

harbor搭建helm仓库 harbor架构_运维_21

 

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_22

 

 镜像获取地址设置为server1 

 

harbor搭建helm仓库 harbor架构_docker_23

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_24

 

harbor搭建helm仓库 harbor架构_json_25

 

harbor搭建helm仓库 harbor架构_docker_26

 

harbor搭建helm仓库 harbor架构_json_27

 

 在web端可以查到日志信息 

 

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_28

4.harbor的内容信任与扫描漏洞 

4.1 前期准备

[root@server1 harbor]# docker-compose down   ##down掉
[root@server1 harbor]# ./install.sh --with-notary --with-clair --with-chartmuseum ##三个参数分别是证书签名(内容信任),漏洞扫描,chartmuseum

 

harbor搭建helm仓库 harbor架构_运维_29

harbor搭建helm仓库 harbor架构_容器_30

 

harbor搭建helm仓库 harbor架构_运维_31

 

 4.2 内容信任 

 

harbor搭建helm仓库 harbor架构_容器_32

内容信任时server2拉取不成功 

harbor搭建helm仓库 harbor架构_json_33

 漏洞扫描 执行脚本多出来的参数的层级

harbor搭建helm仓库 harbor架构_json_34

 打包上传 

 

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_35

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_36

 

 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

harbor搭建helm仓库 harbor架构_容器_37

harbor搭建helm仓库 harbor架构_json_38

 

4.3 漏洞扫描 

 

harbor搭建helm仓库 harbor架构_容器_39

 

harbor搭建helm仓库 harbor架构_harbor搭建helm仓库_40

 

harbor搭建helm仓库 harbor架构_json_41