ITPub博客

首页 > 云计算 > Docker/K8 > Docker私有仓库之Harbor神器

Docker私有仓库之Harbor神器

原创 Docker/K8 作者:jaymarco 时间:2020-09-22 10:51:30 0 删除 编辑

今天老jay为大家介绍一款开源的Harbor镜像仓库,它是用来管理docker镜像的,镜像仓库提供了可视化的Web界面去管理docker镜像操作简易,还能管理多个项目的镜像权限管理控制。下面我就给大家介绍一下Harbor自身特性和Harbor私有仓库部署。

背景

VMware 公司去年3月开源了企业级容器 Registry 项目Harbor,由VMware中国研发的团队负责开发。Harbor可帮助用户迅速搭建企业级的 registry 服务,它提供了管理图形界面, 基于角色的访问控制 RBAC,镜像远程复制(同步),AD/LDAP集成、以及审计日志等企业用户需求的功能,同时还原生支持中文和英文,深受国内外用户的喜爱。许多开源社区的开发者也给Harbor项目添砖加瓦,贡献代码、反馈问题和提出建议。在大家共同努力下,Harbor项目推出以来,在GitHub获得了近2000个点赞星星和500多个forks。

架构简介


此图来源:https://my.oschina.net/vmwareharbor/blog/650964

从上图我们可以看出,Harbor系统由以下5个组件组成:

序号

组件

组件功能

1

Proxy

提供反向代理服务,用户的不同请求由 Proxy 分发到后端的 UI 或者 Registry Harbor 中使用的是官方的 nginx 镜像。

2

Registry

Docker 官方镜像仓库, 主要提供镜像的存储和分发功能

3

Core services

Harbor 项目的核心组件,主要提供权限管理、审计、管理界面 UI token service 以及可供其他系统调用的 API 等功能

4

Database

提供数据持久化服务,采用了官方的 mysql 镜像。

5

Log Collector

负责收集其他容器的日志并进行日志轮转。

特性

  • 基于角色控制

用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限。

  • 基于镜像的复制策略 

镜像可以在多个Harbor实例之间进行复制(同步)。 适用于负载平衡,高可用性,多数据中心,混合和多云场景。

  • 支持LDAP / AD

Harbour与现有的企业LDAP / ADA集成,用于用户认证和管理。

  • 图像删除和垃圾收集

镜像可以被删除并且也可以回收镜像占用的空间。

  • 图形UI

用户可以轻松浏览,搜索镜像仓库以及对项目进行管理。

  • 审计

对存储库的所有操作都进行跟踪。

  • RESTful API

用于大多数管理操作的RESTful API,易于与外部系统集成。

  • 轻松部署

同时提供在线和离线安装程序。此外还提供了用于vSphere平台(OVA)的虚拟设备。

高可用设计

Registry高可用性(HA)是多数生产系统需要关心的问题,基本要求就是没有单点故障。通常需要根据允许服务中断的时间,以及可以承受的成本和损失,来确定采用的技术。下面介绍3种HA的方案。

 4.1 磁盘共享负载均衡分发方案



                           

这是一种比较标准的方案,就是多个的Registry实例共享同一个存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取。通过前置负载均衡进来的请求,可以分流到不同的实例中去处理,实现了负载均衡,也避免了单点故障。

 4.2 Harbor复制同步策略方案

这一种方案利用了Harbor镜像复制特性,能将多个节点间采用多主复制策略来互相复制镜像。仓库没有共享同一个存储,前置采用负载均衡进来请求,只要配置好主从项目同步复制镜像策略后镜像会自动同步到对应Harbor实例 仓库没有共享同一个存储,这种方案无法保障镜像的一致性。即使有一个实例失效,另一个实例仍然可以提供服务,从而在一定程度上可以满足HA的需求。

 4.2 HA主从方案

这种方案是利用主机的HA软件高可用来实现Harbor的HA,当节点一个Harbor节点主机故障时,HA软件会自动切换到正常的Harbor节点,另一台Harbor主机仍然可以提供服务,从而在一定程度上可以满足HA的需求。

环境安装

Harbor安装有三种方式:

1、 在线安装:安装软件从Docker hub下载Harbour的镜像, 因此安装软件包非常小。

2、离线安装:当主机没有外网访问权限时,可以去Harbor官网下载离线软件包来安装,离线软件包含预制镜像,因此文件大小较大。

3、虚拟设备:如果要安装Harbor作为vSphere集成容器(VIC)的注册表组件,或者在vSphere平台上将Harbor作为独立注册表使用,请下载OVA版本的Harbor

这里我主要讲述如何离线安装harbor仓库,另外还有两种Harbor软件安装方式有兴趣的朋友可以去参考Harbor的官方文档来验证。

1、 下载Harbor离线软件包

这里我们会以harbor 0.4.5版本为例来安装,首先要去Harbor官网去下载离线软件包harbor-offline-installer-0.4.5.tgz,然后上传服务器解压。 Harbor是由多个容器组成,因此需要借助docker-compose去加载docker-compose.yml工程配置文件来启停Harbor组件容器。

2、 配置Harbor

注意docker 1.10以后,使用的registryv2镜像仓库,必须使用https方式来访问。在Harbor中会有一个harbor.cfg文件,需要提前做好配置修改。

需要配置的参数如下:

hostname:私有仓库的主机名。可以是IP地址或是域名。

ui_url_protocol:用户访问私仓使用的协议,默认时http,这里配置成https;

harbor_admin_password:harbor的管理员账户密码,默认密码是Harbor12345 

指向正确的https证书文件目录

3、 https  证书配

修改配置文件/etc/pki/tls/openssl.cnf

