容器镜像仓库之选:企业级容器registry Harbor实践(上)

栏目: 服务器 · 发布时间: 7年前

内容简介:容器镜像仓库之选:企业级容器registry Harbor实践(上)

本文转自微信号 EAWorld 。扫描下方二维码,关注成功后,回复“ 普元方法+ ”,将会获得热门课堂免费学习机会!

目录:
1.背景
2.开源Docker Registry的不足
3.新的选择--Harbor
4.Harbor的使用

背景

公司于去年启动了新一代数字化企业云平台的研发,基于DevOps打造新一代的企业云计算平台,底层的容器云平台是重要的可选组件。容器云目前启动了第三版的重构,一些组件又有了重新选型的机会。

DevOps这个概念已经出来很多年了,相信大家已经不陌生了,说简单点,它就是开发(Development)和运维(Operations)这两个领域的合并。那么为什么要合并这两个领域?原因很多,但首要原因是:目前这两个领域的工作流程是脱节的,绝对的脱节。很多公司的开发部门和运维部门之间存在的深刻矛盾,其实就是这个“脱节”造成的。

开发部门在产品研发的时候,没有充分考虑部署要求,开发完了只管丢给运维去上线。运维拿到东西上线困难,回来找开发,开发却不一定认可,双方扯来扯去,最后开发修改,运维又有问题再来回找开发,不断循环。最后导致整个产品上线效率低下,运行不稳定。

公司的新一代数字化企业云平台,就是希望基于Devops理念,为企业打造集人员,需求,开发,自动构建,测试,运维一体的企业云平台。我们来看一下我们平台整体的逻辑架构:

容器镜像仓库之选:企业级容器registry Harbor实践(上)

从上图可以看出,平台在逻辑上是分成多层的,硬件上有基础设施平台,基础设施平台上又有基础服务平台,最上层则是各种微应用。DevoOps则是纵跨多层,它由多个领域系统构成,如TM(租户管理),PM(项目管理),SRM(软件资源管理),SCM(软件配置管理)等等,协调并管理整个平台资源。其中,基础设施平台中有IaaS,也有CaaS。IaaS与CaaS都是可选组件,他们可以只有一个,也可以两者都有。两者都有的时候,CaaS可以存在于IaaS之中。这里图中的CaaS指的是我们的容器云。

我们再来看一下我们的DevOps平台的整体技术选型:

容器镜像仓库之选:企业级容器registry Harbor实践(上)

如图,在选型时,我们将整个平台主要分成了三块。容器云对应基础设施层中的容器层。容器目前采用的是Docker, 平台管理用了谷歌的kubernetes, 容器网络目前是用的flannel,dns用的skydns, 平台系统使用的是coreos。容器镜像仓库,容器云的前两个小版本,我们使用的是开源的Docker Registry,配合nginx搭建容器镜像私库,使用还比较稳定,但也发现了它的一些不足。

开源Docker Registry的不足

同很多团队进行容器云构建的初始阶段一样,一开始我们并不太注重安全,容器仓库一般都是配置成insecure-registry直接使用。这次,我们决定加强安全方面的控制。我们发现了它的一些不足如下:

  • 用户与鉴权Docker Registry V2可以基于htpasswd文件进行简单的用户管理,但是维护不便,也没有对外的API可供集成。

  • 缺少日志与审记Docker Registry没有日志收集能力,也缺少审记。

  • 复制与同步在不同的Registry实例之间复制镜像是十分普遍的需求,但Docker Registry只支持将公有Registry的镜像同步至私有仓库 。

  • 镜像删除不便 Docker 客户端没有提供删除仓库镜像的命令,删除仓库中的镜像,只能通过其它 工具 调用rest api 。

  • 缺少图形化的管理界面要想补上这些缺点,需要在自已的容器云中做一些加强,需要工作量。除了Docker Registry,还有没有其它的选择,已经补齐了这些能力,或部分补齐了呢?于是,我们做了一点小了解。

目前业界可选的Containger Registry主要有如下:

  • Docker Hub提供了直观的界面、自动化构建、私有仓库以及众多官方镜像。这是官方的公有库,下载镜像必须联接外网。

  • Docker Registry最流行的开源registry。你可以在自己的设施上运行或者使用Docker Hub。

  • Quay.io最初由一个两人工作室开发的产品,专注于Docker私有库。目前已被Coreos收购。

  • CoreOS Enterprise Registry Coreos收购Quay.io之后推出的企业级Containger Registry,提供细化权限和审计跟踪。

  • Nexus 3.0 nexus原来只是一个maven的仓库服务器,升级到3.0之后,也可以使用它对docker的镜像进行管理。

  • Harbor vmware开源的企业级容器registry,基于开源的Docker Registry进行增强。

Docker Hub相信大家都不陌生,用来做私库的源库是可以的,可以将一些基础镜像从这个云库拉到私库中。它并不适合在容器云中直接使用,下载镜像时需要连外网,速度也是个大问题。

Docker Registry就不说了,接下来的Quay.io,CoreOS Enterprise Registry是付费的,或者是商业付费的,不考虑。Nexus 3有图形化的管理页面可以操作镜像,但其它的能力与Docker Registry差不多。最后看到的harbor,则令我们眼前一亮。

