Ubuntu 上 Kubernetes 网络配置实操指南
一 前置准备与规划
sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常。net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1sudo sysctl --system 生效。sudo systemctl enable --now kubelet。--pod-network-cidr 指定 Pod 网段,例如:sudo kubeadm init --pod-network-cidr=10.244.0.0/16。二 使用 kubeadm 初始化并安装 CNI 插件
sudo kubeadm init --pod-network-cidr=10.244.0.0/16mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yamlkubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yamlkube-flannel.yml,确保 net-conf.json.Network 与 --pod-network-cidr 一致(如 10.244.0.0/16)kubectl apply -f kube-flannel.ymlhelm repo add cilium https://helm.cilium.io/helm install cilium cilium/cilium --namespace kube-systemkubectl get nodes 看到所有节点 Readykubectl get pods -n kube-system 插件相关 Pod Runningkubectl run nginx --image=nginx --port=80 并检查 kubectl get pods 与日志。三 节点网络与网桥的声明式管理(可选)
renderer: NetworkManagersudo netplan generate && sudo netplan apply/usr/sbin/NetworkManager --version(需 >= 1.20)kubectl apply -f https://github.com/nmstate/kubernetes-nmstate/releases/download/v0.82.0/namespace.yamlkubectl apply -f https://github.com/nmstate/kubernetes-nmstate/releases/download/v0.82.0/nmstate.io_nmstates.yamlkubectl apply -f https://github.com/nmstate/kubernetes-nmstate/releases/download/v0.82.0/operator.yamlkubectl create -f - <<EOF ... EOF(见下文示例)kubectl -n nmstate get pods 看到 handler 正常运行。示例 NMState CR(将节点 eth1 加入 bond0,并创建 bridge0 作为 Linux 网桥)
apiVersion: nmstate.io/v1
kind: NMState
metadata:
name: nmstate
spec:
nodeSelector:
kubernetes.io/hostname: your-node-name
desiredState:
interfaces:
- name: bond0
type: bond
state: up
link-aggregation:
mode: 802.3ad
options:
miimon: "100"
slaves:
- eth1
- name: bridge0
type: bridge
state: up
bridge:
ports:
- bond0
dns-resolver:
config:
search: []
servers:
- 223.5.5.5
- 8.8.8.8
routes:
config:
- destination: default
next-hop-address: 192.168.1.1
table-id: 254
提示:生产使用前先在测试节点验证,避免锁死管理口;变更会由 nmstate-handler 在节点上原子化应用。
四 验证与常见问题
kubectl run test-nginx --image=nginx --restart=Never -it --rm -- curl http://<另一节点PodIP>kubectl expose deployment nginx --port=80 --type=NodePort 或 LoadBalancer,用节点 IP 与端口访问验证。