K8s-Helm3私有仓库搭建与内网部署实战

张开发
2026/4/21 9:21:46 15 分钟阅读

分享文章

K8s-Helm3私有仓库搭建与内网部署实战
1. Helm3私有仓库搭建的必要性在企业内网环境中部署Kubernetes应用时经常会遇到一个棘手问题由于安全策略限制集群节点无法直接访问公网的Helm官方仓库。这时候就需要搭建私有Helm仓库就像在公司内部建立一个专属的应用商店。我去年给某金融机构做容器化改造时就遇到过这种情况他们的生产环境完全隔离外网但又有几十个团队需要共享Chart模板。私有仓库不仅能解决网络隔离问题还能带来三个实际好处版本管控避免开发团队随意使用不同版本的中间件比如有的用Redis 6.2有的用7.0审计追溯所有Chart上传都需要审批变更记录可查询加速部署内网传输速度比从公网拉取快10倍以上2. 离线环境下的Helm3安装2.1 版本匹配原则在开始之前务必检查Kubernetes集群版本与Helm的兼容性。根据我的踩坑经验Helm3.8.x最适合Kubernetes 1.23.x版本。曾经有客户强行用Helm3.11搭配K8s 1.19结果出现API版本不兼容的报错。离线安装具体步骤# 下载对应版本的二进制包以3.8.2为例 wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz # 解压并安装 tar -zxvf helm-v3.8.2-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/ # 验证安装 helm version --short2.2 配置优化技巧安装完成后建议做两个优化命令补全省去记忆复杂参数的麻烦echo source (helm completion bash) ~/.bashrcKubeconfig指定在多集群环境下特别有用export KUBECONFIG/etc/kubernetes/admin.conf3. 两种私有仓库搭建方案对比3.1 容器化部署方案对于已经有K8s集群的环境用Deployment部署是最便捷的方式。下面这个配置模板经过我多次实战验证apiVersion: apps/v1 kind: Deployment metadata: name: chartmuseum spec: replicas: 1 template: spec: containers: - name: chartmuseum image: chartmuseum/chartmuseum:v0.15.0 ports: - containerPort: 8080 env: - name: STORAGE value: local - name: STORAGE_LOCAL_ROOTDIR value: /charts volumeMounts: - mountPath: /charts name: chart-data volumes: - name: chart-data persistentVolumeClaim: claimName: chartmuseum-pvc关键参数说明STORAGE支持local、AWS S3、阿里云OSS等多种后端持久化存储必须挂载PVC避免数据丢失资源限制建议内存限制在512Mi以上3.2 裸机部署方案如果没有K8s环境可以直接在物理机运行docker run -d \ -p 8080:8080 \ -v /data/charts:/charts \ -e STORAGElocal \ chartmuseum/chartmuseum:v0.15.0两种方案的对比特性容器化方案裸机方案高可用支持多副本需额外配置维护成本中等低扩展性容易横向扩展有限适合场景生产环境测试环境4. Chart上传与索引管理4.1 制作自定义Chart创建一个测试Chart并打包helm create myapp helm package myapp --destination ./repo目录结构解析myapp/ ├── charts/ # 子Chart依赖 ├── templates/ # K8s资源模板 │ ├── deployment.yaml │ ├── service.yaml ├── Chart.yaml # 元数据 └── values.yaml # 默认配置4.2 生成仓库索引这是最容易出错的环节需要特别注意--url参数的格式helm repo index ./repo \ --url http://内网IP:8080生成的index.yaml包含所有Chart的元信息类似这样apiVersion: v1 entries: myapp: - apiVersion: v2 created: 2023-07-20T08:00:00Z version: 0.1.05. 安全认证与访问控制5.1 基础认证配置给仓库添加用户名密码保护helm repo add myrepo http://仓库地址 \ --username admin \ --password Secure1235.2 HTTPS加密方案生产环境强烈建议配置HTTPS用OpenSSL生成自签名证书openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pemNginx配置示例server { listen 443 ssl; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://chartmuseum:8080; } }6. 日常维护与故障排查6.1 仓库更新流程当有新Chart上传时必须重新生成索引helm repo index --merge index.yaml --url http://仓库地址 ./repo6.2 常见问题处理问题1helm search查不到新上传的Chart解决方法先执行helm repo update问题2安装时提示failed to fetch检查网络连通性验证index.yaml是否包含该Chart查看仓库容器日志问题3HTTPS证书不受信任将CA证书添加到系统信任链或者使用--insecure-skip-tls-verify参数7. 高级应用场景7.1 与CI/CD流水线集成在Jenkins中自动上传Chart的示例stage(Package Chart) { sh helm package ./app -d ./repo sh curl -u admin:password \ -F chart./repo/app-1.0.0.tgz \ http://chartmuseum/api/charts }7.2 多仓库分级管理大型企业可以建立三级仓库开发仓库允许开发人员自由上传测试仓库经过QA验证的Chart生产仓库仅运维团队有写入权限配置优先级示例helm repo add prod http://生产仓库 --priority 100 helm repo add test http://测试仓库 --priority 200

更多文章