在 Harbor 中,项目(Project)是一个逻辑上的分组单元,用于组织和管理相关的容器镜像仓库(Repository)。它类似于一个文件夹或者一个工作空间,将具有共同用途、所属团队或者应用场景相关的镜像仓库整合在一起,方便进行访问控制、资源分配和管理操作。
项目是 Harbor 基于角色的访问控制(RBAC)体系中的关键层级。通过为不同的项目分配不同的用户角色和权限,可以精确地控制谁能够访问和操作项目内的镜像仓库。例如,一个项目可以有项目管理员(Project Administrator)角色,拥有对项目内所有仓库进行管理(包括创建、删除仓库,设置仓库访问权限等)的权限;开发者(Developer)角色可能被允许向项目内的特定仓库推送(push)镜像;而访客(Guest)角色也许仅能查看项目内仓库中的镜像信息(pull 镜像的元数据)。这种基于项目的权限划分能够有效保障企业内部容器镜像资源的安全性和合规性。
项目可以帮助企业对容器镜像进行有条理的组织。企业通常会有多个不同的业务部门、应用系统或者开发团队,每个项目可以对应一个这样的实体。比如,一个电商企业可能会有一个项目用于管理其电商平台的前端应用镜像仓库,另一个项目用于管理后端服务(如订单处理、库存管理等)的镜像仓库。这样的分类方式使得镜像的查找、使用和维护更加高效,便于企业对容器化应用的全生命周期进行管理。
当涉及到镜像在不同的 Harbor 实例或者不同的数据中心之间进行复制和分发时,项目作为一个整体发挥作用。企业可以选择将一个项目下的所有镜像仓库及其内容从一个源 Harbor 仓库复制到目标 Harbor 仓库,确保在不同环境(如开发环境、测试环境、生产环境)或者不同地理位置的仓库中保持镜像的一致性。这种复制功能有助于企业实现容器镜像的快速部署和更新,同时保证了镜像的质量和安全性。
项目包含一个或多个镜像仓库。镜像仓库是实际存储容器镜像的地方,每个镜像仓库都有一个唯一的名称,并且存储特定类型的镜像(例如,一个镜像仓库可能专门存储某个应用的不同版本的镜像)。项目为这些镜像仓库提供了一个更高层次的管理框架,就像一个容器,将相关的镜像仓库装在一起,并且统一进行访问控制、复制等操作。
用户通过被分配到项目中的不同角色来获取相应的权限,从而与项目产生关联。一个用户可以在多个不同的项目中具有不同的角色。例如,一个开发人员可能在项目 A 中是开发者角色,负责推送和更新应用镜像;而在项目 B 中可能是访客角色,只能查看镜像相关信息。这种灵活的用户 - 项目 - 角色关系是 Harbor 权限管理系统的核心,使得企业能够根据实际的业务需求和组织结构,精细地调配用户对容器镜像资源的访问权限。
登录到 Harbor,选择“项目”选项卡,如下图:
上图显示,当前 Harbor 中仅仅有 demo 和默认的 library 项目,其中 library 是公共项目。还可以通过右上角的统计信息查看当前 Harbor 中项目的个数、镜像仓库个数,已使用容量,如下图:
点击“+新建项目”按钮创建项目:
根据实际情况填写项目名称、访问级别(私有/公开)、存储镜像的数量、存储容量,然后点击“确定”创建项目即可。
选中一个或多个项目,点击“x 删除”按钮删除项目:
当点击删除时会弹出确认框:
点击“删除”按钮即可删除项目,注意,删除操作需要谨慎操作。当我们执行删除项目动作后,Harbor 会触发本地实践,如下图:
点击要查看项目的名称,进入到项目的详情页面。
(1)点击“概要”选项卡,查看项目的概要信息,如仓库镜像数量,成员数,容量等信息:
(2)点击“镜像仓库”选项卡查看当前项目下面所有的镜像列表,包括镜像的名称、Tag数量、下载数量:
(3)点击“成员”选项卡管理当前项目的成员,如新增用户,新增组,设置用户权限等等:
(4)点击“标签”选项卡,管理项目的标签:
(5)点击“日志”选项卡查看项目的日志信息,如创建项目、推送镜像、拉取镜像等日志信息:
(6)点击“WebHooks”选项卡设置项目的 Hook 信息。Harbor 的 Webhook 是一种事件通知机制,它允许 Harbor 在特定事件发生时,如镜像推送、镜像拉取、仓库创建等,向外部的 URL 发送 HTTP POST 请求。这些请求包含了与事件相关的详细信息,接收方可以根据这些信息来触发其他操作,比如触发持续集成 / 持续交付(CI/CD)管道,进行安全扫描等。
当在 Harbor 中配置好 Webhook 后,每当预定义的事件发生,Harbor 会构建一个包含事件详细数据(如事件类型、镜像相关信息、仓库信息等)的 JSON 格式的消息体。然后,它会使用 HTTP POST 请求将这个消息体发送到指定的目标 URL。这个 URL 对应的服务应该能够接收和处理这些 POST 请求,以执行相应的操作。
注意:为了测试,我们可以使用一个免费的 Webhook 来验证该功能,访问 https://webhook-test.com/ 地址,点击“Copy”按钮复制 Webhook 地址(该地址将设置在 Harbor 中),如下图:
进入到“项目”的“Webhooks”标签页,将上面拷贝的 webhook 地址填入其中,然后点击“测试 ENDPOINT”按钮测试连接,如下图:
最后,点击“继续”按钮保存设置,此时可以看见项目中存在很多已经启用的 Webhook,如downloadChart、deleteChat、uploadChat 等等:
此时,项目的 Webhook 已经设置好了,我们通过命令推送镜像到 Harbor,
root@hxvm:~# docker tag springcloud-order hxvm:80/demo/springcloud-order:v2.0 root@hxvm:~# docker push hxvm:80/demo/springcloud-order:v2.0 The push refers to repository [hxvm:80/demo/springcloud-order] ab746aafc0b9: Layer already exists 49b59fcdef48: Layer already exists 34f7184834b2: Layer already exists 5836ece05bfd: Layer already exists 72e830a4dff5: Layer already exists v2.0: digest: sha256:ff7b8d485b21b33c3bcbd8aaa00ed3644c9465e43e96f051fbc7f841f8bb7378 size: 1369
再去,查看 Webhook Tester 页面,收到了推送镜像的消息,如下图:
(7)点击“配置管理”选项卡对项目进行配置管理,如设置项目访问权限,漏洞扫描、白名单等等: