Harbor镜像仓库
一、Harbor特性介绍
- 基于角色访问控制
每个人角色不同,需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。例如,开发人员需要对项目构建这就需要用到读写权限(push/pull),测试人员只需要读权限(pull),运维一般管理镜像仓库,具备权限分配能力,项目经历具有所有权限。
在 Harbor 中,有三种角色:
(1)Guest:对指定项目有只读权限。
(2)Developer:开发,读写项目的权限。
(3)Admin:管理者,所有权限。
Anonymous:当用户未登录时,该用户被设为匿名用户。匿名用户不能访问私有项目,只能访问公开项目。
- 镜像复制
可以将仓库中的镜像同步到远程的 Harbor。
- LDAP
Harbor 支持 LDAP 认证,可以很轻易接入已有的 LDAP。
- 镜像删除和空间回收
Harbor 支持在 Web 删除镜像,回收无用的镜像,释放磁盘空间。
- 图形页面管理
用户很方面搜索镜像及项目管理
- 审计
对仓库的所有操作都有记录
- RESET API
完整的API,方便与外部集成。
- Proxy:对应启动组件nginx。它是一个nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务
- UI(Core Service):对应启动组件harbor-ui。底层数据存储使用mysql数据库,主要提供了四个子功能:Registry:对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token
- UI:一个web管理页面ui
- API:Harbor暴露的API服务
- Auth:用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现
- Token服务(上图中未体现):负责根据用户在每个project中的role来为每一个docker push/pull命令issuing一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token
- Admin Service:对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置
- Job Sevice:对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log
- Log Collector:对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起
- DB:对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据
安装Harbor
下载地址:https://github.com/vmware/harbor/releases
安装文档:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
环境准备:共四台主机
要安装好docker,docker-compose
- 两台主机当harbor,地址:192.168.1.2|192.168.1.3
- 另两台主机上传和下载镜像
这里下载的是离线包,但是要先准备好“goharbor/prepare:v1.9.1”镜像,才能离线
[root@master01 Downloads]# ll total 604604 drwxr-xr-x 2 root root 100 Aug 27 14:10 harbor -rw-r--r-- 1 root root 619113214 Aug 27 14:02 harbor-offline-installer-v1.9.1.tgz [root@master01 Downloads]# cd harbor/ [root@master01 harbor]# ll total 607872 -rw-r--r-- 1 root root 622428100 Sep 27 2019 harbor.v1.9.1.tar.gz -rw-r--r-- 1 root root 5805 Sep 27 2019 harbor.yml -rwxr-xr-x 1 root root 5088 Sep 27 2019 install.sh -rw-r--r-- 1 root root 11347 Sep 27 2019 LICENSE -rwxr-xr-x 1 root root 1748 Sep 27 2019 prepare
下载镜像goharbor/prepare
[root@master01 harbor]# ./prepare prepare base dir is set to /root/Downloads/harbor Unable to find image 'goharbor/prepare:v1.9.1' locally v1.9.1: Pulling from goharbor/prepare a1fd40743af1: Waiting 5fe2fbac9b11: Waiting 8d43177d2a4c: Waiting 557de2fd72ae: Waiting 947583f1d6b6: Waiting 77e6da92f0c8: Waiting d90d4c01ca3e: Waiting
修改配置文件harbor.yaml配置文件
hostname: 192.168.1.2 # http related config http: # port for http, default is 80. If https enabled, this port will redirect to https port port: 8081
运行安装脚本
[root@master01 harbor]# ./install.sh
[Step 0]: checking installation environment ...
Note: docker version: 19.03.12
Note: docker-compose version: 1.24.0
[Step 1]: loading Harbor images ...
使用docker-compose查看状态
[root@master01 harbor]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------- harbor-core /harbor/harbor_core Up (healthy) harbor-db /docker-entrypoint.sh Up (healthy) 5432/tcp harbor-jobservice /harbor/harbor_jobservice ... Up (healthy) harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp harbor-portal nginx -g daemon off; Up (healthy) 8080/tcp nginx nginx -g daemon off; Up (healthy) 0.0.0.0:8081->8080/tcp redis redis-server /etc/redis.conf Up (healthy) 6379/tcp registry /entrypoint.sh /etc/regist ... Up (healthy) 5000/tcp registryctl /harbor/start.sh Up (healthy)
- nginx:nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,所以开放https的443端口,它将流量分发到后端的ui和正在docker镜像存储的docker registry。
- harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了镜像仓库之前同步使用的;
- harbor-ui:harbor-ui是web管理页面,主要是前端的页面和后端CURD的接口;
- registry:registry就是docker原生的仓库,负责保存镜像。
- harbor-adminserver:harbor-adminserver是harbor系统管理接口,可以修改系统配置以及获取系统信息。
- 这几个容器通过Docker link的形式连接在一起,在容器之间通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。
- harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。由于本harbor的认证也是通过数据,在生产环节大多对接到企业的ldap中;
- harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。
- 这几个容器通过Docker link的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。
密码在harbor.yml配置文件里可以看到
Harbor使用
使用的话,先添加项目
在创建成员
把成员添加到对于的项目组里
写上刚才创建的用户名称就可以了
然后就是推送镜像了,和我们平时使用的方式是一样的
在daemon.json文件中添加仓库地址
"insecure-registries" : ["192.168.1.2"]
systemctl daemon-reload systemctl restart docker

评论