Harbor权威指南:容器镜像、Helm Chart等云原生制品的管理与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 镜像仓库Registry

镜像仓库是容器镜像在不同环境之间分发和共享的重要枢纽,是容器应用平台中不可或缺的组件之一。本节讲述镜像仓库的作用、镜像仓库服务的种类和Harbor Registry的特点。

1.6.1 Registry的作用

容器镜像一般由开发人员通过“docker build”之类的命令构建,偶尔也会通过“docker commit”命令创建,无论采用了哪种方式,镜像在生成后都会被保存在开发机器的本地镜像缓存中,供本地开发和测试使用。

从另一方面来看,容器镜像很重要的一个作用是作为可移植的应用打包形式,在其他环境下无差别地运行所封装的应用,所以本地生成的镜像有时需要发送到其他环境下,如其他开发人员的机器、数据中心的机器或者云端计算节点。这时需要一种能在不同环境中传输镜像的有效方法,而镜像传输和分发中关键的一环就是镜像的Registry(注册表)。Registry有服务发现模式下服务注册的含义,实际应用中,用户往往称镜像Registry为镜像仓库,说明Registry不仅能注册镜像,还有存储镜像和管理镜像的功能。

图1-18描绘了镜像在单台(本地)计算机上容器生命周期中的状态变化,对开发者而言,镜像还可被推送到Registry上,也可以从Registry下载镜像。

img

图1-18

如果图1-18所示的推送和拉取发生在不同的计算环境之间,则可以实现跨环境的镜像传送,而且在不同的环境下得到的镜像是一样的,可以无差别地运行,如图1-19所示。

img

图1-19

在实际环境下,镜像的构建者往往是少数(如开发人员),绝大多数用户或机器集群都是镜像的消费者,这样的模式通常被称为镜像的分发,既可以是开发团队成员之间共享应用镜像,也可以是运维人员通过镜像发布应用到生产机器集群的各个节点,如图1-20所示。

img

图1-20

从上述分发模式可以看到,Registry是维系容器镜像生产者和消费者的关键环节,也是所有基于容器的云原生平台几乎都离不开Registry的根本原因。正是因为Registry的重要性及其在应用分发上的关键性,使Registry非常适合进行镜像管理,比如权限控制、远程复制、漏洞扫描等。Harbor等镜像仓库软件就是在Registry镜像分发的基础功能上增加了丰富的管理能力,从而得到用户的青睐。

1.6.2 公有Registry服务

从用户的访问方式来看,Registry主要分为公有Registry服务和私有Registry服务两种。公有Registry服务一般被部署在公有云中,用户可以通过互联网访问公有Registry服务。私有Registry服务通常被部署在一个组织内部的网络中,只服务于该组织内的用户。

公有Registry服务的最大优点是使用便利,无须安装和部署就可以使用,不同组织之间的用户可以通过公有Registry服务共享或者分发镜像。公有Registry服务也有不足:因为镜像被存放在云端存储之中,镜像之中的私密数据可能会因此泄露,因而对安全有要求的许多企业和政府等机构往往不允许存放镜像到公有Registry中;另外,使用公有Registry服务需要从公网下载镜像,在传输上需要较长时间,在频繁使用镜像的场景中,如应用开发测试的镜像构建和拉取等,效率较低。因此,公有Registry不太适用于本地镜像高频使用的场景。

目前,公有Registry服务最著名的就是Docker Hub,这个服务是随着Docker开源项目的发布而设立的,由Docker公司维护,是最常用的公有Registry服务。根据官方数据,Docker Hub在2020年年初,每月的下载量达到80亿次之多。开发者可以在Docker容器管理工具中直接、免费使用Docker Hub,推送和拉取镜像都很方便,这也是Docker工具能够极快地被广大开发者接受和使用的原因之一。随着容器技术的普及,许多软件项目特别是开源项目,都通过Docker Hub来发布官方镜像,供用户下载和使用。如今,运行在公有云中的应用可直接从Docker Hub中获取镜像,这也是一种快捷部署方式。

