基于K8s在线部署Harbor镜像仓库全流程指南
2025.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状态。示例输出:
NAME STATUS ROLES AGE VERSIONnode-01 Ready <none> 28d v1.22.4node-02 Ready <none> 28d v1.22.4
1.2 依赖组件安装
Helm 3.x部署
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh
验证安装:
helm version# 预期输出:version.BuildInfo{Version:"v3.8.0"...}
Ingress Controller配置(以Nginx为例)
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginxhelm install ingress-nginx ingress-nginx/ingress-nginx \--namespace ingress-nginx --create-namespace
二、Harbor核心组件部署
2.1 Helm Chart仓库添加
helm repo add harbor https://helm.goharbor.iohelm repo update
2.2 自定义Values配置
创建harbor-values.yaml文件,关键配置项:
expose:type: ingresstls:enabled: truecertSource: secretsecret:secretName: "harbor-tls"firstName: "tls.crt"keyName: "tls.key"ingress:hosts:- host: harbor.example.compaths:- path: /pathType: ImplementationSpecificannotations:nginx.ingress.kubernetes.io/proxy-body-size: "0"persistence:persistentVolumeClaim:registry:storageClass: "managed-nfs-storage" # 根据实际存储类调整accessMode: ReadWriteOncesize: 100Gichartmuseum:enabled: truestorageClass: "managed-nfs-storage"size: 10Gidatabase:internal:password: "Harbor12345" # 生产环境建议使用Secretcore:secret: "HarborCoreSecret"xsrfKey: "random-generated-key"jobservice:secret: "HarborJobService"trivy:enabled: trueignoreUnfixed: falseskipUpdate: false
2.3 部署命令执行
helm install harbor harbor/harbor \--namespace harbor-system --create-namespace \-f harbor-values.yaml
2.4 部署状态验证
kubectl get pods -n harbor-system# 预期输出:# NAME READY STATUS RESTARTS AGE# harbor-core-... 1/1 Running 0 2m# harbor-database-... 1/1 Running 0 2m# harbor-jobservice-... 1/1 Running 0 2m# harbor-portal-... 1/1 Running 0 2m# harbor-registry-... 1/1 Running 0 2m# harbor-trivy-... 1/1 Running 0 2m
三、安全加固与最佳实践
3.1 TLS证书配置
自签名证书生成(测试环境)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout tls.key -out tls.crt \-subj "/CN=harbor.example.com/O=Harbor"
创建K8s Secret
kubectl create secret tls harbor-tls \--namespace=harbor-system \--cert=tls.crt --key=tls.key
3.2 访问控制策略
创建管理员账户
kubectl exec -n harbor-system harbor-core-... -- \/bin/sh -c "HARBOR_ADMIN_PASSWORD=HarborAdmin123 \/harbor/install.sh --with-notary --with-clair"
项目级权限配置
通过Harbor Web界面创建项目后,执行:
# 获取项目IDPROJECT_ID=$(curl -u admin:HarborAdmin123 \-X GET "https://harbor.example.com/api/v2.0/projects" \-H "accept: application/json" | jq '.[].id')# 添加开发者权限curl -u admin:HarborAdmin123 -X POST \"https://harbor.example.com/api/v2.0/projects/$PROJECT_ID/members" \-H "accept: application/json" \-H "Content-Type: application/json" \-d '{"role_id": 2, # 2=开发者, 1=管理员, 3=访客"member_user": {"username": "devuser"}}'
3.3 镜像签名验证
配置Notary服务
在values.yaml中启用:
notary:enabled: trueserver:storageType: databasesecretName: notary-server-certssigner:secretName: notary-signer-certs
客户端签名示例
# 安装Notary客户端wget https://github.com/theupdateframework/notary/releases/download/v0.7.0/notary-Linux-amd64chmod +x notary-Linux-amd64sudo mv notary-Linux-amd64 /usr/local/bin/notary# 初始化信任仓库notary init harbor.example.com/library/nginx# 推送签名镜像docker push harbor.example.com/library/nginx:signednotary push harbor.example.com/library/nginx signed
四、运维与故障排查
4.1 日常维护命令
4.2 常见问题处理
502 Bad Gateway错误
检查Ingress Controller日志:
kubectl logs -n ingress-nginx ingress-nginx-controller-...
可能原因:
- Harbor Core未就绪
- 存储卷权限问题
- 资源不足导致Pod崩溃
镜像拉取失败
验证配置:
# 检查Ingress路由kubectl get ingress -n harbor-system# 测试直接访问Registrycurl -v -u admin:HarborAdmin123 \https://harbor.example.com/v2/_catalog
五、性能优化建议
5.1 水平扩展配置
# 在values.yaml中调整副本数core:replicas: 2registry:replicas: 3jobservice:replicas: 2
5.2 存储性能调优
- 使用SSD存储卷
- 配置
registry.storage.cache.blobdescriptor为redis - 调整
registry.storage.s3.chunksize为10MB(对象存储场景)
5.3 网络优化
# 启用TCP服务暴露expose:type: clusterIPclusterIP:registry:port: 5000core:port: 8080
通过本文的详细部署方案,开发者可在Kubernetes环境中快速构建企业级镜像仓库。实际部署时需根据集群规模调整资源参数,建议先在测试环境验证配置。生产环境务必启用HTTPS加密、定期备份数据库,并实施基于RBAC的细粒度权限控制。对于超大规模部署,可考虑使用Harbor Operator实现自动化运维。

发表评论
登录后可评论,请前往 登录 或 注册