logo

部署Harbor与K8s集成指南:打造企业级镜像管理方案

作者:Nicky2025.10.10 18:40浏览量:0

简介:本文详细介绍如何部署Harbor镜像仓库并配置其在Kubernetes集群中的使用,涵盖环境准备、Harbor安装、证书配置、K8s集成及高可用优化,为企业提供安全高效的容器镜像管理方案。

部署Harbor镜像仓库并在k8s配置使用

一、环境准备与需求分析

1.1 基础环境要求

部署Harbor镜像仓库需满足以下条件:

  • 服务器配置:建议4核8G以上,存储空间根据镜像规模预留(通常200GB起)
  • 操作系统:CentOS 7/8或Ubuntu 20.04 LTS(推荐)
  • 依赖组件:Docker Engine 19.03+、Docker Compose 1.25+
  • 网络要求:开放443(HTTPS)、80(HTTP)、22(SSH)端口,建议配置负载均衡

1.2 Kubernetes集群准备

  • 集群版本:1.18+(支持Ingress API)
  • 存储类:配置动态存储卷(如NFS、Ceph或云存储
  • 网络插件:Calico/Flannel等支持NetworkPolicy的CNI
  • 证书管理:建议使用cert-manager或企业CA签发证书

二、Harbor核心组件部署

2.1 安装Docker与Docker Compose

  1. # Ubuntu示例
  2. curl -fsSL https://get.docker.com | sh
  3. systemctl enable docker
  4. curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  5. chmod +x /usr/local/bin/docker-compose

2.2 Harbor离线安装包准备

  1. Harbor官方发布页下载对应版本
  2. 解压后修改harbor.yml配置文件:
    1. hostname: harbor.example.com # 必须与DNS解析一致
    2. http:
    3. port: 80
    4. https:
    5. port: 443
    6. certificate: /data/cert/harbor.crt
    7. private_key: /data/cert/harbor.key
    8. harbor_admin_password: Harbor12345 # 初始密码
    9. database:
    10. password: root123
    11. max_idle_conns: 50
    12. max_open_conns: 100
    13. storage_driver:
    14. name: filesystem
    15. settings:
    16. rootdirectory: /var/lib/registry

2.3 证书配置最佳实践

  • 自签名证书生成
    1. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    2. -keyout /data/cert/harbor.key -out /data/cert/harbor.crt \
    3. -subj "/CN=harbor.example.com/O=Harbor"
  • 企业CA签发:将CA证书导入所有节点/etc/docker/certs.d/harbor.example.com/目录

2.4 启动Harbor服务

  1. ./install.sh --with-notary --with-trivy --with-chartmuseum
  2. docker-compose ps # 验证服务状态

三、Kubernetes集成配置

3.1 创建命名空间与Secret

  1. # harbor-secret.yaml
  2. apiVersion: v1
  3. kind: Secret
  4. metadata:
  5. name: harbor-registry
  6. namespace: kube-system
  7. type: kubernetes.io/dockerconfigjson
  8. data:
  9. .dockerconfigjson: eyJhdXRocyI6eyJodHRwczovL2hhcmJvci5leGFtcGxlLmNvbSI6eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJIYXJib3IxMjM0NSIsImF1dGgiOiJZV1J0YVc0NlJHNWtZWEowYVd4aGN5STZJQ0psSUhOeVpXWnBaWEp6SUdWdVpGTmxiR1Z6ZEdGMlpTQnBibU5zYVdWdWRGQjVZVzFsVkhsd1pUMGlZM0psWkRJd01USXdNVE15TVRFNE1EZ3pOVEl6TURBd016QT0ifX19

3.2 ImagePullSecrets全局配置

  1. kubectl create secret generic regcred \
  2. --from-file=.dockerconfigjson=/root/.docker/config.json \
  3. --type=kubernetes.io/dockerconfigjson -n default

在ServiceAccount中添加:

  1. automountServiceAccountToken: true
  2. imagePullSecrets:
  3. - name: regcred

3.3 Ingress路由配置示例

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: harbor-ingress
  5. annotations:
  6. nginx.ingress.kubernetes.io/proxy-body-size: "0"
  7. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  8. spec:
  9. tls:
  10. - hosts:
  11. - harbor.example.com
  12. secretName: harbor-tls
  13. rules:
  14. - host: harbor.example.com
  15. http:
  16. paths:
  17. - path: /
  18. pathType: Prefix
  19. backend:
  20. service:
  21. name: harbor-portal
  22. port:
  23. number: 80

四、高级功能配置

4.1 镜像复制策略

  1. # replication-policy.yaml
  2. apiVersion: goharbor.io/v1alpha2
  3. kind: ReplicationPolicy
  4. metadata:
  5. name: replicate-to-aws
  6. spec:
  7. name: replicate-to-aws
  8. filters:
  9. - type: name
  10. value: ".*"
  11. trigger:
  12. type: manual
  13. destination:
  14. url: https://aws-ecr.example.com
  15. insecure: false
  16. credential:
  17. accessKey: AKIAXXXXXXXXXXXXXX
  18. accessSecret: XXXXXXXXXXXXXXXXXXXXXXXXXXXX

4.2 漏洞扫描配置

  1. 启用Trivy扫描器:
    1. # 在harbor.yml中设置
    2. trivy:
    3. ignoreUnfixed: false
    4. skipUpdate: false
    5. insecure: false
    6. severity: "critical,high"
  2. 创建扫描策略:
    1. apiVersion: goharbor.io/v1alpha2
    2. kind: ScanPolicy
    3. metadata:
    4. name: default-policy
    5. spec:
    6. settings:
    7. autoScan: true
    8. severity: "critical,high"
    9. retentionDays: 30

4.3 高可用部署方案

  1. 数据库集群
    1. # postgresql-ha.yaml
    2. apiVersion: postgresql.k8s.elecants.com/v1
    3. kind: Cluster
    4. metadata:
    5. name: harbor-postgres
    6. spec:
    7. instances: 3
    8. storage:
    9. size: 100Gi
    10. backupRetentionPeriod: 30
  2. Redis集群
    1. helm repo add bitnami https://charts.bitnami.com/bitnami
    2. helm install redis-cluster bitnami/redis-cluster \
    3. --set cluster.nodes=6 \
    4. --set password=Redis12345

五、运维管理最佳实践

5.1 监控指标配置

  1. 启用Prometheus监控:
    1. # harbor-values.yaml
    2. metrics:
    3. enabled: true
    4. serviceMonitor:
    5. enabled: true
    6. namespace: monitoring
    7. interval: 30s
  2. 关键监控指标:
  • harbor_project_count:项目数量
  • harbor_artifact_count:镜像数量
  • harbor_request_duration_seconds:请求延迟

5.2 日志集中管理

  1. # filebeat-configmap.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: filebeat-config
  6. data:
  7. filebeat.yml: |
  8. filebeat.inputs:
  9. - type: log
  10. paths:
  11. - /var/log/harbor/*.log
  12. fields_under_root: true
  13. fields:
  14. app: harbor
  15. output.elasticsearch:
  16. hosts: ["elasticsearch:9200"]

5.3 备份恢复策略

  1. 数据库备份
    1. pg_dump -U postgres -h postgresql harbor > harbor_backup_$(date +%Y%m%d).sql
  2. 配置备份
    1. tar czvf harbor-config-backup.tar.gz /etc/harbor/ /var/lib/registry/

六、常见问题解决方案

6.1 证书错误处理

  • 现象x509: certificate signed by unknown authority
  • 解决方案
    1. # 在所有节点执行
    2. mkdir -p /etc/docker/certs.d/harbor.example.com
    3. cp harbor.crt /etc/docker/certs.d/harbor.example.com/ca.crt
    4. systemctl restart docker

6.2 性能优化建议

  1. 存储优化

    • 使用SSD存储Registry数据
    • 配置storage_cache.layer_cache_size: 10GB
  2. 网络优化

    1. # harbor.yml中调整
    2. proxy:
    3. http_proxy: ""
    4. https_proxy: ""
    5. no_proxy: "127.0.0.1,localhost,.example.com"

6.3 版本升级指南

  1. 备份数据
    1. docker-compose down
    2. tar czvf harbor-data-backup.tar.gz /data/
  2. 升级步骤
    1. wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz
    2. tar xvf harbor-offline-installer-v2.5.0.tgz
    3. cp old-harbor/harbor.yml new-harbor/
    4. cd new-harbor
    5. ./prepare --upgrade
    6. ./install.sh --upgrade

七、总结与扩展建议

  1. 安全加固

    • 启用RBAC权限控制
    • 配置审计日志
    • 定期轮换证书
  2. 扩展方向

    • 集成Vault管理密钥
    • 部署多区域复制
    • 实现自动清理策略
  3. 性能基准

    • 单节点支持500+并发推送
    • 集群模式支持1000+节点

通过本文的详细部署方案,企业可快速构建符合生产标准的Harbor镜像仓库,并与Kubernetes深度集成,实现容器镜像的全生命周期管理。建议定期进行健康检查和性能调优,确保系统稳定运行。

相关文章推荐

发表评论

活动