Harbor构建私有仓库环境部署实践

Harbor构建私有仓库环境部署实践

    最近项目需要用到Harbor镜像仓库需求,花了一些时间去研究这个产品,适用后感觉它的可视化的Web界面去管理docker镜像操作简易,又提供了多个项目的镜像权限管理控制。下面把我最近学习的成果给大家分享一下,让大家了解一下Harbor自身特性和如何部署Harbor私有仓库。


一、Harbor背景

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

、Harbor架构简介

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


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

、Harbor特性

基于角色控制

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

基于镜像的复制策略

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

支持LDAP / AD

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

图像删除和垃圾收集

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

图形UI

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

审计

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

RESTful API

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

轻松部署

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

、Harbor高可用设计

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

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

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

2、Harbor复制同步策略方案


这一种方案利用了Harbor镜像复制特性,能将多个节点间采用多主复制策略来互相复制镜像。仓库没有共享同一个存储,前置采用负载均衡进来请求,只要配置好主从项目同步复制镜像策略后镜像会自动同步到对应Harbor实例

仓库没有共享同一个存储,这种方案无法保障镜像的一致性。即使有一个实例失效,另一个实例仍然可以提供服务,从而在一定程度上可以满足HA的需求。

3、HA主从方案

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

5、Harbor环境安装

Harbor安装有三种方式:

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

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

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

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

Harbor官方地址:

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

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以后,使用的registry

v2镜像仓库,必须使用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 onDocker/CN=192.168.56.106/emailAddress=harbor@shsnc.comsubjectAltName=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

、Harbor权限管理和镜像复制

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代表用户

catrole.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://github.com/vmware/harbor

http://dockone.io/article/1640

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

欢迎大家关注我的微信公众号,里面有很多相关的技术干货,也能随时联系到我。谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容