私有镜像仓库的深度实践:在Kubernetes 1.28.2上构建与集成Harbor的完整指南
在云原生技术栈中,容器镜像作为应用交付的核心载体,其存储与分发的效率、安全性和可控性至关重要。对于追求自主可控、安全合规或希望优化内部研发流程的团队而言,搭建一个私有的、企业级的容器镜像仓库,早已不是一道选择题,而是必答题。Harbor,作为CNCF的毕业项目,凭借其丰富的企业级功能——如多租户管理、镜像漏洞扫描、内容签名与验证、复制策略等,成为了构建私有镜像仓库的事实标准。然而,从零开始部署Harbor,并将其无缝集成到Kubernetes集群中,特别是处理自签名证书带来的信任链问题,往往会成为开发者,尤其是刚接触这一领域的朋友们,所面临的第一道技术门槛。本文将从一个实践者的视角,手把手地带你走过在Kubernetes 1.28.2环境中部署Harbor、配置证书,并彻底解决集群节点拉取镜像时遭遇的“x509: certificate signed by unknown authority”错误的完整旅程。我们不仅关注“怎么做”,更会探讨“为什么这么做”,以及在不同场景下的最佳实践与避坑指南。
1. 环境规划与Harbor部署
在动手之前,清晰的规划是成功的一半。我们假设你已有一个运行正常的Kubernetes 1.28.2集群,并使用containerd作为容器运行时。集群的网络插件(如Calico、Flannel)和存储类(StorageClass)应已就绪,因为Harbor的持久化数据需要可靠的存储支持。
1.1 部署模式选择与资源预估
Harbor支持多种部署模式,对于生产环境,我们强烈建议采用高可用(HA)部署,通常通过Helm Chart在K8s集群内部署。但对于初次实践或测试环境,使用官方提供的docker-compose方式在集群外的一台独立主机上部署,同样能让你快速理解其组件架构。本文将以K8s内Helm部署为主线,因为它更贴近云原生的运维模式。
首先,你需要为Harbor预留足够的资源。一个基础功能的Harbor实例(包含核心、数据库、Redis、存储服务等)建议分配:
| 组件 | CPU请求 | 内存请求 | 持久化存储 | 说明 |
|---|---|---|---|---|
| Core | 500m | 2Gi | 1Gi | 核心服务,处理API和UI请求 |
| Job Service | 200m | 1Gi | - | 执行镜像复制、垃圾清理等后台任务 |
| Registry | 500m | 1Gi | 10Gi+ | 实际存储镜像数据的仓库,存储需求随镜像量增长 |
| Database | 500m | 1Gi | 10Gi | PostgreSQL数据库,存储元数据 |
| Redis | 100m | 128Mi | - |

&spm=1001.2101.3001.5002&articleId=153815848&d=1&t=3&u=a1535071975549dc8853c40e4f1cccfe)
268

被折叠的 条评论
为什么被折叠?