指定CA服务器地址为harbor仓库服务器地址

然后执行以下命令来生成 ca.crt 和ca.key两个证书文件。注意这里的CN=XXX和IP=XXX,如果Harbor用域名来访问则XXX换成域名,如果使用的是IP访问https访问则配置ip, 将证书文件生成到 /opt/cert目录。

mkdir –p /opt/cert

openssl req  -newkey rsa:4096 -nodes -sha256  -keyout  /opt/cert/ca.key \

-subj '/C=xj/O=shsnc on  Docker/CN=192.168.56.106/emailAddress=harbor@shsnc.com  subjectAltName=IP=192.168.56.106'  \

-x509 -days 365  -out  /opt/cert/ca.crt

4、 安装并启动Harbor

在安装Harbor之前需要提前规划一个比较大的存储空间用于存储Harbor的镜像、数据库和日志。以保证后续Harbor系统运行良好。

./ prepare

系统已经提前准备好一个大的文件系统 /opt/harbor/data,我们需要在运行prepare后,需要修改/opt/harbor/docker-compose.yml文件中,并提前创建一些数据卷目录:          

mkdir -p /opt/harbor/data/registry    

mkdir -p /opt/harbor/data/log         

mkdir -p /opt/harbor/data/database    

修改docker-compose.yml文件内容如下:

执行install.sh脚本安装harbor并同时启动harbor服务

./   install.sh

此时会启动6个docker容器,可以用docker-compose ps查看harbor组件的运行时的状态。

5、 客户端访问harbor仓库

需要访问Harbor仓库的客户端,需要复制刚生成的证书:将harbor主机上的/opt/cert/ca.crt文件,复制到客户端宿主机上的:/etc/docker/certs.d/192.168.56.104/ca.crt 

权限管理和镜像复制

1.   项目权限管理

角色权限分类:

项目管理员:项目管理、用户管理、镜像管理和复制策略等权限

开发人员:只能针对自己项目镜像具有pull/push 等权限

访客:只能针对自己项目镜像具有 pull 权限

  1)给testrpo项目分配一个普通用户xinju,角色权限为开发人员       

       

2 )通过xinju 用户登录我们可以正常看到,testrpo项目,仓库中有2个镜像,权限为开发人员,只要上传和下载权限。无删除镜像权限。

3 )通过API 给项目添加用户权限(5 代表项目testrpo

1)、查看项目中拥有的权限

curl  -u "admin:Harbor12345" -X GET -H "Content-Type:  application/json" "https://192.168.56.105/api/projects/5/members/"

2)、删除项目中用户权限

curl  -u "admin:Harbor12345" -X DELETE -H "Content-Type:  application/json"  "https://192.168.56.105/api/projects/5/members/3"

3)、给项目testrpo分配一个xinju用户访问权限,并赋予开发人员角色

curl  -u "admin:Harbor12345" -X POST   -H "Content-Type: application/json"  "https://192.168.56.105/api/projects/5/members/" -d @role.json

--json文件 :roles:2代表开发人员角色,xinju代表用户

cat  role.json

{

  "roles": [

    2

  ],

  "username": "xinju"

}

2.  跨仓库数据中心复制镜像

目前Harbor支持跨数据仓库镜像远程复制功能,从某种程度上满足了镜像仓库HA高可用。但复制策略是以“项目”为中心, 通过管理员对具体项目的Harbor源端配置“复制策略”,标明需要复制的项目以及镜像到harbor目标仓库。并对它的地址和连接时使用的用户名密码进行设置。当复制策略被激活时,Harbor源项目下的所有镜像,都会被复制到harbor目标仓库;此外,当Harbor源项目下的镜像被添加或删除(push或delete), 只要策略还在激活状态,镜像的变化都会同步到harbor目标仓库上去, 如下图所示:

以下验证一下如何进行跨数据中心镜像复制功能

Harbor源仓库主机:192.168.56.105 (主节点)

Harbor目标仓库主机:192.168.56.106 (从节点)

将主节点的其中一个testrpo项目中的镜像文件同步到从节点中

1)登录Harbor源仓库web ui https:// 192.168.56.105,选择testrpo项目来做镜像同步 

2)填写需要同步的目标仓库地址

3)开启复制策略,看到下面的复制任务已完成

4)登录Harbor目标仓(https://192.168.56.106)发现目标仓库中已经同步过来了testrpo目标中有两个镜像文件。

5)同时也可以看到日志中镜像复制过程中的所有操作

 1、提供可视化的Web界面方便云计算机运维工程师来管理docker镜像,友好的操作界面使用简单又方便。

 2、提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制,Harbor的安全机制是做的比较好。

 3、支持跨数据仓库镜像远程同步功能,从某种程度上可以满足HA的需求。

 4、提供详细的RESTful API接口方便第三方开发集成。

 5、Harbor是VMware中国研发的团队负责开发社区文档资料比较丰富。

 6、Harbor系统平台不支持镜像文件自动清理,在平台上删除一些镜像却只是删除了镜像的软链接,需要人工用命令去后台清理镜像。

 7、后续会考虑如何去搭建使用Harbor高可用集群。

https://my.oschina.net/vmwareharbor/blog/650964


有需要的朋友可以关注我的公众号,文章每日一更


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28833846/viewspace-2723077/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
负责数据库、中间件、大数据等基础软件建设、优化和业务保障工作。具有10年的电信与银行企业一线/二线运维管理经验。目前专注研究云计算、中间件和数据库等领域技术研究。持有Oracle OCP、weblogic OCP、Docker容器、PGCE和阿里云ACP等认证

注册时间:2020-06-22

  • 博文量
    76
  • 访问量
    42248