企业级内网Kubernetes Harbor部署实战:从离线资源准备到Ceph存储集成
在高度隔离的企业内网环境中部署Harbor镜像仓库,就像在没有GPS信号的深山老林里建造一座现代化仓库——你需要提前规划好每一条物资运输路线,确保每个环节都能在离线状态下自给自足。本文将带你完整走通这个技术迷宫,分享我在金融行业核心系统容器化改造中积累的实战经验。
1. 离线环境下的资源筹备策略
1.1 Helm Chart的离线获取与验证
在内网部署Harbor的第一步,就是解决"无米之炊"的问题。不同于公有云环境的即拿即用,我们需要像松鼠囤积过冬食物一样,预先准备好所有依赖资源。
获取Harbor Helm Chart的三种可靠方式:
-
GitHub Release直接下载(推荐用于严格审计环境)
bash复制
wget https://github.com/goharbor/harbor-helm/archive/v1.10.0.tar.gz tar zxvf v1.10.0.tar.gz -
Helm CLI打包(需预先配置可联网环境)
bash复制
helm repo add harbor https://helm.goharbor.io helm fetch harbor/harbor --version 1.10.0 -
Git克隆特定版本(适合需要代码审查的场景)
bash复制git clone https://github.com/goharbor/harbor-helm git checkout v1.10.0
版本兼容性矩阵:
| Harbor版本 | 支持的K8s版本 | 推荐的Helm版本 | 关键依赖 |
|---|---|---|---|
| 2.5.x | 1.19-1.22 | 3.7+ | PostgreSQL 12 |
| 2.6.x | 1.20-1.24 | 3.8+ | Redis 6 |
| 2.7.x | 1.22-1.26 | 3.9+ | Trivy 0.32 |
提示:实际项目中曾遇到因Chart版本与K8s版本不匹配导致的CRD报错,建议在测试环境先用
helm lint进行校验
1.2 容器镜像的离线搬运技巧
Harbor的组件镜像就像一套精密仪器的零件,缺一不可。在内网环境中,我们需要建立完整的镜像搬运流水线:
-
镜像清单分析:
bash复制# 查看Chart依赖的镜像列表 grep -r "repository:" harbor-helm/values.yaml -
镜像批量下载脚本:
python复制# harbor_mirror.py import yaml import os with open('harbor-helm/values.yaml') as f: values = yaml.safe_load(f) images = [] for key, value in values.items(): if isinstance(value, dict) and 'repository' in value: images.append(f"{value['repository']}:{value.get('tag', 'latest')}") for img in images: os.system(f"docker pull {img}
