Harbor私有仓库配置与部署
⼀、Harbor介绍
Harbor是由VMware公司开源的企业级的Docker Registry管理项⽬,Harbor主要提供Dcoker Registry管理UI,提供的功能包括:基于⾓⾊访问的控制权限管理(RBAC)、AD/LDAP集成、⽇志审核、管理界⾯、⾃我注册、镜像复制和中⽂⽀持等。Harbor的⽬标是帮助⽤户迅速搭建⼀个企业级的Docker registry服务。它以Docker公司开源的registry为基础,额外提供了如下功能:
1)基于⾓⾊的访问控制(Role Based Access Control)
2)基于策略的镜像复制(Policy based image replication)
3)镜像的漏洞扫描(Vulnerability Scanning)
4)AD/LDAP集成(LDAP/AD support)
5)镜像的删除和空间清理(Image deletion & garbage collection)
6)友好的管理UI(Graphical user portal)
7)审计⽇志(Audit logging)
8)RESTful API
9)部署简单(Easy deployment)
Harbor的所有组件都在Dcoker中部署,所以Harbor可使⽤Docker Compose快速部署。需要特别注意:由于Harbor是基于Docker Registry V2版本,所以docker必须⼤于等于1.10.0版本,docker-compose必须要⼤于1.6.0版本!
⼆、Harbor仓库结构
Harbor的每个组件都是以Docker容器的形式构建的,可以使⽤Docker Compose来进⾏部署。如果环境中使⽤了kubernetes,Harbor 也提供了kubernetes的配置⽂件。Harbor⼤概需要以下⼏个容器组成:
ui(Harbor的核⼼服务)
log(运⾏着rsyslog的容器,进⾏⽇志收集)
mysql(由官⽅mysql镜像构成的数据库容器)
Nginx(使⽤Nginx做反向代理)
registry(官⽅的Docker registry)
adminserver(Harbor的配置数据管理器)
jobservice(Harbor的任务管理服务)
redis(⽤于存储session)
Harbor是⼀个⽤于存储和分发Docker镜像的企业级Registry服务器:
2.1、harbor依赖组件
1)Nginx(Proxy代理层):Nginx前端代理,主要⽤于分发前端页⾯ui访问和镜像上传和下载流量; Harbor的registry,UI,token等服务,通过⼀个前置的反向代理统⼀接收浏览器、Docker客户端的请求,
并将请求转发给后端不同的服务
2)Registry v2:镜像仓库,负责存储镜像⽂件; Docker官⽅镜像仓库, 负责储存Docker镜像,并处理docker push/pull命令。由于我们要对⽤户进⾏访问控制,即不同⽤户对Docker image有不同的读写权限,Registry会指向⼀个token服务,强制⽤户的每次docker pull/push请求都要携带⼀个合法的token, Registry会通过公钥对token进⾏解密验证
3)Database(MySQL或Postgresql):为core services提供数据库服务,负责储存⽤户权限、审计⽇志、Docker image分组信息等数据
4)Core services(Admin Server):这是Harbor的核⼼功能,主要提供以下服务:
UI:提供图形化界⾯,帮助⽤户管理registry上的镜像(image), 并对⽤户进⾏授权
webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块
Auth服务:负责根据⽤户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这⾥,获得token后再重新向Registry进⾏请求
API: 提供Harbor,RESTful API
5)Replication Job Service:提供多个 Harbor 实例之间的镜像同步功能
6)Log collector:为了帮助监控Harbor运⾏,负责收集其他组件的log,供⽇后进⾏分析
2.2、harbor组件数据流向
1)proxy,它是⼀个nginx前端代理,主要是分发前端页⾯ui访问和镜像上传和下载流量,上图中通过深蓝⾊先标识;
2)ui提供了⼀个web管理页⾯,当然还包括了⼀个前端页⾯和后端API,底层使⽤mysql数据库;
3)registry是镜像仓库,负责存储镜像⽂件,当镜像上传完毕后通过hook通知ui创建repository,上图通过红⾊线标识,当然registry 的token认证也是通过ui组件完成;
4)adminserver是系统的配置管理中⼼附带检查存储⽤量,ui和jobserver启动时候回需要加载adminserver的配置,通过灰⾊线标识;5)jobsevice是负责镜像复制⼯作的,他和registry通信,从⼀个registry pull镜像然后push到另⼀个registry,并记录job_log,上图通过紫⾊线标识;
6)log是⽇志汇总组件,通过docker的log-driver把⽇志汇总到⼀起,通过浅蓝⾊线条标识。
三、Harbor仓库部署
3.1、注意事项
官⽅提供2种部署Harbor的⽅式:
1)在线安装: 从Docker Hub下载Harbor的镜像来安装, 由于Docker Hub⽐较慢, 建议Docker配置好加速器。
2)离线安装: 这种⽅式应对与部署主机没联⽹的情况使⽤。需要提前下载离线安装包: 到本地
在线部署⽅式:⾮常慢
1)下载Harbor最新的在线安装包
2)配置Harbor (l)
3)运⾏install.sh来安装和启动Harbor
4)Harbor的⽇志路径:/var/log/harbor
推荐系统配置:
参考⽂档:
3.2、部署记录
nginx部署前端项目3.2.1、环境准备
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21Harbor以容器的形式进⾏部署, 因此可以被部署到任何⽀持Docker的Linux发⾏版, 要使⽤Harbor,需要安装docker和docker-compose编排⼯具,并且具备如下环境:
Python2.7+
Docker Engine 1.10+
Docker Compose 1.6.0+
#====================================================================================================
[root@docker02 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@docker02 ~]# setenforce 0
setenforce: SELinux is disabled
[root@docker02 ~]# cat /etc/sysconfig/selinux
....
SELINUX=disabled
[root@docker02 ~]# systemctl stop firewalld
[root@docker02 ~]# systemctl disable firewalld
[root@docker02 ~]# firewall-cmd --state
not running
[root@docker02 ~]# python --version
Python 2.7.5
3.2.2、安装docker
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39#更新yum包
[root@docker02 ~]# yum update
#卸载旧版本 Docker
[root@docker02 ~]# yum remove docker docker-common docker-selinux docker-engine -y
#安装相关软件包
[root@docker02 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
#添加docker源
[root@docker02 ~]# yum-config-manager --add-repo mirrors.aliyun/docker-ce/linux/po
#安装docker
[root@docker02 ~]# yum -y install docker-ce
#启动docker
[root@docker02 ~]# systemctl start docker
[root@docker02 ~]# systemctl enable docker
[root@docker02 ~]# docker version
Client: Docker Engine - Community
Version:          19.03.2
API version:      1.40
Go version:        go1.12.8
Git commit:        6a30dfc
Built:            Thu Aug 29 05:28:55 2019
OS/Arch:          linux/amd64
Experimental:      false
Server: Docker Engine - Community
Engine:
Version:          19.03.2
API version:      1.40 (minimum version 1.12)
Go version:      go1.12.8
Git commit:      6a30dfc
Built:            Thu Aug 29 05:27:34 2019
OS/Arch:          linux/amd64
Experimental:    false
containerd:
Version:          1.2.6
40 41 42 43 44 45 46  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb  runc:
Version:          1.0.0-rc8
GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f  docker-init:
Version:          0.18.0
GitCommit:        fec3683
3.2.3、安装docker  compose
01 02 03 04 05 06 07 08 09 10 11 12#下载docker-compose
[root@docker02 ~]# curl -L github/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#授权
[root@docker02 ~]# chmod +x /usr/local/bin/docker-compose
#查看版本
[root@docker02 ~]# docker-compose version
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016
3.2.4、离线⽅式安装harbor
在线安装可能由于官⽹源的⽹络波动导致安装失败
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35#上传下载的离线软件包并解压
[root@docker02 ~]# ll
-rw-r--r--  1 root root 634887088 Nov 26 15:54 harbor-offline-installer-v1. [root@docker02 ~]# tar xf harbor-offline-installer-v1.
[root@docker02 ~]# ls
anaconda-ks.cfg  harbor  harbor-offline-installer-v1.
[root@docker02 ~]# cd harbor/
[root@docker02 harbor]# ll
total 623288
-rw-r--r-- 1 root root 638214056 Nov  1 11:14 harbor.v1.9.
-rw-r--r-- 1 root root      5805 Nov  1 11:l
-rwxr-xr-x 1 root root      5088 Nov  1 11:13 install.sh
-rw-r--r-- 1 root root    11347 Nov  1 11:13 LICENSE
-rwxr-xr-x 1 root root      1748 Nov  1 11:13 prepare
#配置harbor
[root@docker02 harbor]# l |grep -v "#"|grep -v "^$" hostname: 192.168.11.11  #修改成Harbao部署机⾃⾝的ip地址或域名
http:
port: 80
harbor_admin_password: Harbor12345  #harbor初始管理员密码为Harbor12345 database:
password: root123    #数据库密码
max_idle_conns: 50
max_open_conns: 100
data_volume: /data
clair:
updaters_interval: 12
jobservice:
max_job_workers: 10
notification:
webhook_job_max_retry: 10
chart:
absolute_url: disabled
log:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。