手把手搭建Harbor企业级镜像仓库:从零到一的完整指南

一、为什么需要企业级Harbor私有仓库?

在云原生时代,容器镜像已成为应用分发的核心载体。企业自建私有镜像仓库的必要性体现在:

  1. 安全可控:避免将核心业务镜像暴露在公共仓库(如Docker Hub)
  2. 合规要求:满足金融、政府等行业对数据存储区域的要求
  3. 性能优化:解决内网拉取镜像速度慢的问题
  4. 成本控制:避免公共仓库的流量费用和存储限制

Harbor作为CNCF毕业项目,相比原生Docker Registry增加了RBAC权限控制、镜像扫描、审计日志等企业级功能,是自建私有仓库的首选方案。

二、环境准备与系统要求

2.1 硬件配置建议

组件 最小配置 推荐配置
服务器 4核8G 8核16G+
磁盘空间 100GB 500GB+(SSD)
网络带宽 100Mbps 1Gbps+

2.2 软件依赖清单

  1. # 基础依赖
  2. yum install -y docker-ce docker-ce-cli containerd.io
  3. systemctl enable --now docker
  4. # 可选:加速镜像拉取
  5. cat > /etc/docker/daemon.json <<EOF
  6. {
  7. "registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"]
  8. }
  9. EOF
  10. systemctl restart docker

2.3 网络拓扑设计

建议采用三节点架构:

  • 主节点:运行Harbor核心服务
  • 从节点:配置复制策略实现高可用
  • 监控节点:部署Prometheus+Grafana监控体系

三、Harbor安装与基础配置

3.1 离线安装包准备

  1. # 下载最新稳定版(示例为v2.9.0)
  2. wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
  3. tar xzf harbor-offline-installer-v2.9.0.tgz
  4. cd harbor

3.2 配置文件详解

编辑harbor.yml.tmpl关键配置:

  1. hostname: harbor.example.com # 必须使用域名,建议配置DNS解析
  2. http:
  3. port: 80
  4. https:
  5. certificate: /data/cert/harbor.crt
  6. private_key: /data/cert/harbor.key
  7. harbor_admin_password: Harbor12345 # 初始密码,生产环境建议修改
  8. database:
  9. password: root123
  10. max_open_conns: 1000
  11. max_idle_conns: 100
  12. storage_driver:
  13. name: filesystem
  14. filesystem:
  15. rootdirectory: /var/lib/registry

3.3 安装执行流程

  1. # 生成自签名证书(生产环境替换为CA证书)
  2. mkdir -p /data/cert
  3. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  4. -keyout /data/cert/harbor.key -out /data/cert/harbor.crt \
  5. -subj "/CN=harbor.example.com"
  6. # 执行安装
  7. ./install.sh --with-trivy --with-chartmuseum # 启用镜像扫描和Chart仓库

四、企业级功能配置

4.1 RBAC权限体系实现

  1. 创建项目组

    1. curl -u "admin:Harbor12345" -X POST -H "Content-Type: application/json" \
    2. -d '{"project_name": "finance", "public": false}' \
    3. "https://harbor.example.com/api/v2.0/projects"
  2. 设置用户角色

    • 管理员:拥有系统级权限
    • 项目管理员:管理特定项目
    • 开发者:仅能推送/拉取镜像
    • 访客:只能拉取公开镜像

4.2 镜像扫描配置(Trivy集成)

  1. 每日定时扫描配置:

    1. # 在harbor.yml中添加
    2. trivy:
    3. ignore_unfixed: false
    4. skip_update: false
    5. insecure: false
    6. github_token: "<your-token>" # 用于获取漏洞数据库
  2. 扫描结果处理策略:

    • 设置严重漏洞拦截阈值(如阻止CVSS>7的镜像)
    • 配置扫描报告邮件通知

4.3 审计日志管理

  1. 日志轮转配置:

    1. # /etc/logrotate.d/harbor
    2. /var/log/harbor/*.log {
    3. daily
    4. rotate 30
    5. missingok
    6. notifempty
    7. compress
    8. delaycompress
    9. copytruncate
    10. }
  2. 日志分析示例:

    1. # 查询特定用户的操作记录
    2. grep "user@example.com" /var/log/harbor/core.log | jq '.event_data.action'

五、高可用与灾备方案

5.1 主从复制配置

  1. 在从节点配置:

    1. replication:
    2. - name: primary_to_standby
    3. disabled: false
    4. src_registry:
    5. url: https://harbor.example.com
    6. username: replicator
    7. password: "<encrypted-password>"
    8. dest_registry:
    9. url: https://standby.example.com
    10. username: replicator
    11. password: "<encrypted-password>"
    12. dest_namespace: "*"
    13. trigger:
    14. type: manual
    15. filters:
    16. project:
    17. - finance
    18. - hr
  2. 同步策略建议:

    • 增量同步:仅同步变更的镜像
    • 全量同步:每周执行一次完整同步

5.2 备份恢复流程

  1. 数据库备份:

    1. # 每日备份
    2. mysqldump -h127.0.0.1 -uregistry -p<password> registry > /backup/registry_$(date +%Y%m%d).sql
  2. 配置文件备份:

    1. tar czf /backup/harbor_config_$(date +%Y%m%d).tar.gz \
    2. /etc/harbor/harbor.yml \
    3. /data/cert/

六、常见问题解决方案

6.1 证书问题排查

  1. # 检查证书有效期
  2. openssl x509 -in /data/cert/harbor.crt -noout -dates
  3. # 测试证书链完整性
  4. openssl verify -CAfile /etc/pki/tls/certs/ca-bundle.crt /data/cert/harbor.crt

6.2 性能优化技巧

  1. 数据库调优:

    1. -- MySQL中执行
    2. SET GLOBAL innodb_buffer_pool_size=4G;
    3. SET GLOBAL max_connections=2000;
  2. 存储优化:

    1. # 配置存储驱动参数
    2. echo "options registry storage_driver_options={\"rootdirectory\":\"/var/lib/registry\",\"maxthreads\":100}" > /etc/docker/registry-config.yml

6.3 升级注意事项

  1. 升级前检查:

    1. # 验证当前版本
    2. docker ps | grep goharbor
    3. # 检查数据库兼容性
    4. ./prepare --check-upgrade
  2. 升级步骤:

    1. # 备份当前环境
    2. ./prepare --backup --backup-dir=/backup/harbor_upgrade
    3. # 下载新版本安装包
    4. wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
    5. # 执行升级
    6. ./install.sh --with-clair --with-trivy

七、最佳实践建议

  1. 镜像命名规范

    1. <registry>/<project>/<image>:<tag>-<build_number>
    2. 示例:harbor.example.com/finance/nginx:1.23.4-20231001
  2. 生命周期管理

    • 设置镜像保留策略(如保留最新3个版本)
    • 配置自动清理未使用的镜像
  3. 监控指标

    • 关键指标:镜像拉取成功率、存储使用率、扫描任务积压数
    • 告警阈值:存储使用>80%、扫描任务积压>100

通过以上步骤,您将获得一个具备高可用性、安全可控的企业级Harbor镜像仓库。实际部署时,建议先在测试环境验证所有配置,再逐步推广到生产环境。