手把手教你用RKE离线部署K8s集群,再也不用担心内网没网了(附Rancher 2.5.7集成)
企业级Kubernetes离线部署实战:RKE+Rancher全内网解决方案
引言
在金融、军工、政务等对网络安全要求极高的行业领域,生产环境往往部署在严格隔离的内网中。这种架构虽然保障了数据安全,却给容器化平台的搭建带来了巨大挑战——无法直接访问互联网获取Kubernetes组件镜像。传统方案需要运维人员手动下载数百个依赖包,不仅耗时耗力,还容易因版本不匹配导致部署失败。本文将揭秘如何利用RKE(Rancher Kubernetes Engine)工具链,配合私有镜像仓库,在完全离线的环境中快速构建生产级K8s集群,并通过Rancher 2.5.7实现可视化管控。这套方案已在某大型金融机构数据中心成功验证,单集群部署时间从原来的3天缩短至2小时。
1. 离线环境建设基础
1.1 硬件资源规划建议
典型三节点高可用架构应包含:
- 3台Master节点(8核16G+):运行etcd和control plane组件
- 2+台Worker节点(根据业务需求配置):运行业务负载
- 1台镜像仓库服务器(建议独立部署):运行Harbor等私有仓库
- 1台跳板机(可选):用于外网镜像拉取和文件传输
注意:所有节点需确保时间同步(NTP服务)和SSH互信配置,磁盘建议采用SSD并保留至少40%剩余空间
1.2 私有镜像仓库建设
以Harbor为例的离线部署关键步骤:
# 在可联网环境准备离线安装包 wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz # 传输到内网后解压配置 tar xvf harbor-offline-installer-v2.5.3.tgz cd harbor vim harbor.yml # 修改hostname和端口配置 ./install.sh镜像同步策略对比表:
| 同步方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 全量导出导入 | 首次环境搭建 | 操作简单,版本一致 | 传输大文件耗时 |
| 按需分层同步 | 增量更新 | 节省带宽,快速回滚 | 需要维护版本清单 |
| 代理仓库模式 | 有条件外联的DMZ区 | 自动缓存常用镜像 | 需要网络边界放行 |
2. RKE离线集群部署详解
2.1 组件离线包准备
从Rancher官方渠道获取以下关键资源:
- RKE二进制文件(匹配K8s版本)
- Kubernetes核心镜像包(rancher-images.txt清单)
- Helm客户端工具(v3.x版本)
版本兼容性参考:
- RKE 1.3.x → Kubernetes 1.20-1.23 - Rancher 2.5.x → 支持K8s 1.18-1.20 - Helm 3.6+ → 兼容大多数chart版本2.2 集群配置文件定制
典型的高可用集群配置模板(cluster.yml):
nodes: - address: 192.168.1.101 internal_address: 10.0.0.101 user: k8sadmin role: [controlplane, etcd] ssh_key_path: "/home/k8sadmin/.ssh/id_rsa" - address: 192.168.1.102 internal_address: 10.0.0.102 user: k8sadmin role: [controlplane, etcd] - address: 192.168.1.103 internal_address: 10.0.0.103 user: k8sadmin role: [worker] private_registries: - url: registry.internal.com user: admin password: "Harbor12345" is_default: true services: etcd: snapshot: true retention: 72h creation: 6h2.3 离线部署实战命令
# 加载镜像到本地Docker docker load -i rancher-images.tar.gz # 推送镜像到私有仓库 ./rancher-load-images.sh --registry registry.internal.com # 启动集群部署(需提前配置好SSH免密登录) rke up --config cluster.yml常见故障排查点:
- 镜像标签不匹配:检查rancher-images.txt与实际拉取的版本
- 证书验证失败:在private_registries中配置insecure_registry: true
- 节点资源不足:调整kubelet的eviction-hard参数
3. Rancher 2.5.7离线集成方案
3.1 两种管理模式对比
独立部署模式:
docker run -d --name rancher \ -p 8443:443 \ -v /data/rancher:/var/lib/rancher \ -e CATTLE_SYSTEM_DEFAULT_REGISTRY=registry.internal.com \ registry.internal.com/rancher/rancher:v2.5.7适用场景:需要集中管理多个集群时
嵌入式部署模式:
helm install rancher rancher-latest/rancher \ --namespace cattle-system \ --set hostname=rancher.internal.com \ --set privateCA=true \ --set ingress.tls.source=secret适用场景:单一集群的轻量级管理
3.2 证书管理关键配置
离线环境需特别注意证书配置:
- 自签名CA证书生成:
openssl req -x509 -newkey rsa:4096 \ -sha256 -days 3650 -nodes \ -keyout tls.key -out tls.crt \ -subj "/CN=rancher.internal.com" - 将证书存入Kubernetes Secret:
kubectl -n cattle-system create secret tls tls-rancher \ --cert=tls.crt --key=tls.key
4. 生产环境优化实践
4.1 网络策略配置建议
典型Calico网络配置片段:
apiVersion: projectcalico.org/v3 kind: NetworkPolicy metadata: name: default-deny spec: selector: all() types: - Ingress - Egress4.2 监控方案实施
离线Prometheus部署要点:
- 预先下载所需charts和镜像
- 配置持久化存储(建议使用Local PV)
- 调整资源限制示例:
prometheus: resources: limits: cpu: 2 memory: 4Gi
4.3 升级维护策略
滚动更新最佳实践:
- 先更新etcd节点(逐个隔离更新)
- 再更新control plane节点
- 最后处理worker节点
- 每次变更后验证:
kubectl get componentstatuses curl -k https://localhost:6443/healthz
在实施某省政务云项目时,我们通过预先在测试环境验证升级路径,将生产环境的升级窗口从4小时压缩到30分钟。关键是要建立完整的镜像版本映射表,确保所有依赖组件的版本兼容性。
