在 CentOS 上配置 Kubernetes 网络的实操指南
一 基础网络与内核参数
cat > /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
二 选择并部署 CNI 网络插件
| 插件 | 适用场景 | 安装命令 | 备注 |
|---|---|---|---|
| Flannel | 快速上手、覆盖网络 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml | 默认后端 VXLAN;Pod 网段通常为 10.244.0.0/16 |
| Calico | 网络策略与安全能力强 | kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml | 支持 BGP/Overlay 等模式,适合对策略有要求的场景 |
kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join <control-plane-host>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
三 验证与连通性测试
kubectl get nodes -o wide
kubectl get pods -n kube-system -o wide
kubectl run test-nginx --image=nginx:1.25 --restart=Never
kubectl get pod test-nginx -o wide
# 在集群内另一 Pod 中访问
kubectl run test-curl --image=curlimages/curl:8.5 --restart=Never -it --rm -- \
curl -I http://<test-nginx-pod-ip>
kubectl expose pod test-nginx --port=80 --name=nginx-svc --type=ClusterIP
kubectl get svc nginx-svc
kubectl run test-dns --image=busybox:1.36 --restart=Never -it --rm -- \
nslookup kubernetes.default.svc.cluster.local
四 常见问题与排错要点