三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

内网开发环境福音:手把手教你用K3s v1.26.2+k3s1实现离线部署(含Harbor私有仓库配置)

内网开发环境福音:手把手教你用K3s v1.26.2+k3s1实现离线部署(含Harbor私有仓库配置)

企业级内网K3s离线部署全指南:从私有仓库搭建到集群运维

在金融、军工等对网络安全要求极高的行业环境中,开发团队常面临一个核心矛盾:如何在内网隔离环境下构建既轻量又功能完整的Kubernetes平台?传统Kubernetes发行版在资源受限的隔离环境中往往显得笨重,而K3s以其不足50MB的二进制体积和全兼容K8s API的特性,成为内网环境容器编排的首选方案。

1. 离线部署架构设计与核心组件

1.1 为什么内网环境需要特殊部署方案

典型的内网隔离环境通常具有以下特征:

  • 网络隔离:完全阻断互联网连接,无法访问外部镜像仓库
  • 安全审计:所有软件组件需经过安全扫描和版本固化
  • 资源限制:物理服务器通常不具备公有云的弹性扩展能力

在这种环境下,K3s的离线部署需要解决三个核心问题:

  1. 基础组件镜像的内部分发
  2. 部署过程的网络独立性
  3. 后续维护的可持续性

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:latest

3. K3s集群离线部署实战

3.1 准备工作与环境检查

部署前需确认:

  • 所有节点时间同步(chrony或ntpd)
  • 主机名解析正确(/etc/hosts或内部DNS)
  • 防火墙放行6443(API)、8472(Flannel)等端口

资源需求建议:

  • Master节点:至少2核CPU/4GB内存
  • Worker节点:根据工作负载调整

3.2 分步安装流程

  1. 准备离线镜像包:
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/
  1. 安装主控制节点:
chmod +x k3s sudo cp k3s /usr/local/bin/ INSTALL_K3S_SKIP_DOWNLOAD=true \ K3S_TOKEN=SECRET_TOKEN \ ./install.sh
  1. 加入工作节点:
INSTALL_K3S_SKIP_DOWNLOAD=true \ K3S_URL=https://master-node:6443 \ K3S_TOKEN=SECRET_TOKEN \ ./install.sh

3.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.sh

4.2 版本升级策略

离线环境升级需要特别注意:

  1. 下载新版本镜像包和二进制文件
  2. 更新Harbor中的相关镜像
  3. 逐个节点滚动升级

升级检查清单:

  • [ ] 备份集群关键资源(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: 1

5. 安全加固最佳实践

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-user

5.3 安全扫描与合规

推荐工具组合:

  • 镜像扫描:Trivy集成到Harbor流水线
  • 配置检查:kube-bench运行CIS基准测试
  • 运行时防护:Falco部署为DaemonSet

扫描示例:

trivy image --security-checks vuln registry.internal.company/nginx:latest

在内网环境中维护K3s集群时,我们团队发现最有效的管理方式是建立严格的变更控制流程。每次升级前在测试环境验证,关键配置采用GitOps工具(如Argo CD)进行版本控制,这些措施能显著降低生产环境风险。

← 返回列表