在Rocky Linux 9上,用iKuai做软路由,手把手搞定Kubernetes v1.29离线部署(含Calico网络避坑)
在Rocky Linux 9上构建企业级Kubernetes v1.29离线环境iKuai软路由与Calico网络深度实践当企业需要在内网环境部署Kubernetes集群时网络架构设计往往成为最棘手的挑战之一。不同于公有云环境的一键部署本地化部署需要考虑物理网络隔离、出网控制、安全策略等多重因素。本文将分享如何在Rocky Linux 9系统中通过iKuai软路由构建双网卡隔离环境并完成Kubernetes v1.29集群的离线部署重点解决Calico网络插件在复杂网络环境下的适配问题。1. 环境规划与网络架构设计在企业级部署中网络隔离是保障安全的基础要求。我们采用双网卡方案eth0连接iKuai软路由提供出网能力eth1桥接内网实现节点间通信。这种设计既满足了集群访问外部镜像仓库的需求又确保了内部业务网络的独立性。关键网络参数配置# eth0 (iKuai路由出网) address1192.168.1.6/24 methodmanual never-defaulttrue # eth1 (内网通信) address192.168.66.11/24,192.168.66.200 dns114.114.114.114硬件配置建议控制节点4核CPU/8GB内存/100GB存储工作节点4核CPU/16GB内存/200GB存储网络带宽千兆以太网卡×22. 系统基础环境准备Rocky Linux 9作为RHEL的兼容发行版提供了企业级稳定性。在开始Kubernetes部署前需要完成以下基础配置2.1 系统参数调优# 关闭SELinux sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config grubby --update-kernel ALL --args selinux0 # 设置上海时区 timedatectl set-timezone Asia/Shanghai # 配置阿里云镜像源 sed -e s|^mirrorlist|#mirrorlist|g \ -e s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g \ -i.bak \ /etc/yum.repos.d/Rocky-*.repo2.2 网络与存储优化# 加载内核模块 cat EOF | sudo tee /etc/modules-load.d/bridge.conf /dev/null br_netfilter EOF modprobe br_netfilter # 内核参数配置 cat EOF | sudo tee /etc/sysctl.d/kubernetes.conf /dev/null net.bridge.bridge-nf-call-iptables1 net.bridge.bridge-nf-call-ip6tables1 net.ipv4.ip_forward1 EOF sysctl --system3. 容器运行时与Kubernetes组件安装3.1 Docker与CRI-Dockerd部署由于Kubernetes v1.29已不再原生支持Docker我们需要通过CRI-Dockerd桥接# 安装Docker yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io # 配置Docker cat /etc/docker/daemon.json EOF { data-root: /data/docker, exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m, max-file: 100 } } EOF # 安装CRI-Dockerd wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.21/cri-dockerd-0.3.21.amd64.tgz tar -zxvf cri-dockerd-0.3.21.amd64.tgz cp cri-dockerd/cri-dockerd /usr/bin/ chmod x /usr/bin/cri-dockerd3.2 Kubernetes组件离线安装将离线包解压后直接安装yum install conntrack-tools cri-tools kubeadm kubectl kubelet kubernetes-cni systemctl enable kubelet4. 集群初始化与网络配置4.1 控制平面初始化kubeadm init \ --apiserver-advertise-address192.168.66.11 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version 1.29.2 \ --service-cidr10.10.0.0/12 \ --pod-network-cidr10.244.0.0/16 \ --ignore-preflight-errorsall \ --cri-socket unix:///var/run/cri-dockerd.sock4.2 Calico网络插件定制化部署在复杂网络环境中Calico需要特殊配置才能正确识别节点IP# calico-typha.yaml关键修改 env: - name: IP_AUTODETECTION_METHOD value: interfaceeth1 # 指定内网网卡 - name: CALICO_IPV4POOL_IPIP value: Off # 关闭IPIP模式 - name: CALICO_IPV4POOL_CIDR value: 10.244.0.0/16 # 匹配kubeadm的pod-cidr应用配置并验证kubectl apply -f calico-typha.yaml kubectl get pods -n kube-system -w5. 节点加入与集群验证工作节点加入命令示例kubeadm join 192.168.66.11:6443 --token token \ --discovery-token-ca-cert-hash sha256:hash \ --cri-socket unix:///var/run/cri-dockerd.sock集群健康检查kubectl get nodes -o wide kubectl get pods --all-namespaces kubectl cluster-info6. 常见问题排查指南当节点处于NotReady状态时按以下顺序检查确认cri-docker服务正常运行systemctl is-active cri-docker检查kubelet日志journalctl -u kubelet -f验证Calico Pod状态kubectl logs -n kube-system calico-pod-name排查网络连通性ping master-node-ip对于镜像拉取失败问题可预先手动加载docker load -i calico-cni-v3.26.3.tar docker load -i calico-node-v3.26.3.tar在实施过程中发现当使用iKuai软路由时需要特别注意确保内网网卡eth1的MTU值与Calico配置保持一致否则会导致分片丢包。通过调整/etc/NetworkManager/system-connections/ens192.nmconnection中的MTU参数可解决此问题。