在配置Kubernetes网络前,需完成以下基础环境设置,确保集群节点间网络互通:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab # 永久禁用
/etc/sysconfig/network-scripts/ifcfg-ens33),设置静态IP、子网掩码、网关和DNS:DEVICE=ens33
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100 # 替换为节点实际IP
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=114.114.114.114
重启网络服务使配置生效:systemctl restart network
hostnamectl set-hostname k8s-master(Master节点)/k8s-node1(Worker节点)/etc/hosts,添加节点IP与主机名映射:192.168.1.100 k8s-master
192.168.1.101 k8s-node1
192.168.1.102 k8s-node2
yum install -y kubeadm kubelet kubectl --disable-gpg-check
systemctl enable kubelet && systemctl start kubelet
kubeadm init命令初始化集群,必须指定Pod网络CIDR(与后续网络插件网段一致,如10.244.0.0/16):kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.1.100
初始化完成后,按提示配置kubectl:mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kubernetes需通过网络插件实现Pod间通信,常见插件及安装方法如下:
Calico是基于BGP的三层网络插件,适合中大规模生产环境,支持精细的网络策略控制。
curl -O https://docs.projectcalico.org/v3.26/manifests/calico.yaml
kubectl apply -f calico.yaml
kubectl get pods -n calico-system
正常输出应显示所有Pod为Running状态。Flannel是Overlay网络插件,配置简单,资源消耗低,适合中小规模集群。
curl -O https://raw.githubusercontent.com/flannel-io/flannel/v0.22.0/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
kube-flannel.yml,找到net-conf.json部分,将Backend.Type改为host-gw:"net-conf.json": {
"Network": "10.244.0.0/16",
"Backend": {"Type": "host-gw"}
}
Cilium基于eBPF技术,性能远超传统插件,适合高频交易、大流量电商等场景,需内核≥5.4。
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm repo add cilium https://helm.cilium.io
helm repo update
helm install cilium cilium/cilium --namespace kube-system \
--set k8sServiceHost=192.168.1.100 \ # 替换为API Server IP
--set k8sServicePort=6443
kubectl get pods -n kube-system | grep -E 'calico|flannel|cilium'
kubectl run nginx --image=nginx --port=80
kubectl run test-pod --image=busybox --rm -it --restart=Never -- sh
test-pod中访问nginx Pod的IP(通过kubectl get pod nginx -o jsonpath='{.status.podIP}'获取):wget -qO- http://<nginx-pod-ip>
若能访问,则说明网络配置成功。kubeadm init中的--pod-network-cidr必须与网络插件的Pod网段一致(如Calico的CALICO_IPV4POOL_CIDR)。kubeadm join命令加入,确保节点状态为Ready:kubectl get nodes