为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Docker

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

webp

    最近项目需要用到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个组件组成:

webp

、Harbor特性

基于角色控制

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

基于镜像的复制策略

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

支持LDAP / AD

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

图像删除和垃圾收集

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

图形UI

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

审计

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

RESTful API

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

轻松部署

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

、Harbor高可用设计

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

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

webp

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

2、Harbor复制同步策略方案


webp

webp

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

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

3、HA主从方案

webp

这中方案是利用主机的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

webp

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

webp

3、https证书配

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

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

webp

然后执行以下命令来生成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文件内容如下:

webp

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

./install.sh

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

webp


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,角色权限为开发人员

webp

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高可用集群。



作者:jaymarco
链接:https://www.jianshu.com/p/f7dc09a6e6ab


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消