K8s环境在线部署Harbor镜像仓库全流程指南

K8s环境在线部署Harbor镜像仓库全流程指南

一、技术背景与核心价值

在云原生技术栈中,Harbor作为开源的企业级镜像仓库,通过支持镜像复制、漏洞扫描、RBAC权限控制等功能,已成为Kubernetes(K8s)环境下的标准镜像管理方案。相较于Docker Registry,Harbor提供更完善的权限体系(基于RBAC)、镜像签名验证、审计日志等企业级特性,特别适合多团队协同开发场景。

在K8s集群中部署Harbor可实现:

  • 镜像存储与版本管理的集中化
  • 跨集群镜像同步的自动化
  • 镜像安全扫描的集成化
  • 访问权限的细粒度控制

二、部署前环境准备

2.1 基础环境要求

  • K8s集群版本:建议1.21+版本,需支持Ingress资源
  • 存储类型:需配置持久化存储(如NFS、Ceph、AWS EBS等)
  • 网络要求:NodePort或LoadBalancer类型Service
  • 域名配置:建议配置独立域名(如harbor.example.com)

2.2 依赖组件安装

  1. Helm安装

    1. # 安装Helm v3+
    2. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
    3. chmod 700 get_helm.sh
    4. ./get_helm.sh
  2. 持久化存储准备
    以NFS为例创建StorageClass:

    1. apiVersion: storage.k8s.io/v1
    2. kind: StorageClass
    3. metadata:
    4. name: nfs-storage
    5. provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
    6. parameters:
    7. archiveOnDelete: "false"

三、Harbor部署实施

3.1 Helm Chart配置

  1. 添加Bitnami仓库:

    1. helm repo add bitnami https://charts.bitnami.com/bitnami
    2. helm repo update
  2. 创建values.yaml定制文件:
    ```yaml

    values.yaml核心配置示例

    expose:
    type: ingress
    tls:
    enabled: true
    certSource: secret
    secret:
    secretName: “harbor-tls”
    items:

    1. - key: "tls.crt"
    2. path: "tls.crt"
    3. - key: "tls.key"
    4. path: "tls.key"

    ingress:
    hosts:

    • host: harbor.example.com
      paths:
      • path: /
        pathType: ImplementationSpecific
        annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/proxy-body-size: “0”

persistence:
enabled: true
persistentVolumeClaim:
storageClass: “nfs-storage”
accessModes: [“ReadWriteOnce”]
size: 20Gi

harborAdminPassword: “Harbor12345” # 生产环境建议使用Secret

database:
internal:
password: “DbPassword123”

core:
replicas: 2
resources:
requests:
cpu: “100m”
memory: “256Mi”
limits:
cpu: “500m”
memory: “1Gi”

  1. ### 3.2 部署执行流程
  2. 1. 创建命名空间:
  3. ```bash
  4. kubectl create namespace harbor
  1. 执行Helm安装:

    1. helm install harbor bitnami/harbor \
    2. --namespace harbor \
    3. -f values.yaml \
    4. --set expose.ingress.hosts[0].host=harbor.example.com
  2. 验证部署状态:

    1. kubectl get pods -n harbor
    2. # 预期输出:
    3. # NAME READY STATUS RESTARTS AGE
    4. # harbor-core-xxxxxx-xxx 1/1 Running 0 2m
    5. # harbor-database-0 1/1 Running 0 2m
    6. # harbor-portal-xxxxxx-xxx 1/1 Running 0 2m

四、部署后配置优化

4.1 客户端配置

  1. 配置Docker信任Harbor:

    1. # 创建/etc/docker/daemon.json
    2. {
    3. "insecure-registries" : ["harbor.example.com"],
    4. "registry-mirrors": []
    5. }
    6. # 重启服务
    7. systemctl restart docker
  2. 登录Harbor:

    1. docker login harbor.example.com
    2. # 输入用户名admin和配置的密码

4.2 高级功能配置

  1. 项目创建与权限管理

    1. # 通过API创建项目(需先获取admin token)
    2. curl -X POST -u "admin:Harbor12345" \
    3. -H "Content-Type: application/json" \
    4. -d '{"project_name": "dev-team", "public": false}' \
    5. "https://harbor.example.com/api/v2.0/projects"
  2. 镜像复制策略

    1. # 创建replication-policy.yaml
    2. apiVersion: goharbor.io/v1alpha1
    3. kind: ReplicationPolicy
    4. metadata:
    5. name: dev-to-prod
    6. spec:
    7. name: dev-to-prod
    8. project: dev-team
    9. filters:
    10. - type: name
    11. value: "*-prod"
    12. destRegistry:
    13. name: prod-registry
    14. url: "https://prod-harbor.example.com"
    15. insecure: false
    16. trigger:
    17. type: manual