Docker Hub提供了免费的公共镜像服务,即镜像对所有用户都可公开使用,公开的镜像甚至无须注册账号也可以下载。Docker Hub还提供了付费的私有镜像服务,只有授权的用户才能发现和访问镜像。需要指出的是,Docker Hub的私有镜像服务虽然提供了保护用户私有数据的能力,但其在本质上还是公有镜像服务,因为镜像是被存放在公有云中的,公有Registry服务在安全和性能等方面的不足依然存在。

除了Docker Hub,各大公有云服务商如亚马逊AWS、微软Azure、谷歌GCE、阿里云和腾讯云等,都有自己的Registry服务。这些云服务商提供的Registry服务既可满足自身云原生用户的镜像使用需求,加速云原生应用的访问效率;也可提供公网用户的镜像访问能力,便于镜像的分发和传送,如用户可从内网环境向云端Registry推送镜像等。

1.6.3 私有Registry服务

私有Registry服务可以克服公有Registry服务的不足:镜像被存放在组织内部的存储中,不仅可以保证镜像的安全性,又可以提高镜像访问效率。同时,在私有Registry服务中还能够进行镜像的访问控制和漏洞扫描等管理操作,因此私有Registry在大中型组织中通常都是首选方案。私有Registry服务的缺点主要是组织需要承担采购软硬件的成本,并且需要团队负责维护服务。

在私有环境下部署Registry服务的最简易方法就是从Docker Hub中拉取镜像部署Docker Registry。Docker Registry属于Docker容器管理工具的一部分,可存储和分发Docker及OCI镜像,主要面向开发者和小型应用环境,开源代码位于GitHub的“docker/distribution”项目中。Docker Registry结构简单、部署快速,适合小型开发团队共享镜像或者在小规模的生产环境下分发应用镜像。

在较大型的组织内部,由于用户、应用和镜像的数量较多、管理需求复杂,功能较单一的Docker Registry难以胜任,因此需要更全面的镜像管理方案。在开源软件中有Harbor和Portus等项目;在商用软件中有Docker Trust Registry(DTR)和Artifactory等产品,用户可根据需要选择合适的方案。

私有Registry还有一种在公有云中部署的情况,即用户在公有云中部署自己的Registry服务,主要向用户在云中的应用提供镜像服务。这样的部署方式优点较明显:既可实现应用就近获取镜像,又可在一定程度上保证镜像的私密性。

随着混合云在企业中使用越来越普遍,用户在私有云和公有云中都有应用运行,这就涉及两个Registry镜像同步和发布的问题。从效率和管理上看,在私有云和公有云中各部署一个Registry服务,可以使镜像就近下载。然后在两个Registry之间通过镜像同步的方式,将在私有环境下开发的应用镜像复制到公有云的生产环境下,可达到镜像的一致性,从而实现应用发布的目的。

1.6.4 Harbor Registry

Harbor Registry(又称Harbor云原生制品仓库或Harbor镜像仓库)由VMware公司中国研发中心云原生实验室原创,并于2016年3月开源。Harbor在Docker Registry的基础上增加了企业用户必需的权限控制、镜像签名、安全漏洞扫描和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后迅速在中国开发者和用户社区流行,成为中国云原生用户的主流容器镜像仓库。

2018年7月,VMware捐赠Harbor给CNCF,使Harbor成为社区共同维护的开源项目,也是首个源自中国的CNCF项目。在加入CNCF之后,Harbor融合到全球的云原生社区中,众多的合作伙伴、用户和开发者都参与了Harbor项目的贡献,数以千计的用户在生产系统中部署和使用Harbor,Harbor每个月的下载量超过3万次。2020年6月,Harbor成为首个中国原创的CNCF毕业项目。

