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高可用集群。
作者:jaymarco
链接:https://www.jianshu.com/p/f7dc09a6e6ab
共同学习,写下你的评论
评论加载中...
作者其他优质文章