Harbor搭建指南:构建安全的Docker与K8s镜像仓库

一、Harbor核心价值与适用场景

Harbor作为开源的企业级私有镜像仓库,通过角色权限控制、镜像签名、漏洞扫描等功能,解决了公有仓库(如Docker Hub)存在的安全风险、网络依赖及管理低效等问题。尤其适用于金融、医疗等对数据安全要求严苛的行业,以及需要管理多团队、多项目镜像的复杂场景。

典型应用场景包括:

  1. 隔离敏感镜像:防止核心业务镜像泄露至外部
  2. 加速镜像分发:通过内置的镜像复制功能实现跨地域同步
  3. 合规性要求:满足等保2.0对数据存储加密的要求
  4. DevOps集成:与Jenkins、GitLab等工具无缝对接

二、环境准备与安装部署

2.1 系统要求

  • 操作系统:CentOS 7+/Ubuntu 18.04+
  • 硬件配置:4核CPU、8GB内存、50GB磁盘(生产环境建议翻倍)
  • 依赖组件:Docker Engine 18.09+、Docker Compose 1.25+

2.2 安装步骤(离线模式)

  1. 下载安装包

    1. wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
    2. tar xvf harbor-offline-installer-v2.7.0.tgz
  2. 配置修改
    编辑harbor.yml文件,关键配置项:

    1. hostname: registry.example.com # 必须为域名格式
    2. http:
    3. port: 80
    4. https:
    5. certificate: /path/to/cert.pem
    6. private_key: /path/to/key.pem
    7. harbor_admin_password: Harbor12345 # 初始密码
    8. database:
    9. password: root123
    10. max_idle_conns: 50
    11. max_open_conns: 100
  3. 执行安装

    1. ./install.sh --with-trivy # 启用漏洞扫描功能
  4. 验证服务

    1. docker ps | grep harbor
    2. # 应看到包含core、portal、jobservice等6个容器

三、核心功能配置详解

3.1 项目管理策略

  1. 创建项目

    1. curl -X POST -u "admin:Harbor12345" \
    2. -H "Content-Type: application/json" \
    3. -d '{"project_name": "dev-team", "public": false}' \
    4. http://registry.example.com/api/v2.0/projects
  2. 权限模型

  • 系统角色:管理员、项目管理员、开发者、访客
  • 仓库权限:推送、拉取、删除、管理(配置)
  • 示例:为K8s集群分配只读权限
    ```bash

    创建系统用户

    curl -X POST -u “admin:Harbor12345” \
    -H “Content-Type: application/json” \
    -d ‘{“username”: “k8s-robot”, “email”: “k8s@example.com”, “password”: “SecurePass123”}’ \
    http://registry.example.com/api/v2.0/users

分配项目权限

curl -X POST -u “admin:Harbor12345” \
-H “Content-Type: application/json” \
-d ‘{“role_id”: 2, “access”: [{“resource”: “repository”, “action”: “pull”}]}’ \
http://registry.example.com/api/v2.0/projects/1/members

  1. ## 3.2 镜像复制规则
  2. 配置跨数据中心镜像同步:
  3. ```yaml
  4. # 在harbor.yml中添加复制适配器
  5. replication:
  6. adapters:
  7. - name: default
  8. endpoint: http://registry.example.com
  9. insecure: false
  10. access_key: admin
  11. secret_key: Harbor12345

创建复制策略:

  1. curl -X POST -u "admin:Harbor12345" \
  2. -H "Content-Type: application/json" \
  3. -d '{
  4. "name": "prod-sync",
  5. "projects": [{"project_id": 1}],
  6. "target_project_id": 2,
  7. "trigger": {
  8. "type": "immediate"
  9. },
  10. "filters": [{"tag_filter": ".*"}]
  11. }' \
  12. http://registry.example.com/api/v2.0/replication/policies

四、K8s集群集成实践

4.1 创建Secret对象

  1. kubectl create secret docker-registry regcred \
  2. --docker-server=registry.example.com \
  3. --docker-username=k8s-robot \
  4. --docker-password=SecurePass123 \
  5. --docker-email=k8s@example.com

4.2 Pod定义示例

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: private-nginx
  5. spec:
  6. containers:
  7. - name: nginx
  8. image: registry.example.com/dev-team/nginx:1.23
  9. imagePullSecrets:
  10. - name: regcred

4.3 镜像拉取优化

配置ImagePullSecrets全局默认值:

  1. # 修改kubelet配置(需重启服务)
  2. vim /etc/kubernetes/kubelet.conf
  3. # 添加:
  4. # "imagePullSecrets": [{"name": "regcred"}]

五、运维管理与故障排查

5.1 日常维护任务

  1. 存储空间管理

    1. # 清理未标记的镜像
    2. docker run -it --name gc --rm \
    3. -v /var/run/docker.sock:/var/run/docker.sock \
    4. goharbor/harbor-gc:v2.7.0
  2. 日志轮转配置
    编辑/etc/logrotate.d/harbor

    1. /var/log/harbor/*.log {
    2. daily
    3. missingok
    4. rotate 30
    5. compress
    6. delaycompress
    7. notifempty
    8. copytruncate
    9. }

5.2 常见问题处理

  1. 证书验证失败

    1. # 在/etc/docker/daemon.json中添加:
    2. {
    3. "insecure-registries": ["registry.example.com"]
    4. }
    5. # 或配置正确CA证书
  2. 性能瓶颈优化

  • 数据库调优:修改/harbor/common/config/database中的连接池参数
  • 缓存配置:在harbor.yml中设置:
    1. cache:
    2. enabled: true
    3. expire_hours: 24

六、安全加固建议

  1. 网络隔离
  • 限制管理端口(80/443)仅允许办公网络访问
  • 启用双向TLS认证
  1. 审计日志

    1. # 配置syslog转发
    2. vim /etc/rsyslog.d/harbor.conf
    3. local0.* /var/log/harbor/audit.log
  2. 定期安全扫描

    1. # 使用Trivy进行镜像扫描
    2. docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
    3. -v $PWD:/root aquasec/trivy image --severity CRITICAL \
    4. registry.example.com/dev-team/nginx:1.23

通过上述配置,企业可构建出满足等保三级要求的镜像仓库,实现镜像全生命周期管理。实际部署时建议先在测试环境验证所有配置,再逐步推广至生产环境。对于超大规模部署(>1000节点),可考虑采用Harbor的分布式架构,通过多实例部署实现水平扩展。