1. 项目概述
在Kubernetes集群的实际运维中,私有镜像仓库是不可或缺的基础设施组件。Harbor作为企业级Registry解决方案,提供了镜像存储、签名扫描、权限控制等完整功能链。本章将基于kubeasz工具链,详细演示在二进制部署的K8s 1.34.x高可用集群中,如何从零搭建生产级Harbor服务。
操作环境说明:本文基于3个Master节点、2个Worker节点的拓扑结构,所有节点已通过kubeasz完成K8s基础集群部署,系统为CentOS 7.9,内核版本3.10.0-1160.el7.x86_64。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 部署规划与前置检查
2.1 硬件资源配置建议
| 组件 | CPU | 内存 | 存储 | 节点数 |
|---|---|---|---|---|
| Harbor Core | 4核 | 8GB | 100GB | 2 |
| PostgreSQL | 2核 | 4GB | 50GB | 1 |
| Redis | 1核 | 2GB | 20GB | 1 |
2.2 网络与域名准备
- 提前规划域名(如harbor.example.com)并配置DNS解析
- 确保节点间443、4443端口互通
- 若启用Notary服务需额外开放7899端口
2.3 证书准备(生产环境必须)
bash复制# 生成CA证书(示例)
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout ca.key -x509 -days 3650 \
-out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Example/CN=harbor.example.com"
# 生成服务器证书
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout harbor.key -out harbor.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=Example/CN=harbor.example.com"
3. 分步部署流程
3.1 通过kubeasz安装Harbor
bash复制# 在kubeasz管理节点执行
cd /etc/kubeasz/clusters/<集群名>/config
vim harbor.yml # 修改以下关键参数
---
external_url: https://harbor.example.com
harbor_admin_password: YourStrong@Password123
database:
password: pg@Password456
redis:
password: redis@Password789
persistence:
persistentVolumeClaim:
registry:
storageClass: "local-path"
size: 100Gi
chartmuseum:
storageClass: "local-path"
size: 20Gi
3.2 自定义配置调优
yaml复制# 追加性能优化参数
metrics:
enabled: true
port: 9090
log:
level: info
rotate_count: 50
rotate_size: 200M
jobservice:
max_job_workers: 10
registry:
middleware:
storage:
delete:
enabled: true
3.3 启动部署
bash复制# 应用配置
ansible-playbook /etc/kubeasz/roles/harbor/tasks/main.yml
# 验证部署
kubectl -n harbor get pods -w
4. 运维关键操作指南
4.1 日常维护命令
bash复制# 查看组件状态
harborctl health check
# 备份数据库
pg_dump -U postgres -d registry > harbor_backup_$(date +%Y%m%d).sql
# 清理旧镜像(需先启用垃圾回收策略)
harbor garbage-collect --dry-run
harbor garbage-collect --delete-untagged
4.2 高可用保障措施
- 存储层:配置Ceph RBD或Longhorn分布式存储
- 数据库:部署PostgreSQL流复制集群
- 前端:通过Ingress实现负载均衡
- 灾备:定期导出数据库+镜像存储快照
5. 典型问题排查
5.1 证书相关错误
现象:docker login报x509: certificate signed by unknown authority
解决:
bash复制# 所有节点执行
mkdir -p /etc/docker/certs.d/harbor.example.com
scp ca.crt <节点>:/etc/docker/certs.d/harbor.example.com/ca.crt
systemctl restart docker
5.2 镜像推送失败
现象:received unexpected HTTP status: 500 Internal Server Error
检查步骤:
- 查看registry日志:
kubectl logs -n harbor <registry-pod> - 确认存储卷剩余空间
- 检查NFS连接状态(如果使用)
5.3 性能优化建议
- 对于大型镜像仓库,建议单独部署Redis集群
- 调整registry的
max_connections参数(默认值为1000) - 启用镜像分层缓存:
yaml复制registry:
cache:
blobdescriptor: redis
6. 安全加固方案
6.1 网络隔离策略
bash复制# 创建NetworkPolicy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: harbor-isolation
namespace: harbor
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
role: ci-cd
egress:
- to:
- namespaceSelector:
matchLabels:
role: kube-system
6.2 扫描策略配置
- 启用CVE每日扫描
- 设置阻断高风险漏洞策略
- 集成Clair漏洞数据库
- 配置Webhook通知(如Slack、钉钉)
关键安全提示:定期轮换数据库密码和Redis密码,建议通过Harbor的secret管理功能实现自动更新。
