Harbor实战指南:搭建企业级Docker与K8s镜像仓库

一、Harbor简介与核心价值

Harbor是由VMware开源的企业级私有Docker镜像仓库,专为满足企业级容器镜像管理需求而设计。相较于基础Docker Registry,Harbor提供了权限控制、镜像签名、漏洞扫描、审计日志等高级功能,完美适配Docker与Kubernetes(K8s)环境。其核心价值体现在:

  • 安全增强:支持RBAC权限模型与镜像签名,防止未授权镜像部署;
  • 高效管理:提供Web界面与REST API,简化镜像上传、下载与删除操作;
  • 合规性:内置漏洞扫描工具(Clair),满足金融、医疗等行业安全标准;
  • 高可用:支持多节点部署与数据备份,保障业务连续性。

二、环境准备与安装部署

1. 硬件与软件要求

  • 服务器配置:建议4核8G内存以上,磁盘空间根据镜像存储量规划(如100GB起);
  • 操作系统:CentOS 7/8或Ubuntu 20.04 LTS;
  • 依赖组件:Docker CE 19.03+、Docker Compose 1.25+。

2. 安装步骤

步骤1:下载Harbor安装包

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

步骤2:配置Harbor

编辑harbor.yml文件,关键配置项如下:

  1. hostname: registry.example.com # 修改为实际域名或IP
  2. http:
  3. port: 80 # HTTP访问端口
  4. # HTTPS配置(推荐)
  5. https:
  6. certificate: /path/to/cert.pem
  7. private_key: /path/to/key.pem
  8. # 数据库配置(默认使用内置SQLite)
  9. database:
  10. password: root123
  11. # 存储驱动(支持filesystem、s3、swift等)
  12. storage:
  13. filesystem:
  14. rootdir: /data

步骤3:执行安装

  1. ./install.sh

安装完成后,访问http://<hostname>,默认管理员账号为admin,密码为Harbor12345

三、Docker与Harbor集成

1. 配置Docker信任Harbor

在Docker客户端所在机器的/etc/docker/daemon.json中添加:

  1. {
  2. "insecure-registries": ["registry.example.com"] # 若未配置HTTPS
  3. }

重启Docker服务:

  1. systemctl restart docker

2. 镜像推送与拉取

登录Harbor

  1. docker login registry.example.com

标记并推送镜像

  1. docker tag nginx:latest registry.example.com/library/nginx:v1
  2. docker push registry.example.com/library/nginx:v1

从Harbor拉取镜像

  1. docker pull registry.example.com/library/nginx:v1

四、K8s集成Harbor作为镜像仓库

1. 配置K8s集群信任Harbor

在K8s的/etc/kubernetes/admin.conf或节点配置中,确保imagePullSecrets包含Harbor认证信息:

  1. apiVersion: v1
  2. kind: Secret
  3. metadata:
  4. name: harbor-secret
  5. type: kubernetes.io/dockerconfigjson
  6. data:
  7. .dockerconfigjson: <base64-encoded-docker-config> # 通过`kubectl create secret`生成

2. 在Pod中使用Harbor镜像

  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-secret

3. 使用Helm Chart从Harbor部署应用

若Harbor托管Helm Chart,需在values.yaml中指定仓库URL:

  1. repository:
  2. url: https://registry.example.com/chartrepo/library
  3. username: admin
  4. password: Harbor12345

五、安全加固与最佳实践

1. 启用HTTPS与自动证书管理

  • 使用Let’s Encrypt免费证书:
    1. certbot certonly --standalone -d registry.example.com
  • 配置Harbor的https段指向证书路径。

2. 镜像签名与验证

Harbor支持Notary进行镜像签名:

  1. # 生成签名密钥
  2. notary init registry.example.com/library/nginx
  3. notary sign registry.example.com/library/nginx:v1

在K8s中通过imagePolicy强制验证签名。

3. 定期清理未使用镜像

通过Harbor API或CronJob清理旧版本镜像:

  1. curl -X DELETE "http://registry.example.com/api/v2.0/projects/library/repositories/nginx/artifacts/v1" -u admin:Harbor12345

4. 多节点高可用部署

使用Harbor的高可用模式,通过共享存储(如NFS)与数据库(如PostgreSQL)实现:

  1. # harbor.yml高可用配置示例
  2. database:
  3. type: external
  4. postgresql:
  5. host: pg-master.example.com
  6. port: 5432
  7. username: harbor
  8. password: securepass
  9. sslmode: disable

六、故障排查与日志分析

1. 常见问题

  • 502 Bad Gateway:检查Nginx代理配置或后端服务状态;
  • 权限拒绝:验证Docker登录状态与K8s Secret;
  • 存储不足:扩展磁盘空间或配置对象存储。

2. 日志路径

  • Harbor核心日志/var/log/harbor/
  • 数据库日志/var/log/postgresql/
  • Docker守护进程日志journalctl -u docker

七、总结与扩展建议

Harbor作为企业级镜像仓库,通过其丰富的功能与灵活的配置,显著提升了Docker与K8s环境的镜像管理效率。对于大型企业,建议:

  1. 结合Prometheus+Grafana监控Harbor性能;
  2. 定期执行漏洞扫描并修复高危镜像;
  3. 探索Harbor与CI/CD流水线的深度集成(如Jenkins、GitLab)。

通过本文的指导,开发者可快速搭建并优化Harbor环境,为容器化应用提供安全、高效的镜像支撑。