logo

基于K8s在线部署Harbor镜像仓库全流程指南

作者:4042025.10.10 18:46浏览量:6

简介:本文详细介绍在Kubernetes集群中在线安装Harbor镜像仓库的完整流程,涵盖环境准备、Helm部署、配置优化及安全加固等关键环节,为开发者提供可落地的技术方案。

一、环境准备与前置条件

1.1 Kubernetes集群基础要求

部署Harbor前需确保K8s集群满足以下条件:

  • 版本兼容性:Kubernetes 1.16+(推荐1.20+)
  • 资源配额:至少4核CPU、8GB内存及50GB存储
  • 网络要求:开放443(HTTPS)、80(HTTP)及22(可选SSH)端口
  • 存储类型:支持NFS/Ceph/AWS EBS等持久化存储(生产环境建议使用块存储)

通过kubectl get nodes验证节点状态,确保所有节点处于Ready状态。示例输出:

  1. NAME STATUS ROLES AGE VERSION
  2. node-01 Ready <none> 28d v1.22.4
  3. node-02 Ready <none> 28d v1.22.4

1.2 依赖组件安装

Helm 3.x部署

  1. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
  2. chmod 700 get_helm.sh
  3. ./get_helm.sh

验证安装:

  1. helm version
  2. # 预期输出:version.BuildInfo{Version:"v3.8.0"...}

Ingress Controller配置(以Nginx为例)

  1. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
  2. helm install ingress-nginx ingress-nginx/ingress-nginx \
  3. --namespace ingress-nginx --create-namespace

二、Harbor核心组件部署

2.1 Helm Chart仓库添加

  1. helm repo add harbor https://helm.goharbor.io
  2. helm repo update

2.2 自定义Values配置

创建harbor-values.yaml文件,关键配置项:

  1. expose:
  2. type: ingress
  3. tls:
  4. enabled: true
  5. certSource: secret
  6. secret:
  7. secretName: "harbor-tls"
  8. firstName: "tls.crt"
  9. keyName: "tls.key"
  10. ingress:
  11. hosts:
  12. - host: harbor.example.com
  13. paths:
  14. - path: /
  15. pathType: ImplementationSpecific
  16. annotations:
  17. nginx.ingress.kubernetes.io/proxy-body-size: "0"
  18. persistence:
  19. persistentVolumeClaim:
  20. registry:
  21. storageClass: "managed-nfs-storage" # 根据实际存储类调整
  22. accessMode: ReadWriteOnce
  23. size: 100Gi
  24. chartmuseum:
  25. enabled: true
  26. storageClass: "managed-nfs-storage"
  27. size: 10Gi
  28. database:
  29. internal:
  30. password: "Harbor12345" # 生产环境建议使用Secret
  31. core:
  32. secret: "HarborCoreSecret"
  33. xsrfKey: "random-generated-key"
  34. jobservice:
  35. secret: "HarborJobService"
  36. trivy:
  37. enabled: true
  38. ignoreUnfixed: false
  39. skipUpdate: false

2.3 部署命令执行

  1. helm install harbor harbor/harbor \
  2. --namespace harbor-system --create-namespace \
  3. -f harbor-values.yaml

2.4 部署状态验证

  1. kubectl get pods -n harbor-system
  2. # 预期输出:
  3. # NAME READY STATUS RESTARTS AGE
  4. # harbor-core-... 1/1 Running 0 2m
  5. # harbor-database-... 1/1 Running 0 2m
  6. # harbor-jobservice-... 1/1 Running 0 2m
  7. # harbor-portal-... 1/1 Running 0 2m
  8. # harbor-registry-... 1/1 Running 0 2m
  9. # harbor-trivy-... 1/1 Running 0 2m

三、安全加固与最佳实践

3.1 TLS证书配置

自签名证书生成(测试环境)

  1. openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  2. -keyout tls.key -out tls.crt \
  3. -subj "/CN=harbor.example.com/O=Harbor"

