内网开发环境福音:手把手教你用K3s v1.26.2+k3s1实现离线部署(含Harbor私有仓库配置)
企业级内网K3s离线部署全指南:从私有仓库搭建到集群运维
在金融、军工等对网络安全要求极高的行业环境中,开发团队常面临一个核心矛盾:如何在内网隔离环境下构建既轻量又功能完整的Kubernetes平台?传统Kubernetes发行版在资源受限的隔离环境中往往显得笨重,而K3s以其不足50MB的二进制体积和全兼容K8s API的特性,成为内网环境容器编排的首选方案。
1. 离线部署架构设计与核心组件
1.1 为什么内网环境需要特殊部署方案
典型的内网隔离环境通常具有以下特征:
- 网络隔离:完全阻断互联网连接,无法访问外部镜像仓库
- 安全审计:所有软件组件需经过安全扫描和版本固化
- 资源限制:物理服务器通常不具备公有云的弹性扩展能力
在这种环境下,K3s的离线部署需要解决三个核心问题:
- 基础组件镜像的内部分发
- 部署过程的网络独立性
- 后续维护的可持续性
1.2 两种离线部署模式对比
| 方案类型 | 适用场景 | 优势 | 局限性 |
|---|---|---|---|
| 手动加载镜像包 | 单节点测试、快速验证 | 部署简单,无需额外服务 | 难以扩展,镜像更新复杂 |
| Harbor私有仓库 | 团队协作、生产环境 | 支持多项目隔离、镜像复制 | 需要额外存储资源 |
对于长期运行的生产环境,我们推荐采用Harbor作为统一的镜像管理平台。最新统计显示,超过68%的企业用户选择Harbor作为内网容器仓库,其优势主要体现在:
- 细粒度的访问控制(RBAC)
- 漏洞扫描集成
- 镜像签名验证
2. Harbor私有仓库深度配置
2.1 定制化安装与优化配置
Harbor的离线安装包可从官网获取,建议选择v2.7+版本以获得更好的性能:
# 下载离线安装包 wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz # 解压并准备配置文件 tar xzvf harbor-offline-installer-v2.7.0.tgz cd harbor cp harbor.yml.tmpl harbor.yml关键配置参数调整建议:
# harbor.yml核心配置段 hostname: registry.internal.company http: port: 8080 harbor_admin_password: StrongPassword@123 database: password: DB@Password456 storage: filesystem: rootdirectory: /data/harbor注意:生产环境务必启用TLS加密,可通过内部CA颁发证书实现
2.2 与K3s的深度集成
在K3s节点上创建registry配置文件:
mkdir -p /etc/rancher/k3s/ cat > /etc/rancher/k3s/registries.yaml <<EOF mirrors: "registry.internal.company": endpoint: - "https://registry.internal.company:8080" configs: "registry.internal.company": auth: username: admin password: StrongPassword@123 EOF验证配置生效:
crictl pull registry.internal.company/library/nginx:latest3. K3s集群离线部署实战
3.1 准备工作与环境检查
部署前需确认:
- 所有节点时间同步(chrony或ntpd)
- 主机名解析正确(/etc/hosts或内部DNS)
- 防火墙放行6443(API)、8472(Flannel)等端口
资源需求建议:
- Master节点:至少2核CPU/4GB内存
- Worker节点:根据工作负载调整
3.2 分步安装流程
- 准备离线镜像包:
wget https://github.com/k3s-io/k3s/releases/download/v1.26.2%2Bk3s1/k3s-airgap-images-amd64.tar mkdir -p /var/lib/rancher/k3s/agent/images/ cp k3s-airgap-images-amd64.tar /var/lib/rancher/k3s/agent/images/- 安装主控制节点:
chmod +x k3s sudo cp k3s /usr/local/bin/ INSTALL_K3S_SKIP_DOWNLOAD=true \ K3S_TOKEN=SECRET_TOKEN \ ./install.sh- 加入工作节点:
INSTALL_K3S_SKIP_DOWNLOAD=true \ K3S_URL=https://master-node:6443 \ K3S_TOKEN=SECRET_TOKEN \ ./install.sh3.3 部署验证与问题排查
检查集群状态:
kubectl get nodes -o wide kubectl get pods -A常见问题处理:
- 镜像拉取失败:检查registries.yaml格式和Harbor证书
- 节点无法加入:验证token和网络连通性
- Pod网络异常:确认Flannel等CNI插件镜像已正确加载
4. 生产环境运维进阶技巧
4.1 高可用架构实现
内网环境的高可用方案建议:
graph TD A[外部负载均衡] --> B[Master 1] A --> C[Master 2] A --> D[Master 3] B --> E[外部数据库] C --> E D --> E配置示例:
INSTALL_K3S_SKIP_DOWNLOAD=true \ K3S_TOKEN=SECRET_TOKEN \ INSTALL_K3S_EXEC='server --datastore-endpoint="mysql://user:pass@tcp(db-server:3306)/k3s"' \ ./install.sh4.2 版本升级策略
离线环境升级需要特别注意:
- 下载新版本镜像包和二进制文件
- 更新Harbor中的相关镜像
- 逐个节点滚动升级
升级检查清单:
- [ ] 备份集群关键资源(kubectl get all -A -o yaml)
- [ ] 验证新版本镜像的兼容性
- [ ] 准备回滚方案
4.3 监控与日志方案
推荐的内网监控组合:
- 指标收集:Prometheus Operator + kube-state-metrics
- 日志系统:Loki + Promtail
- 可视化:Grafana(预配置K3s监控面板)
配置示例:
# values-prometheus.yaml prometheus: prometheusSpec: retention: 30d resources: requests: memory: 4Gi cpu: 15. 安全加固最佳实践
5.1 网络隔离策略
建议的网络分区方案:
- 控制平面:6443端口仅对管理网络开放
- 数据平面:工作节点间开放8472/51820端口
- 存储网络:为ETCD/数据库配置独立网卡
5.2 认证与授权控制
关键安全配置:
# 启用PSP(Pod安全策略) kubectl apply -f https://raw.githubusercontent.com/rancher/k3s/master/manifests/psp.yaml # 创建受限用户 kubectl create serviceaccount dev-user kubectl create rolebinding dev-user \ --clusterrole=view \ --serviceaccount=default:dev-user5.3 安全扫描与合规
推荐工具组合:
- 镜像扫描:Trivy集成到Harbor流水线
- 配置检查:kube-bench运行CIS基准测试
- 运行时防护:Falco部署为DaemonSet
扫描示例:
trivy image --security-checks vuln registry.internal.company/nginx:latest在内网环境中维护K3s集群时,我们团队发现最有效的管理方式是建立严格的变更控制流程。每次升级前在测试环境验证,关键配置采用GitOps工具(如Argo CD)进行版本控制,这些措施能显著降低生产环境风险。
