Harbor企业级镜像仓库搭建指南:Docker与K8s环境配置全解析

一、Harbor镜像仓库的核心价值与适用场景

Harbor是由Cloud Native Computing Foundation(CNCF)维护的开源企业级镜像仓库,专为Docker和Kubernetes(K8s)环境设计。其核心价值体现在三个方面:

  1. 安全管控:支持基于角色的访问控制(RBAC)、镜像签名与漏洞扫描,可有效防范恶意镜像注入。
  2. 性能优化:通过代理缓存加速镜像拉取,减少跨地域网络延迟,提升CI/CD流水线效率。
  3. 合规性保障:提供审计日志与镜像保留策略,满足金融、医疗等行业对数据留存与访问追踪的要求。

典型应用场景包括:

  • 私有云环境下集中管理Docker镜像,替代公共仓库(如Docker Hub)
  • 为K8s集群提供可靠的镜像源,避免因网络问题导致Pod启动失败
  • 多团队协作时实现镜像隔离与权限分级

二、环境准备与前置条件

1. 硬件资源要求

组件 最低配置 推荐配置
服务器 4核CPU/8GB内存/50GB磁盘 8核CPU/16GB内存/200GB磁盘
网络带宽 100Mbps 1Gbps(生产环境)

2. 软件依赖项

  • 操作系统:CentOS 7/8或Ubuntu 20.04 LTS
  • Docker引擎:20.10+版本(需启用Cgroup v2)
  • Kubernetes:1.22+版本(若部署Ingress需安装Nginx/Traefik)
  • 数据库:PostgreSQL 12+或MySQL 8.0(Harbor 2.0+推荐)

3. 网络配置要点

  • 开放端口:80(HTTP)、443(HTTPS)、4443(控制台)
  • 域名解析:需配置DNS记录指向服务器IP
  • 防火墙规则:允许入站TCP流量至上述端口

三、Harbor安装与配置全流程

1. 离线安装方式(推荐生产环境)

  1. # 下载Harbor安装包(以2.5.0版本为例)
  2. wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
  3. tar xvf harbor-offline-installer-v2.5.0.tgz
  4. cd harbor
  5. # 修改配置文件harbor.yml
  6. vim harbor.yml

关键配置项说明:

  1. hostname: registry.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_idle_conns: 50
  11. max_open_conns: 100
  12. storage_driver:
  13. name: filesystem
  14. fs_driver:
  15. rootdirectory: /var/lib/harbor

执行安装命令:

  1. ./install.sh --with-trivy # 包含漏洞扫描功能

2. 在线安装方式(快速测试)

  1. curl -L https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-online-installer-v2.5.0.tgz | tar xvf -
  2. cd harbor
  3. cp sample/harbor.yml.tmpl harbor.yml
  4. # 修改配置后执行
  5. ./prepare.sh
  6. docker compose up -d

四、Docker客户端配置指南

1. 配置可信证书

将Harbor服务器的CA证书复制至Docker信任目录:

  1. mkdir -p /etc/docker/certs.d/registry.example.com
  2. scp user@harbor-server:/data/cert/harbor.crt /etc/docker/certs.d/registry.example.com/ca.crt
  3. systemctl restart docker

2. 登录与镜像操作

  1. docker login registry.example.com
  2. # 推送镜像示例
  3. docker tag nginx:latest registry.example.com/library/nginx:v1
  4. docker push registry.example.com/library/nginx:v1
  5. # 拉取镜像示例
  6. docker pull registry.example.com/library/nginx:v1

五、Kubernetes集成方案

1. 创建ImagePullSecrets

  1. # 生成base64编码的认证信息
  2. echo -n "admin:Harbor12345" | base64
  3. # 创建Secret
  4. apiVersion: v1
  5. kind: Secret
  6. metadata:
  7. name: harbor-registry
  8. namespace: default
  9. data:
  10. .dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS5leGFtcGxlLmNvbSI6eyJhdXRoIjoi...}}
  11. type: kubernetes.io/dockerconfigjson