创建K8s Secret

  1. kubectl create secret tls harbor-tls \
  2. --namespace=harbor-system \
  3. --cert=tls.crt --key=tls.key

3.2 访问控制策略

创建管理员账户

  1. kubectl exec -n harbor-system harbor-core-... -- \
  2. /bin/sh -c "HARBOR_ADMIN_PASSWORD=HarborAdmin123 \
  3. /harbor/install.sh --with-notary --with-clair"

项目级权限配置

通过Harbor Web界面创建项目后,执行:

  1. # 获取项目ID
  2. PROJECT_ID=$(curl -u admin:HarborAdmin123 \
  3. -X GET "https://harbor.example.com/api/v2.0/projects" \
  4. -H "accept: application/json" | jq '.[].id')
  5. # 添加开发者权限
  6. curl -u admin:HarborAdmin123 -X POST \
  7. "https://harbor.example.com/api/v2.0/projects/$PROJECT_ID/members" \
  8. -H "accept: application/json" \
  9. -H "Content-Type: application/json" \
  10. -d '{
  11. "role_id": 2, # 2=开发者, 1=管理员, 3=访客
  12. "member_user": {
  13. "username": "devuser"
  14. }
  15. }'

3.3 镜像签名验证

配置Notary服务

在values.yaml中启用:

  1. notary:
  2. enabled: true
  3. server:
  4. storageType: database
  5. secretName: notary-server-certs
  6. signer:
  7. secretName: notary-signer-certs

客户端签名示例

  1. # 安装Notary客户端
  2. wget https://github.com/theupdateframework/notary/releases/download/v0.7.0/notary-Linux-amd64
  3. chmod +x notary-Linux-amd64
  4. sudo mv notary-Linux-amd64 /usr/local/bin/notary
  5. # 初始化信任仓库
  6. notary init harbor.example.com/library/nginx
  7. # 推送签名镜像
  8. docker push harbor.example.com/library/nginx:signed
  9. notary push harbor.example.com/library/nginx signed

四、运维与故障排查

4.1 日常维护命令

  1. # 查看存储使用情况
  2. kubectl exec -n harbor-system harbor-registry-... -- \
  3. du -sh /storage/docker/registry
  4. # 日志收集
  5. kubectl logs -n harbor-system harbor-core-... --tail=100
  6. # 备份数据库
  7. kubectl exec -n harbor-system harbor-database-... -- \
  8. pg_dump -U postgres -h 127.0.0.1 registry > backup.sql

4.2 常见问题处理

502 Bad Gateway错误

检查Ingress Controller日志:

  1. kubectl logs -n ingress-nginx ingress-nginx-controller-...

可能原因:

  • Harbor Core未就绪
  • 存储卷权限问题
  • 资源不足导致Pod崩溃

镜像拉取失败

验证配置:

  1. # 检查Ingress路由
  2. kubectl get ingress -n harbor-system
  3. # 测试直接访问Registry
  4. curl -v -u admin:HarborAdmin123 \
  5. https://harbor.example.com/v2/_catalog

五、性能优化建议

5.1 水平扩展配置

  1. # 在values.yaml中调整副本数
  2. core:
  3. replicas: 2
  4. registry:
  5. replicas: 3
  6. jobservice:
  7. replicas: 2

5.2 存储性能调优

  • 使用SSD存储卷
  • 配置registry.storage.cache.blobdescriptor为redis
  • 调整registry.storage.s3.chunksize为10MB(对象存储场景)

5.3 网络优化

  1. # 启用TCP服务暴露
  2. expose:
  3. type: clusterIP
  4. clusterIP:
  5. registry:
  6. port: 5000
  7. core:
  8. port: 8080

通过本文的详细部署方案,开发者可在Kubernetes环境中快速构建企业级镜像仓库。实际部署时需根据集群规模调整资源参数,建议先在测试环境验证配置。生产环境务必启用HTTPS加密、定期备份数据库,并实施基于RBAC的细粒度权限控制。对于超大规模部署,可考虑使用Harbor Operator实现自动化运维。

相关文章推荐

发表评论

活动