Harbor私有镜像仓库部署指南:从安装到高可用配置

一、Harbor简介:为何选择私有镜像仓库?

Harbor是由VMware开源的企业级私有镜像仓库解决方案,专为容器化环境设计。相较于公有云提供的镜像服务,Harbor具备三大核心优势:

  1. 数据主权控制:所有镜像存储在企业内部,避免因第三方服务中断导致的业务风险。
  2. 安全合规保障:支持RBAC权限管理、镜像签名、漏洞扫描等企业级安全功能。
  3. 性能优化:通过本地化部署消除网络延迟,显著提升镜像拉取速度。

典型应用场景包括金融行业对数据出境的严格管控、大型企业构建混合云架构时的镜像分发,以及开发团队需要频繁迭代容器应用的场景。

二、安装前环境准备

1. 硬件配置建议

组件 最低配置 推荐配置
服务器 4核8G 8核16G
存储空间 200GB 1TB+(根据镜像量)
网络带宽 100Mbps 千兆以太网

2. 软件依赖检查

  • 操作系统:CentOS 7/8、Ubuntu 18.04/20.04等主流Linux发行版
  • Docker版本:19.03+(需支持Overlay2存储驱动)
  • 依赖组件
    1. # CentOS示例
    2. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    3. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    4. sudo yum install docker-ce docker-ce-cli containerd.io

3. 网络规划要点

  • 端口分配
    • 80/443:Web服务
    • 22:SSH管理
    • 6443:Kubernetes API(如集成)
  • DNS解析:建议配置Harbor专属域名(如harbor.example.com)
  • 防火墙规则
    1. sudo firewall-cmd --permanent --add-port={80,443,22}/tcp
    2. sudo firewall-cmd --reload

三、Harbor安装全流程

1. 离线安装包获取

从官方GitHub Release页面下载对应版本的离线包:

  1. wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-offline-installer-v2.9.0.tgz
  2. tar xvf harbor-offline-installer-v2.9.0.tgz
  3. cd harbor

2. 配置文件定制

编辑harbor.yml.tmpl生成最终配置:

  1. hostname: harbor.example.com
  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: 500
  12. storage_driver:
  13. name: filesystem
  14. fs_driver:
  15. rootdirectory: /var/data/harbor

关键参数说明

  • clair_enabled:设置为true可启用漏洞扫描(需额外配置)
  • notary:镜像签名功能开关
  • chartmuseum:Helm Chart存储支持

3. 安装执行

  1. # 生成自签名证书(生产环境应使用CA签发)
  2. sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  3. -keyout /data/cert/harbor.key -out /data/cert/harbor.crt \
  4. -subj "/CN=harbor.example.com"
  5. # 执行安装
  6. sudo ./install.sh --with-clair --with-chartmuseum

安装过程输出示例:

  1. [Step 0]: checking installation environment ...
  2. [Step 1]: loading Harbor images ...
  3. [Step 2]: preparing environment ...
  4. [Step 3]: starting Harbor ...
  5. ----Harbor has been installed and started successfully.----

四、核心功能配置

1. 项目管理实践

  • 创建项目
    1. curl -u "admin:Harbor12345" -X POST \
    2. -H "Content-Type: application/json" \
    3. -d '{"project_name": "devops", "public": false}' \
    4. http://harbor.example.com/api/v2.0/projects
  • 权限分配
    • 开发者角色:可推送/拉取镜像
    • 访客角色:仅可拉取公开镜像
    • 管理员角色:拥有项目删除权限

2. 镜像复制策略

配置跨区域镜像同步:

  1. # 在harbor.yml中添加
  2. replication:
  3. - name: "aliyun-sync"
  4. enabled: true
  5. src_registry:
  6. url: http://harbor.example.com
  7. insecure: false
  8. dest_registry:
  9. url: https://registry.cn-hangzhou.aliyuncs.com
  10. insecure: false
  11. username: "aliyun_user"
  12. password: "aliyun_pass"
  13. dest_namespace: "devops/*"
  14. trigger:
  15. type: "manual"
  16. filters:
  17. tag_filter:
  18. pattern: "v*"

3. 漏洞扫描配置

启用Clair扫描器:

  1. # 修改harbor.yml
  2. clair:
  3. enabled: true
  4. db_url: postgres://postgres:clair@clair-db:5432/clair?sslmode=disable
  5. updater:
  6. interval: 12h

扫描结果查看:

  1. curl -u "admin:Harbor12345" \
  2. http://harbor.example.com/api/v2.0/projects/1/repositories/library%2Fnginx/artifacts/1/vulnerabilities

五、高可用架构设计

1. 负载均衡方案

采用Nginx反向代理实现HA:

  1. upstream harbor {
  2. server harbor1.example.com:443 max_fails=3 fail_timeout=30s;
  3. server harbor2.example.com:443 max_fails=3 fail_timeout=30s;
  4. }
  5. server {
  6. listen 443 ssl;
  7. server_name harbor.example.com;
  8. ssl_certificate /etc/nginx/certs/harbor.crt;
  9. ssl_certificate_key /etc/nginx/certs/harbor.key;
  10. location / {
  11. proxy_pass https://harbor;
  12. proxy_set_header Host $host;
  13. proxy_set_header X-Real-IP $remote_addr;
  14. }
  15. }

