在 CentOS 上部署 Kubernetes(K8s) 时,网络配置是非常重要且最容易踩坑的一环。我按生产可用、最常见方案给你一个完整说明,从 基础网络要求 → CNI 插件选择 → 实战配置示例。
CentOS 节点必须满足:
| 端口 | 用途 |
|---|---|
| 6443 | kube-apiserver |
| 2379-2380 | etcd |
| 10250 | kubelet |
| 10259 | kube-scheduler |
| 10257 | kube-controller-manager |
| 端口 | 用途 |
|---|---|
| 10250 | kubelet |
| 30000-32767 | NodePort |
systemctl disable firewalld --now
或放行端口(不推荐新手)
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -i '/swap/d' /etc/fstab
cat <<EOF > /etc/modules-load.d/k8s.conf
br_netfilter
EOF
modprobe br_netfilter
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
K8s 网络必须满足:
✅ 任意 Pod 可以互通,不需要 NAT
实现方式:CNI 插件
| CNI | 适用场景 | 推荐指数 |
|---|---|---|
| Calico | 生产 / 企业 / 高性能 | ⭐⭐⭐⭐⭐ |
| Flannel | 简单 / 测试 | ⭐⭐⭐ |
| Cilium | eBPF / 高级网络 | ⭐⭐⭐⭐ |
✅ 生产环境首选:Calico
kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=<master-ip>
⚠ pod-network-cidr 取决于 CNI
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
或使用指定版本:
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
kubectl get pods -n kube-system
kubectl get nodes
✅ 所有节点 Ready
kubectl run test --image=busybox -it --rm -- sh
ping <其他节点Pod IP>
kubeadm init --pod-network-cidr=10.244.0.0/16
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
⚠ 不支持 NetworkPolicy
kubectl describe pod <pod>
常见原因:
systemctl status kubelet
journalctl -u kubelet -f
ip route
iptables -L -n
✅ 使用 Calico BGP 模式
✅ 固定 Pod CIDR
✅ 避免与宿主机网段冲突
✅ CentOS 8/Stream 建议使用 5.x 内核
✅ 不建议用 Docker(用 containerd)
你可以直接告诉我:
1️⃣ CentOS 版本(7 / 8 / Stream)
2️⃣ K8s 版本
3️⃣ 单节点 or 多节点
4️⃣ 是否离线环境
我可以给你 完整从零部署命令版 ✅