新的选择–Harbor

Harbor是VMware公司于2016年开源的企业级Docker Registry项目。它是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。

作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

Harbor的特点如下:

  • 基于角色的访问控制用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

  • 镜像复制镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

  • 图形化用户界面用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。

  • AD/LDAP 支持Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。

  • 审计管理所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

  • 国际化已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

  • RESTful APIRESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。

  • 部署简单提供在线和离线两种安装工具,也可以安装到vSphere平台(OVA方式)虚拟设备。

我们再看看Harbor的整体架构:

容器镜像仓库之选:企业级容器registry Harbor实践(上)

Harbor在架构上主要由五个组件构成:

  • Proxy:Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。

  • Registry:负责储存Docker镜像,并处理dockerpush/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token,Registry会通过公钥对token 进行解密验证。

  • Core services:这是Harbor的核心功能,主要提供以下服务:UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。 webhook:为了及时获取registry上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。token服务:负责根据用户权限给每个docker push/pull命令签发token.Docker客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。

  • Database:为coreservices提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。

  • Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

我们再来看一个harbor的核心概念

容器镜像仓库之选:企业级容器registry Harbor实践(上)

以上是Harbor的核心概念。一个项目可以看成一个用户的小私库,项目成员按照其角色,可以上传,下载,删除镜像,或添加删除成员等。系统管理员可以创建镜像库复制目标,为项目设置复制策略,可以从其它的镜像库复制镜像过来。复制策略会产生复制任务。项目下面可拥有多个镜像,而每个镜像则可以有多个镜像标签。项目包含日志。

Harbor的使用

harbor提供了web ui。我们来看一下harbor是如何使用的:

容器镜像仓库之选:企业级容器registry Harbor实践(上)

首先是通过管理员创建新的用户,然后登陆至新用户,使用新用户创建项目。这样新用户就会自动成为这个用户的项目管理员。

容器镜像仓库之选:企业级容器registry Harbor实践(上)

接下来可以使用新创建的用户,在docker命令行中登陆至镜像仓库,并上传镜像。注意, 登陆的时候,指定为整个镜像仓库的地址,而不是仓库地址加项目名称 。镜像要上传至指定项目下,需要为镜像打上 “镜像仓库地址/项目名/镜像名:镜像tag” 这样格式的tag,再去执行镜像上传才可以。

容器镜像仓库之选:企业级容器registry Harbor实践(上)

镜像上传完成了,可以在web ui中项目下看到它的信息。可以在web页面中很方便地删除整个镜像,或者删除镜像的单个Tag。使用docker client登陆之后,也可以下载到上传上去的镜像。

容器镜像仓库之选:企业级容器registry Harbor实践(上)

项目创建之后,项目管理员可以再为项目添加新的成员。成员有角色之分,项目管理员,开发人员与访客。项目管理员有最大的权限,开发人员可以上传下载删除镜像,访客只能下载镜像。

容器镜像仓库之选:企业级容器registry Harbor实践(上)

系统管理员可以创建复制目标,以便为项目创建复制策略。创建复制目标时,需要指定目标的url及用户名与密码。目标可以是harbor,也可以就是docker registry。

容器镜像仓库之选:企业级容器registry Harbor实践(上)

复制目标创建好了,就可以在项目下创建复制策略。复制策略一创建好,马上就会启动复制任务,将项目下的镜像push至目标仓库。同步时,只同步镜像,harbor的项目等不在同步范围之内。

这一篇主要讲了我们选型harbor的过程。并没有做太多的对比研究,主要还是沿着原来的老路子,只是有了更完善的方案。然后介绍了一下harbor的特点,架构及核心概念,最后以harbor本身的web-ui为例,介绍了harbor的使用,主的是让大家对harbor有一个比较全面的了解。

下一篇中,我们将着重介绍harbor的用户,同步与复制等设计,以及harbor的部署,如何集成,有兴趣的同学欢迎持续关注。

关于作者: 秦双春

现任普元云计算架构师。曾在PDM,云计算,数据备份,移动互联相关领域公司工作,10年IT工作经验。曾任上海科企软件桌面虚拟化产品的核心工程师,主导过爱数TxCloud云柜的设计与开发,主导过万达信息的食安管理与追溯平台的移动平台开发。国内云计算的早期实践者,开源技术爱好者,容器技术专家。

容器镜像仓库之选:企业级容器registry Harbor实践(上)

关于EAWorld微服务,DevOps,元数据,企业架构原创技术分享,EAii(Enterprise Architecture Innovation Institute)企业架构创新研究院旗下官方微信公众号。

扫描下方二维码,关注成功后,回复“ 普元方法+ ”,将会获得热门课堂免费学习机会!

微信号: EAWorld ,长按二维码关注。

容器镜像仓库之选:企业级容器registry Harbor实践(上)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP Hacks

PHP Hacks

Jack Herrington D. / O'Reilly Media / 2005-12-19 / USD 29.95

Programmers love its flexibility and speed; designers love its accessibility and convenience. When it comes to creating web sites, the PHP scripting language is truly a red-hot property. In fact, PH......一起来看看 《PHP Hacks》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具