Harbor 私有镜像仓库深度实践:企业级容器镜像管理

全面掌握 Harbor 私有镜像仓库的架构设计、RBAC、镜像复制、漏洞扫描与 Helm Chart 管理。

Harbor 是由 VMware 开源的企业级容器镜像仓库,提供了 Docker Hub 所没有的 RBAC、镜像复制、漏洞扫描和 Helm Chart 管理等能力,是生产环境管理镜像的标准选择。

Harbor 架构核心组件

┌─────────────────────────────────────────────┐
│                  Nginx (反向代理)              │
├─────────────────────────────────────────────┤
│  Harbor Core    │  Harbor Portal (Web UI)     │
├─────────────────────────────────────────────┤
│  Registry (OCI/Docker v2)                   │
│  ChartMuseum (Helm Chart 存储)               │
├─────────────────────────────────────────────┤
│  Jobservice (异步任务调度)                     │
│  Trivy Adapter (漏洞扫描适配器)               │
├─────────────────────────────────────────────┤
│  Redis (缓存) │  PostgreSQL (元数据)          │
└─────────────────────────────────────────────┘
组件作用替代方案
Registry存储和分发 OCI/Docker 镜像Docker Distribution
ChartMuseumHelm Chart 存储和索引Nexus, Artifactory
Core API业务逻辑、身份验证、项目
Jobservice镜像复制、垃圾回收、扫描任务
Trivy Adapter调用 Trivy 扫描镜像层Anchore, Clair

RBAC 权限模型

Harbor 采用项目(Project)作为资源隔离的基本单位,每个项目是独立的镜像命名空间:

系统管理员
    ├── 项目 A(公开/私有)
    │     ├── 项目管理员(可管理成员、配置策略)
    │     ├── 维护者(可推送/拉取,管理镜像)
    │     ├── 开发者(可推送/拉取)
    │     └── 访客(仅拉取)
    └── 项目 B

权限粒度控制示例:为 CI 系统创建仅上传权限的机器人账户。

# 在 Harbor UI 创建机器人账户后,获取 token
docker login harbor.example.com -u robot$ci-pusher -p <token>

# 仅允许上传,禁止删除镜像

镜像复制规则(跨地域同步)

Harbor 支持基于规则的多实例镜像同步,适配多云和跨地域灾备场景:

# Harbor UI 中配置的复制规则
名称: prod-images-sync
源仓库: harbor-beijing/library
目标仓库: harbor-singapore/library
触发模式: 事件驱动 (push 时触发)
过滤器:
  - 标签: v1.*
  - 资源类型: 镜像
触发模式说明适用场景
手动触发管理员手动执行一次性迁移
定时触发Cron 表达式调度每日/每周批量同步
事件驱动镜像推送时自动触发实时跨地域同步

复制任务失败时,Jobservice 会保留执行日志。在 Web UI 的「复制管理」中可查看失败原因,常见问题包括目标仓库凭据过期、网络超时或 tag 命名策略冲突。

Webhook 通知

Harbor 支持将镜像事件推送到外部系统,实现与 CI/CD 流水线的联动:

事件类型触发条件典型用途
Pull镜像被拉取审计、计费等
Push镜像被推送触发下游部署
Scanning Completed漏洞扫描结束质量门禁
Scanning Failed扫描失败告警通知

Webhook 推送的 JSON payload 示例:

{
  "type": "PUSH_ARTIFACT",
  "occur_at": 1725840000,
  "operator": "dev-user",
  "event_data": {
    "resources": [
      {
        "digest": "sha256:abc123...",
        "tag": "v1.2.3",
        "resource_url": "harbor.example.com/library/app:v1.2.3"
      }
    ],
    "repository": {
      "name": "app",
      "namespace": "library"
    }
  }
}

Trivy 漏洞扫描集成

Harbor 内置的 Trivy 扫描器在镜像推送到仓库后自动执行检测。扫描策略可配置为强制门禁:

项目设置 → 配置管理 → 部署安全性
├─ 阻止潜在漏洞镜像:启用
├─ 阻止的镜像 CVE 级别:High, Critical
└─ 过期时间:24小时

扫描结果通过 REST API 获取:

# 获取指定镜像的漏洞报告
curl -u "admin:$HARBOR_PASSWORD" \
  "https://harbor.example.com/api/v2.0/projects/library/repositories/app/artifacts/v1.0.0/additions/vulnerabilities"

Helm Chart 管理

Harbor 不仅是镜像仓库,也是 Helm Chart 的 OCI 兼容注册中心:

# 登录 Harbor
helm registry login harbor.example.com -u admin

# 推送 Chart 到 Harbor
helm package ./mychart
helm push mychart-0.1.0.tgz oci://harbor.example.com/library

# 添加 Harbor 为 Helm repo(ChartMuseum 模式)
helm repo add harbor https://harbor.example.com/chartrepo/library
helm repo update
helm search repo harbor/mychart

OCI 模式 vs ChartMuseum 模式对比:

特性ChartMuseumOCI Registry
索引方式index.yamlOCI manifest
删除 ChartAPI 删除直接删除 manifest
与镜像复用是(同一 Registry)
Helm 版本要求>= 2.x>= 3.8

OIDC 单点登录配置

Harbor 支持通过 OIDC 对接企业身份提供商(Keycloak、Azure AD、Okta 等):

# Harbor 配置:配置管理 → 认证
认证模式: OIDC
OIDC 提供商名称: Keycloak
OIDC 端点: https://keycloak.example.com/realms/production
OIDC 客户端 ID: harbor-client
OIDC 客户端密钥: ********
OIDC 范围: email,profile,openid,groups
OIDC 验证证书: 

配置完成后,Harbor 将基于 OIDC 的 groups claim 自动映射用户到项目和角色。例如 Keycloak 中的 harbor-admins 组对应 Harbor 的系统管理员角色,实现无需 Harbor 本地管理权限的自动化授权体系。

客户端操作命令速查

# Docker 登录 Harbor
docker login harbor.example.com -u admin

# 打标签并推送镜像
docker tag myapp:v1.0 harbor.example.com/library/myapp:v1.0
docker push harbor.example.com/library/myapp:v1.0

# Helm 操作(OCI 模式)
helm registry login harbor.example.com
helm push mychart-1.0.0.tgz oci://harbor.example.com/library
helm install myrelease oci://harbor.example.com/library/mychart --version 1.0.0

# 清理未使用的镜像( garbage collection )
# Harbor UI: 管理 → 垃圾清理 → 立即执行

在生产环境中,建议为 Harbor 启用 HTTPS(自签名或 Let’s Encrypt)、配置 S3/MinIO 对象存储后端、以及设置定时备份 PostgreSQL 数据库。复制策略和扫描策略应覆盖所有生产项目,避免因镜像漂移或已知漏洞引入运维风险。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「docker」更多文章

  1. 容器运行时深度解析:dockerd 到 containerd 再到 runc 的完整调用链
  2. Docker 镜像大小优化与层缓存策略深度指南
  3. Docker Rootless 模式与容器安全深度剖析