Kubernetes网络配置Ubuntu指南
导读:Ubuntu 上搭建与配置 Kubernetes 网络的实用指南 一 环境准备与内核网络 基础设置:关闭 Swap、统一 hostname 与 /etc/hosts、可选安装 chrony 做时间同步(生产环境强烈建议)。 内核模块与转发...
Ubuntu 上搭建与配置 Kubernetes 网络的实用指南
一 环境准备与内核网络
- 基础设置:关闭 Swap、统一 hostname 与 /etc/hosts、可选安装 chrony 做时间同步(生产环境强烈建议)。
- 内核模块与转发:加载 overlay、br_netfilter 并开启桥接与转发,使 Pod 网络与宿主机网络栈正确联动。
- 容器运行时:以 Docker 为例,配置 systemd cgroup 驱动 与 overlay2 存储驱动,保证与 kubelet 的 cgroup 一致性与稳定性。
- 组件安装:在所有节点安装并固定版本 kubeadm/kubelet/kubectl,避免滚动升级导致的不兼容。
- 控制平面初始化:使用 kubeadm init 启动集群,注意与所选网络插件的 Pod CIDR 保持一致(例如 Flannel 常用 10.244.0.0/16)。
示例命令(在所有节点执行基础网络与内核设置):
# 关闭 Swap
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 主机名与 hosts(示例)
echo "192.168.65.128 master" | sudo tee -a /etc/hosts
echo "192.168.65.129 node1" | sudo tee -a /etc/hosts
echo "192.168.65.130 node2" | sudo tee -a /etc/hosts
# 内核模块与 sysctl
cat <
<
EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <
<
EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# Docker 与 cgroup 驱动
sudo apt-get update &
&
sudo apt-get install -y docker.io
sudo mkdir -p /etc/docker
cat <
<
EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m" }
,
"storage-driver": "overlay2"
}
EOF
sudo systemctl enable --now docker
# 安装并固定 kubeadm/kubelet/kubectl(示例版本)
sudo apt-get update
sudo apt-get install -y kubelet=1.28.2-00 kubeadm=1.28.2-00 kubectl=1.28.2-00
sudo apt-mark hold kubelet kubeadm kubectl
说明:以上为 Ubuntu 20.04/22.04 常见做法,生产环境请结合内核安全策略与合规要求调整防火墙与日志策略。
二 选择并部署网络插件
- 常用方案与适用场景:
- Flannel:上手简单、覆盖常见场景,默认 VXLAN 后端,适合快速交付与测试。
- Calico:支持 BGP/IPIP、网络策略丰富,适合对网络策略与规模有要求的环境。
- Cilium:基于 eBPF,高性能与服务网格集成,适合云原生与高并发场景。
- 部署要点:
- 仅部署一个集群网络插件,避免冲突。
- 初始化控制平面时的 –pod-network-cidr 需与插件配置一致(如 Flannel 使用 10.244.0.0/16)。
- 安装完成后等待 kube-system 中插件 Pod 全部 Running,再进行业务部署。
示例命令(任选其一)
- Flannel(推荐新手)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Calico(策略与安全能力强)
kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
- Cilium(eBPF 与可观测性强)
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --namespace kube-system
提示:若使用 Flannel,其默认后端为 VXLAN;如需自定义 Pod CIDR,请修改清单中的 Network 字段后再部署。
三 验证与连通性测试
- 集群就绪:确认节点 Ready、插件 Running。
- 基础连通:创建测试 Pod,通过 Service 暴露端口,跨节点与跨命名空间访问验证。
- 网络策略:按需启用 NetworkPolicy,验证隔离与放行规则生效。
示例命令
# 等待节点就绪
kubectl get nodes
# 等待网络插件就绪(示例标签)
kubectl get pods -n kube-system -l app=flannel
# 部署测试应用
kubectl run nginx --image=nginx:1.25 --port=80 --restart=Never
kubectl expose pod nginx --port=80 --type=NodePort
# 验证访问
kubectl get pod nginx -o wide
kubectl get svc nginx
curl -I http://<
任一节点IP>
:<
NodePort>
说明:若测试失败,优先检查节点 Ready 状态、插件 Pod 状态与 Pod CIDR 是否与插件配置一致。
四 常见问题与排查清单
- 节点 NotReady:检查 kubelet 状态、容器运行时、镜像拉取、内核参数与 cgroup 驱动 一致性。
- Pod 之间不通:确认只启用一个网络插件、Pod CIDR 配置一致、节点间 UDP/TCP 8472(VXLAN) 或 BGP 端口放通。
- Service 访问异常:核对 Service 类型、Endpoints、iptables/ipvs 规则与云厂商 安全组/NACL。
- 多插件冲突:卸载已安装插件后重启 kubelet 再安装目标插件,避免残留路由/网卡。
- 生产建议:开启 日志轮转 与 监控告警,定期审计 NetworkPolicy,在变更窗口内实施网络插件升级与回滚预案。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes网络配置Ubuntu指南
本文地址: https://pptw.com/jishu/769007.html
