4. Harbor 项目管理:创建项目、项目类型与成员角色管理

在 Harbor 镜像仓库中,项目(Project)是镜像隔离与权限控制的核心单元。所有镜像必须归属于某个项目,而项目的访问策略、成员角色直接决定了镜像的安全边界。本节将系统讲解项目的创建流程、公开/私有类型的选择依据,以及成员与角色的精细化管理。

4.1 项目创建流程

Harbor 的项目创建可通过 Web UI 或 REST API 完成。以下为 Web UI 的标准操作步骤:

  1. 登录 Harbor 管理界面:使用具有管理员或项目创建权限的账号登录。
  2. 进入“项目”模块:点击顶部导航栏的“项目”入口。
  3. 点击“新建项目”:在项目列表页右上角点击“+ 新建项目”按钮。
  4. 填写项目信息:在弹出的表单中配置以下关键字段。
配置项 说明 推荐值 / 示例
项目名称 全局唯一,只能包含小写字母、数字、连字符和下划线 prod-app-backend
访问级别 公开(Public)或私有(Private) 生产环境建议私有
存储配额(可选) 限制项目最大存储容量 根据磁盘规划设置,如 100GB
代理缓存(可选) 是否作为远程仓库的代理缓存项目 按需启用
  1. 确认创建:点击“确定”完成项目创建。
最佳实践:项目名称建议采用 <环境>-<应用名>-<组件> 的命名规范,例如 stg-user-service,便于后续自动化脚本按名称模式匹配归档与清理策略。

4.2 项目类型:公开 vs 私有

Harbor 项目的访问级别决定了镜像的可见性与拉取权限。两种类型的核心差异如下:

对比维度 公开项目(Public) 私有项目(Private)
镜像可见性 所有已认证用户均可查看和拉取 仅项目成员可查看和拉取
推送权限 仅项目成员可推送 仅项目成员可推送
适用场景 基础镜像、开源组件、公共工具镜像 业务应用镜像、包含敏感信息的镜像
安全风险 较低(镜像内容公开,但推送受控) 较高(需严格管理成员权限)
自动化清理影响 清理策略需考虑全局影响 清理策略可针对项目独立配置
安全提示:生产环境的核心业务项目必须设置为私有。公开项目仅用于存放经过安全扫描的基础镜像或公共制品,避免将包含数据库连接串、密钥等敏感信息的镜像推送到公开项目。

4.3 项目成员与角色管理

Harbor 提供了细粒度的基于角色的访问控制(RBAC)。每个项目可以独立管理成员及其角色,角色决定了成员在项目内的操作权限。

4.3.1 内置角色说明

角色名称 权限范围 典型分配对象
项目管理员 完全控制:管理成员、编辑项目配置、推送/拉取/删除镜像、查看日志 项目负责人、DevOps 工程师
维护者 推送/拉取/删除镜像、查看日志,不能管理成员或修改项目配置 开发团队骨干、CI/CD 机器人账号
开发者 推送/拉取镜像,不能删除镜像或管理成员 普通开发人员
访客 仅拉取镜像(只读) 测试人员、外部协作方
受限访客 仅拉取公开项目的镜像,不能拉取私有项目镜像 匿名只读访问场景(极少使用)

4.3.2 成员添加与角色分配

在项目详情页的“成员”标签页中,可以执行以下操作:

  • 添加成员:输入已存在的 Harbor 用户名,选择角色后确认。
  • 批量导入:通过 LDAP/AD 集成时,可同步用户组并批量分配角色。
  • 修改角色:在成员列表中直接调整角色下拉框。
  • 移除成员:点击删除按钮,该成员将立即失去项目访问权限。
自动化集成:在 CI/CD 流水线中,建议为每个项目创建一个专用的机器人账号(Robot Account),并赋予“维护者”角色。该账号仅用于镜像推送和清理,避免使用个人账号导致权限扩散。

4.4 项目权限模型 SVG 架构图

下图展示了 Harbor 项目中用户、角色与操作权限之间的层级关系:

Harbor 项目权限模型 Harbor 项目权限模型 Harbor 项目 公开项目 私有项目 项目管理员 维护者 开发者 访客 完全控制 管理成员/配置 推送/拉取/删除 推送/拉取/删除 查看日志 不可管理成员 推送/拉取 不可删除镜像 不可管理成员 仅拉取(只读) 不可推送 不可删除 U U U U 用户 用户 用户 用户

4.5 项目配置与自动化清理的关联

在后续章节的自动归档与清理工程案例中,项目的配置将直接影响脚本的执行逻辑:

  • 项目名称作为筛选标签:清理脚本通过项目名称的正则匹配,决定哪些项目参与归档。
  • 项目类型决定清理策略:公开项目通常保留更长的镜像历史,私有项目可执行更激进的清理。
  • 角色权限限制操作范围:清理机器人账号仅需“维护者”角色,避免过度授权。
  • 存储配额触发预警:当项目存储使用量接近配额阈值时,自动触发清理流程。
工程案例前置:在后续章节中,我们将基于本节的项目管理知识,设计一个自动清理脚本。该脚本会遍历 Harbor 中的所有项目,根据项目名称前缀(如 dev-、stg-、prod-)匹配不同的保留策略,并调用 Harbor API 删除过期镜像。因此,本节的项目命名规范和角色分配是自动化清理的基础。