Harbor是为满足企业安全合规的需求而设计的,旨在提供安全和可信的云原生制品管理,支持镜像签名和内容扫描,确保制品管理的合规性、高效性和互操作性。Harbor的功能主要包括四大类:多用户的管控(基于角色访问控制和项目隔离)、镜像管理策略(存储配额、制品保留、漏洞扫描、来源签名、不可变制品、垃圾回收等)、安全与合规(身份认证、扫描和CVE例外规则等)和互操作性(Webhook、内容远程复制、可插拔扫描器、REST API、机器人账号等)。

Harbor是完全开源的软件项目,也用到了许多其他开源项目,如PostgreSQL、Redis、Docker Distribution等,体现了“从社区中来,到社区中去”的思想。经过数年的发展,在社区用户和开发者提供的需求、反馈和贡献的基础上,功能已经趋于丰富和完善,可以和不同的系统对接、集成。如图1-21所示,Harbor能够使用主流的文件系统和对象存储,认证方式支持LDAP/AD和OIDC,提供可灵活接入外置镜像扫描器的接口,可以与主流的公有或私有Registry服务同步镜像等,支持多种云原生系统的客户端,如Docker/Notary、kubelet、Helm和ORAS OCI等。

img

图1-21

本书讲解的内容以Harbor 2.0为准。Harbor 2.0是一个包含了较多改进功能的大版本,其中最重要的功能是支持遵循OCI镜像规范和分发规范的制品,使Harbor不仅可以存储容器镜像,还可以存储Helm Chart、CNAB等云原生制品。这些制品和镜像一样,都能够设置访问权限和远程复制策略,并在界面上统一展示,大大方便了用户,也拓宽了 Harbor的使用范围。因此,Harbor已经从镜像仓库发展成为通用的云原生制品仓库。

随着功能日益完整,Harbor的应用场景也越来越灵活,归纳起来有以下几种。

(1)持续集成和持续发布。持续集成和持续发布是容器最早的使用场景之一,应用的源代码经过自动化流水线编译和测试后,构建成容器镜像存入Harbor,镜像再被发布到生产环境或者其他环境下,Harbor起到了连接开发与生产环节的作用。

(2)在组织内部统一镜像源。在企业等组织内部对镜像的来源和安全性有一定要求和规则,如果内部用户从公网下载任意镜像并在企业内部运行,则将引入各种安全隐患,如病毒、系统漏洞等。为此,企业会在内部统一设立标准镜像源,存放经过验证或者测试过的镜像让用户使用。采用 Harbor 是较好的选择,可对镜像设立访问权限,并按照项目组加以隔离。同时,可以对镜像定期扫描,在发现安全漏洞时拒绝用户下载并及时打补丁。管理员还可以对镜像进行数字签名,实现来源校验。

(3)镜像跨系统传输。容器镜像的一个重要特性是不可更改(immutability),即镜像封装了应用的运行环境,可以在其他系统中无差别地重现该环境。这个特性决定了容器镜像必须具有可移动性,能在不同的环境下转移。Harbor的远程内容复制恰到好处地提供了容器迁移的能力,无论是在用户不同的数据中心之间,还是在公有云和私有云之间,无论是局域网还是广域网,Harbor都能够实现不同系统的镜像同步,并且具备出错重试的功能,大大提高了运维效率。

(4)制品备份。容器镜像等制品的备份是从跨系统镜像传输衍生而来的用例,主要是把 Harbor 的镜像等制品复制到其他系统中,保留一个或多个副本。在需要时,可把副本数据迁回原Harbor实例,达到恢复的目的。

(5)制品本地访问。镜像等制品的本地访问也是从跨系统镜像传输衍生而来的用例,Harbor可以把镜像等制品同时远程复制到若干个地点,如从北京的数据中心分别复制到上海、广州和深圳的数据中心,这样不同地理位置的用户可以就近获取制品数据,缩短了下载时间。

(6)数据存储。在Harbor 2.0支持OCI规范之后,更多的应用都可存放非镜像数据到Harbor中。比如,人工智能的模型数据和训练数据、边缘计算的设备介质等。这些数据被存放到Harbor后,最大的好处就是能够自动获得内容复制、权限控制等功能,无须另行开发类似的功能。