2. 在Pod中引用私有镜像

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx-pod
  5. spec:
  6. containers:
  7. - name: nginx
  8. image: registry.example.com/library/nginx:v1
  9. imagePullSecrets:
  10. - name: harbor-registry

3. 使用Ingress暴露服务(可选)

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: harbor-ingress
  5. spec:
  6. rules:
  7. - host: registry.example.com
  8. http:
  9. paths:
  10. - path: /
  11. pathType: Prefix
  12. backend:
  13. service:
  14. name: harbor-portal
  15. port:
  16. number: 80

六、高级功能配置

1. 漏洞扫描集成(Trivy)

在harbor.yml中启用:

  1. trivy:
  2. ignore_unfixed: false
  3. skip_update: false
  4. insecure: false

执行扫描命令:

  1. curl -X POST "http://registry.example.com/api/v2.0/projects/library/repositories/nginx/artifacts/v1/scan" \
  2. -H "accept: application/json" \
  3. -H "authorization: Basic $(echo -n 'admin:Harbor12345' | base64)"

2. 复制策略配置

创建跨仓库复制规则:

  1. # 通过API创建
  2. POST /api/v2.0/replication/policies
  3. {
  4. "name": "cloud-replication",
  5. "projects": [
  6. {"project_id": 1}
  7. ],
  8. "target": {
  9. "name": "aws-ecr",
  10. "url": "https://123456789012.dkr.ecr.us-east-1.amazonaws.com",
  11. "insecure": false
  12. },
  13. "trigger": {
  14. "type": "immediate"
  15. },
  16. "filters": [
  17. {"type": "name", "value": "prod-*"}
  18. ]
  19. }

3. 日志收集与分析

配置Filebeat收集日志:

  1. filebeat.inputs:
  2. - type: log
  3. paths:
  4. - /var/log/harbor/*.log
  5. fields:
  6. app: harbor
  7. fields_under_root: true
  8. output.elasticsearch:
  9. hosts: ["es-server:9200"]

七、运维与故障排查

1. 常见问题处理

  • 502 Bad Gateway:检查Nginx代理配置,确认后端服务状态
  • 证书过期:使用openssl x509 -noout -dates -in harbor.crt检查有效期
  • 数据库连接失败:验证harbor.yml中的数据库密码与实际一致

2. 性能优化建议

  • 数据库调优:PostgreSQL配置shared_buffers = 256MBwork_mem = 4MB
  • 存储优化:启用ZFS或Btrfs文件系统以获得更好的快照能力
  • 网络优化:配置TCP BBR拥塞控制算法

3. 备份与恢复方案

  1. # 备份数据库
  2. pg_dump -U postgres -h 127.0.0.1 -p 5432 harbor > harbor_backup.sql
  3. # 备份配置文件
  4. tar czvf harbor_config_backup.tar.gz /etc/harbor/

八、安全加固最佳实践

  1. 网络隔离:将Harbor部署在独立VPC,仅允许特定IP访问管理界面
  2. 双因素认证:集成OAuth2/OIDC实现SSO登录
  3. 镜像签名:使用Notary对关键镜像进行数字签名
  4. 定期审计:通过harbor-admin命令行工具检查用户权限

九、升级与版本管理

1. 升级流程

  1. # 下载新版本安装包
  2. wget https://github.com/goharbor/harbor/releases/download/v2.6.0/harbor-offline-installer-v2.6.0.tgz
  3. # 备份当前数据
  4. docker run -it --name harbor-backup \
  5. -v /var/lib/harbor:/var/lib/harbor \
  6. -v /data:/data \
  7. alpine:latest tar czvf /backup/harbor_data_$(date +%F).tar.gz /var/lib/harbor /data
  8. # 执行升级
  9. ./prepare.sh
  10. docker compose down
  11. docker compose up -d

2. 版本兼容性矩阵

Harbor版本 推荐Docker版本 推荐K8s版本
2.5.x 20.10-23.0 1.22-1.25
2.6.x 23.0+ 1.25+

通过以上系统化的部署方案,企业可快速构建符合生产标准的镜像仓库,实现Docker与K8s环境的无缝集成。实际部署时建议先在测试环境验证配置,再逐步推广至生产系统。