2. 存储层优化

  • 对象存储集成
    1. # 修改storage_driver配置
    2. storage_driver:
    3. name: s3
    4. s3:
    5. accesskey: AKIAXXXXXXXXXXXXXX
    6. secretkey: XXXXXXXXXXXXXXXXXXXXXXXXXXX
    7. region: us-west-2
    8. bucket: harbor-images
    9. endpoint: https://s3.us-west-2.amazonaws.com
    10. chunksize: 5242880
  • 分布式文件系统:推荐使用GlusterFS或Ceph

3. 数据库高可用

PostgreSQL主从配置要点:

  1. # postgresql.conf主节点配置
  2. primary_conninfo = 'host=harbor2.example.com port=5432 user=replicator password=repl_pass'
  3. synchronous_commit = 'on'
  4. synchronous_standby_names = 'harbor2'

六、运维管理最佳实践

1. 日常监控指标

指标类别 关键指标 告警阈值
系统资源 CPU使用率 >85%持续5分钟
存储容量 磁盘剩余空间 <15%
访问性能 镜像拉取平均耗时 >3秒
安全审计 失败登录尝试次数 >5次/分钟

2. 备份恢复策略

全量备份脚本示例:

  1. #!/bin/bash
  2. BACKUP_DIR="/var/backups/harbor"
  3. TIMESTAMP=$(date +%Y%m%d%H%M%S)
  4. # 数据库备份
  5. sudo -u postgres pg_dump -Fc harbor > $BACKUP_DIR/harbor_db_$TIMESTAMP.dump
  6. # 配置文件备份
  7. cp -r /etc/harbor $BACKUP_DIR/config_$TIMESTAMP
  8. # 镜像数据备份(rsync示例)
  9. rsync -avz --delete /var/data/harbor/ $BACKUP_DIR/images_$TIMESTAMP/

3. 版本升级流程

以2.8.0升级到2.9.0为例:

  1. 备份现有数据
  2. 下载新版本安装包
  3. 执行迁移脚本:
    1. sudo ./prepare --conf harbor.yml
    2. sudo docker-compose down
    3. sudo docker-compose up -d
  4. 验证服务状态:
    1. docker-compose ps
    2. curl -I https://harbor.example.com

七、常见问题解决方案

1. 证书问题处理

现象:浏览器显示”NET::ERR_CERT_AUTHORITY_INVALID”
解决方案

  1. 将自签名证书导入系统信任库:
    1. sudo cp harbor.crt /usr/local/share/ca-certificates/
    2. sudo update-ca-certificates
  2. 或在Docker客户端配置:
    1. {
    2. "insecure-registries": ["harbor.example.com"]
    3. }

2. 性能瓶颈优化

典型场景:并发拉取镜像时出现503错误
优化措施

  • 调整Nginx worker配置:
    1. worker_processes auto;
    2. worker_rlimit_nofile 65535;
    3. events {
    4. worker_connections 4096;
    5. }
  • 启用Redis缓存:
    1. # 在harbor.yml中添加
    2. redis:
    3. host: redis.example.com
    4. port: 6379
    5. password: redis_pass

3. 权限异常排查

诊断步骤

  1. 检查项目成员列表:
    1. curl -u "admin:Harbor12345" \
    2. http://harbor.example.com/api/v2.0/projects/1/members
  2. 查看审计日志:
    1. sudo docker logs -f harbor-core
  3. 验证JWT令牌:
    1. echo "eyJhbGciOiJSUzI1NiIs..." | base64 -d | jq .

八、进阶功能探索

1. 与CI/CD集成

Jenkins Pipeline示例:

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('Build') {
  5. steps {
  6. sh 'docker build -t harbor.example.com/devops/myapp:$BUILD_NUMBER .'
  7. }
  8. }
  9. stage('Push') {
  10. steps {
  11. withCredentials([usernamePassword(
  12. credentialsId: 'harbor-cred',
  13. usernameVariable: 'HARBOR_USER',
  14. passwordVariable: 'HARBOR_PASS'
  15. )]) {
  16. sh "docker login harbor.example.com -u $HARBOR_USER -p $HARBOR_PASS"
  17. sh "docker push harbor.example.com/devops/myapp:$BUILD_NUMBER"
  18. }
  19. }
  20. }
  21. }
  22. }

2. 多集群镜像分发

使用Harbor作为中央仓库:

  1. # 集群A的ImagePullSecrets配置
  2. apiVersion: v1
  3. kind: Secret
  4. type: kubernetes.io/dockerconfigjson
  5. metadata:
  6. name: harbor-secret
  7. data:
  8. .dockerconfigjson: >
  9. {"auths":{"harbor.example.com":{"auth":"<base64-encoded-user:pass>"}}}

3. 镜像生命周期管理

自动清理策略配置:

  1. # 在harbor.yml中添加
  2. gc:
  3. enabled: true
  4. schedule: "0 0 * * *"
  5. dry_run: false
  6. delete_untagged: true
  7. remain_last_n: 5

通过本文的详细指导,开发者可以系统掌握Harbor私有镜像仓库的部署与运维技巧。从基础安装到高可用架构设计,从日常管理到故障排查,每个环节都提供了可落地的解决方案。建议在实际部署前进行充分的测试环境验证,并根据企业具体需求调整配置参数。