Ubuntu 上 Kubernetes 网络配置实操指南
一 前置条件与系统网络准备
- 禁用 Swap(Kubernetes 要求):执行命令:sudo swapoff -a,并在 /etc/fstab 中注释 swap 行,永久生效。
- 加载桥接与开启转发:
- 加载模块:sudo modprobe br_netfilter
- 内核参数:net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1
- 持久化:写入 /etc/sysctl.d/k8s.conf 并执行 sudo sysctl --system
- 容器运行时建议使用 containerd(更契合 K8s CRI):
- 安装:sudo apt install -y containerd
- 生成默认配置:containerd config default | sudo tee /etc/containerd/config.toml
- 启用 SystemdCgroup:将 SystemdCgroup = false 改为 true 并重启:sudo systemctl restart containerd && sudo systemctl enable containerd
- 主机名与解析(示例):
- 设置主机名:hostnamectl set-hostname master(各节点分别设置)
- 写入 /etc/hosts:
- 10.128.0.4 master
- 10.128.0.5 node1
- 10.128.0.6 node2
- 时间同步:建议统一时区为 Asia/Shanghai 并做时间校准,避免证书与调度异常。
二 初始化集群与 Pod 网段规划
- 安装 kubeadm/kubelet/kubectl(Ubuntu 22.04 + K8s 1.28 示例仓库):
- 导入 GPG:curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
- 添加源:echo ‘deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /’ | sudo tee /etc/apt/sources.list.d/kubernetes.list
- 安装组件:sudo apt-get update && sudo apt-get install -y kubelet=1.28.4-1.1 kubeadm=1.28.4-1.1 kubectl=1.28.4-1.1
- 锁定版本:sudo apt-mark hold kubelet kubeadm kubectl
- 初始化控制平面(仅在 master 执行,注意 –pod-network-cidr 与所选插件一致):
- 命令:sudo kubeadm init --apiserver-advertise-address=10.128.0.4 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.28.4
- 配置 kubectl:
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 工作节点加入:在 master 生成命令 kubeadm token create --print-join-command,在 worker 执行输出的 kubeadm join … 命令。
三 安装网络插件
- 选择插件与 Pod CIDR 对齐:常见插件有 Flannel、Calico、Cilium;若使用 Flannel,通常将 Pod CIDR 设为 10.244.0.0/16。
- 安装示例:
- Flannel:
- kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
- 如需自定义后端/网段,可在 kube-flannel.yml 中修改 net-conf.json 的 Network 与 Backend.Type(如 vxlan)
- Calico:
- 方式 A(Operator):kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml 与 kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
- 方式 B(经典清单):kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
- Cilium:
- helm repo add cilium https://helm.cilium.io/
- helm install cilium cilium/cilium
- 安装后等待 kube-system 命名空间中相关 Pod 均为 Running。
四 验证与连通性测试
- 集群与节点状态:
- kubectl cluster-info
- kubectl get nodes -o wide
- 网络插件状态:
- Flannel:kubectl get pods -n kube-system -l app=flannel
- Calico:kubectl get pods -n kube-system | grep calico
- 端到端连通性:
- 启动测试应用:kubectl run nginx --image=nginx --port=80
- 查看 Pod IP:kubectl get pod nginx -o wide
- 进入另一个 Pod 访问:kubectl exec -it – curl http://
- 网络策略(可选,示例限制出口到某网段):
五 常见问题与排查要点
- 节点 NotReady:多因网络插件未就绪或 Pod CIDR 不匹配;核对初始化时的 –pod-network-cidr 与插件配置是否一致,并查看 kube-system 中插件 Pod 日志。
- Pod 间不通:检查 br_netfilter/iptables/ip_forward 是否生效(见第一部分),以及云厂商安全组/本机防火墙是否放行 VxLAN/Geneve 等 overlay 端口。
- 多插件冲突:同一集群不建议并行运行多个 CNI 插件,安装前确保旧插件已彻底清理。
- 镜像拉取慢/失败:可更换为国内镜像源或提前拉取所需镜像,再执行部署。