ubuntu k8s网络配置怎样实现
导读:Ubuntu 上 Kubernetes 网络配置实操指南 一 前置准备与规划 节点网络与内核参数 关闭 swap:sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常。 开启桥接流...
Ubuntu 上 Kubernetes 网络配置实操指南
一 前置准备与规划
- 节点网络与内核参数
- 关闭 swap:
sudo swapoff -a并注释 /etc/fstab 中的 swap 行,避免 kubelet 异常。 - 开启桥接流量转发(/etc/sysctl.d/k8s.conf):
net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1- 执行
sudo sysctl --system生效。
- 关闭 swap:
- 容器运行时与 kubeadm
- 安装并启用 containerd(或 Docker),配置 cgroups 驱动一致(常见为 systemd)。
- 安装 kubeadm/kubelet/kubectl,并
sudo systemctl enable --now kubelet。
- 规划 Pod 网段与 Service 网段
- 常见做法:Service 使用 10.96.0.0/12(默认),Pod 网段按插件选择,例如 10.244.0.0/16(Flannel 常用) 或 192.168.0.0/16(Calico 常用)。
- 如使用 kubeadm init,通过
--pod-network-cidr指定 Pod 网段,例如:sudo kubeadm init --pod-network-cidr=10.244.0.0/16。
- 主机名与解析
- 建议设置 /etc/hostname 与 /etc/hosts,保证节点间可解析,便于排障与调度稳定。
二 使用 kubeadm 初始化并安装 CNI 插件
- 初始化控制平面(示例):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16- 完成后按提示拷贝 kubeconfig:
mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config & & sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装 CNI 网络插件(三选一,保持 Pod CIDR 与插件配置一致)
- Calico(推荐,策略能力强)
kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yamlkubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
- Flannel(上手简单,覆盖常见场景)
- 下载并修改
kube-flannel.yml,确保net-conf.json.Network与--pod-network-cidr一致(如 10.244.0.0/16) kubectl apply -f kube-flannel.yml
- 下载并修改
- Cilium(eBPF 驱动,性能与可观测性好)
helm repo add cilium https://helm.cilium.io/helm install cilium cilium/cilium --namespace kube-system
- Calico(推荐,策略能力强)
- 验证
kubectl get nodes看到所有节点 Readykubectl get pods -n kube-system插件相关 Pod Running- 运行测试:
kubectl run nginx --image=nginx --port=80并检查kubectl get pods与日志。
三 节点网络与网桥的声明式管理(可选)
- 场景:需要以 Kubernetes CRD 的方式统一管理节点网卡、Bond、VLAN、Bridge 等(例如在混合云/裸金属环境)。
- 方案:使用 kubernetes-nmstate(基于 NetworkManager 与 nmstate 库)
- 前置:Ubuntu 默认 netplan,需切换 renderer 为 NetworkManager
- 编辑 /etc/netplan/00-installer-config.yaml:
renderer: NetworkManager sudo netplan generate & & sudo netplan apply- 验证:
/usr/sbin/NetworkManager --version(需 > = 1.20)
- 编辑 /etc/netplan/00-installer-config.yaml:
- 部署 kubernetes-nmstate(示例,按版本替换 URL)
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.yaml- 创建 CR 触发:
kubectl create -f - < < EOF ... EOF(见下文示例)
- 验证:
kubectl -n nmstate get pods看到 handler 正常运行。
- 前置:Ubuntu 默认 netplan,需切换 renderer 为 NetworkManager
示例 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 在节点上原子化应用。
四 验证与常见问题
- 连通性验证
- 跨节点 Pod 互通:
kubectl run test-nginx --image=nginx --restart=Never -it --rm -- curl http://< 另一节点PodIP> - 服务访问:
kubectl expose deployment nginx --port=80 --type=NodePort或 LoadBalancer,用节点 IP 与端口访问验证。
- 跨节点 Pod 互通:
- 常见问题速查
- 节点 NotReady:检查 CNI 插件 Pod 是否 Running、Pod CIDR 是否与插件配置一致、节点网络(VxLAN/路由)是否可达。
- Pod 之间不通:确认 NetworkPolicy 未误拦截;检查安全组/云防火墙是否放通 VxLAN 8472/UDP 或对应后端端口。
- Service 不通:确认 kube-proxy 正常运行(iptables/ipvs),以及云厂商 LoadBalancer 外部 IP 分配状态。
- 多插件冲突:同一集群只保留 一个 CNI 插件,避免 IP 分配与路由冲突。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu k8s网络配置怎样实现
本文地址: https://pptw.com/jishu/780127.html