五、运维管理最佳实践

5.1 监控告警配置

  1. Prometheus监控配置:

    1. # serviceMonitor.yaml
    2. apiVersion: monitoring.coreos.com/v1
    3. kind: ServiceMonitor
    4. metadata:
    5. name: harbor-monitor
    6. labels:
    7. release: prometheus-operator
    8. spec:
    9. selector:
    10. matchLabels:
    11. app.kubernetes.io/name: harbor
    12. endpoints:
    13. - port: http
    14. interval: 30s
    15. path: /metrics
  2. 关键监控指标:

  • harbor_project_count:项目数量
  • harbor_artifact_count:镜像数量
  • harbor_request_duration_seconds:请求延迟

5.2 备份恢复方案

  1. 数据库备份:

    1. kubectl exec -n harbor harbor-database-0 -- \
    2. pg_dump -U postgres -h 127.0.0.1 registry > backup.sql
  2. 持久化数据备份:

    1. # 假设使用NFS存储
    2. tar -czvf harbor-data-backup.tar.gz /mnt/nfs/harbor/

六、常见问题解决方案

6.1 部署故障排查

  1. Pod启动失败

    1. # 查看详细日志
    2. kubectl logs -n harbor harbor-core-xxxxxx-xxx --previous
    3. # 常见原因:
    4. # - 存储卷挂载失败(检查PVC状态)
    5. # - 数据库连接失败(验证密码配置)
    6. # - 端口冲突(检查NodePort/LoadBalancer配置)
  2. Ingress访问502错误

    1. # 检查Nginx Ingress Controller日志
    2. kubectl logs -n ingress-nginx ingress-nginx-controller-xxxxxx-xxx
    3. # 常见解决方案:
    4. # - 增加core组件资源限制
    5. # - 调整proxy_body_size配置

6.2 性能优化建议

  1. 水平扩展配置

    1. # 在values.yaml中调整副本数
    2. core:
    3. replicas: 3
    4. jobservice:
    5. replicas: 2
  2. 缓存优化

    1. # 启用Redis缓存
    2. cache:
    3. enabled: true
    4. redis:
    5. host: redis-master
    6. port: 6379

七、升级与扩展指南

7.1 版本升级流程

  1. 升级前准备

    1. # 备份当前配置
    2. helm get values harbor -n harbor > current-values.yaml
    3. # 备份持久化数据
  2. 执行升级

    1. helm upgrade harbor bitnami/harbor \
    2. -n harbor \
    3. -f current-values.yaml \
    4. --set core.image.tag=2.6.0

7.2 多集群部署架构

推荐采用”中心+边缘”架构:

  1. 中心Harbor(主仓库)
  2. ├── 边缘Harbor1(同步dev镜像)
  3. └── 边缘Harbor2(同步prod镜像)

通过配置复制策略实现镜像自动同步,降低网络带宽消耗。

八、安全加固建议

8.1 网络安全配置

  1. NetworkPolicy示例

    1. apiVersion: networking.k8s.io/v1
    2. kind: NetworkPolicy
    3. metadata:
    4. name: harbor-network-policy
    5. spec:
    6. podSelector:
    7. matchLabels:
    8. app.kubernetes.io/name: harbor
    9. policyTypes:
    10. - Ingress
    11. ingress:
    12. - from:
    13. - namespaceSelector:
    14. matchLabels:
    15. kubernetes.io/metadata.name: ingress-nginx
    16. ports:
    17. - protocol: TCP
    18. port: 80
  2. TLS证书管理

    1. # 使用cert-manager自动签发证书
    2. kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.yaml
    3. # 创建Certificate资源

8.2 数据安全配置

  1. 镜像签名验证

    1. # 在values.yaml中启用Notary
    2. notary:
    3. enabled: true
    4. server:
    5. replicas: 1
    6. signer:
    7. replicas: 1
  2. 定期安全扫描

    1. # 配置Clair扫描器
    2. clair:
    3. enabled: true
    4. image:
    5. repository: bitnami/clair
    6. tag: 2.1.6-debian-10-r0

九、总结与展望

通过Helm在K8s集群中部署Harbor镜像仓库,可实现从开发到生产的全流程镜像管理。实际部署中需重点关注:

  1. 持久化存储的性能与可靠性
  2. 网络安全策略的严格实施
  3. 监控告警体系的完整覆盖
  4. 备份恢复方案的定期演练

未来发展方向包括:

  • 与Service Mesh的深度集成
  • AI驱动的镜像漏洞预测
  • 跨云存储的统一管理

建议企业用户建立完善的Harbor运维规范,包括定期安全审计、容量规划、灾备演练等制度,确保镜像仓库的稳定运行。