Harbor镜像仓库

root
233
文章
0
评论
2020年8月27日14:46:33 评论 4133字阅读13分46秒

Harbor镜像仓库

一、Harbor特性介绍

  1. 基于角色访问控制

每个人角色不同,需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。例如,开发人员需要对项目构建这就需要用到读写权限(push/pull),测试人员只需要读权限(pull),运维一般管理镜像仓库,具备权限分配能力,项目经历具有所有权限。

在 Harbor 中,有三种角色:

(1)Guest:对指定项目有只读权限。

(2)Developer:开发,读写项目的权限。

(3)Admin:管理者,所有权限。

Anonymous:当用户未登录时,该用户被设为匿名用户。匿名用户不能访问私有项目,只能访问公开项目。

  1. 镜像复制

可以将仓库中的镜像同步到远程的 Harbor。

  1. LDAP

Harbor 支持 LDAP 认证,可以很轻易接入已有的 LDAP。

  1. 镜像删除和空间回收

Harbor 支持在 Web 删除镜像,回收无用的镜像,释放磁盘空间。

  1. 图形页面管理

用户很方面搜索镜像及项目管理

  1. 审计

对仓库的所有操作都有记录

  1. 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

 

 

 

 

 

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年8月27日14:46:33
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Centos7解决systemctl无法使用 Docker

Centos7解决systemctl无法使用

systemd整合: 因为systemd要求CAPSYSADMIN授权,从而得到了读取到宿主机cgroup的能力,Centos7中已经用fakesystemd代替了systemd来解决依赖问题。如果仍...
Dockaer网络 Docker

Dockaer网络

Dockaer网络 docker本地网络类型 查看本地支持网络类型 docker network ls # docker network ls NETWORK ID NAME DRIVER SCOPE...
Dockerfile练习 Docker

Dockerfile练习

Dockerfile练习 实验一:要求使用centos7基础镜像,搭建httpd+sshd+php的镜像,实现httpd与sshd服务能够正常访问 创建存放dockerfile的目录 mkdir -p...
Docker-compose Docker

Docker-compose

Docker-compose 任务编排介绍 场景: 我们在工作中未来完成业务目标,首先把业务拆分成多个子任务,然后对这些子任务进行顺序组合,当子任务按照方案执行完毕后,就完成了业务目标 任务编排,就是...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: