news 2026/5/16 16:53:33

保姆级教程:在kubeadm部署的K8s集群里,一步步开启IPVS并验证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在kubeadm部署的K8s集群里,一步步开启IPVS并验证

保姆级教程:在kubeadm部署的K8s集群中开启IPVS模式全流程指南

当你用kubeadm搭建好Kubernetes集群后,网络性能优化往往是第一个需要攻克的难题。IPVS模式作为kube-proxy的底层流量转发机制,相比默认的iptables能显著提升大规模服务下的网络性能。但很多刚接触K8s网络配置的开发者,在开启IPVS时总会遇到各种"坑"——从内核模块缺失到配置不生效,每一步都可能让你卡壳数小时。本文将用最直白的操作步骤,带你避开所有雷区。

1. 环境准备与前置检查

在开始修改集群配置前,我们需要确保节点满足IPVS的基本运行条件。不同于iptables,IPVS依赖Linux内核模块实现四层负载均衡,这意味着你的操作系统必须支持相关功能。

首先通过SSH登录到所有Kubernetes节点(包括master和worker),执行以下命令检查内核模块状态:

lsmod | grep ip_vs

理想情况下,你应该看到类似这样的输出:

ip_vs_sh 16384 0 ip_vs_wrr 16384 0 ip_vs_rr 16384 0 ip_vs 172032 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr

如果没有任何输出,说明内核模块未加载。此时需要手动加载模块:

sudo modprobe -- ip_vs sudo modprobe -- ip_vs_rr sudo modprobe -- ip_vs_wrr sudo modprobe -- ip_vs_sh

为了让这些模块在系统重启后自动加载,创建配置文件:

cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh EOF

另一个常见问题是nf_conntrack模块导致IPVS无法正常工作。检查并确保相关参数设置合理:

sudo sysctl -w net.ipv4.vs.conntrack=1 sudo sysctl -w net.ipv4.vs.expire_nodest_conn=1

提示:在公有云环境(如AWS、阿里云)中,某些内核模块可能被禁用。如果modprobe报错,可能需要更换操作系统镜像或自行编译内核。

2. 安装IPVS管理工具

虽然IPVS本身是内核功能,但我们需要ipvsadm这个用户空间工具来验证配置是否生效。在所有节点上安装:

# Ubuntu/Debian sudo apt-get update && sudo apt-get install -y ipvsadm # CentOS/RHEL sudo yum install -y ipvsadm

安装完成后,运行以下命令检查IPVS版本:

ipvsadm -v

正常输出应类似于:

ipvsadm v1.31 2020/12/03 (compiled with popt and IPVS v1.2.1)

注意:某些旧版Linux发行版可能默认安装的是1.27等老版本,这可能导致部分新特性不可用。建议通过源码编译安装最新版。

3. 修改kube-proxy配置

现在来到最关键的一步——将kube-proxy的工作模式从iptables切换到IPVS。在kubeadm部署的集群中,这通过修改ConfigMap实现。

首先获取当前的kube-proxy配置:

kubectl -n kube-system get cm kube-proxy -o yaml

你会看到类似这样的输出(部分内容已省略):

apiVersion: v1 data: config.conf: |- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "" ...

使用kubectl edit命令修改配置:

kubectl -n kube-system edit cm kube-proxy

找到mode: ""这一行,将其改为:

mode: "ipvs"

同时建议添加以下IPVS专属参数(放在config.confipvs字段下):

ipvs: strictARP: true scheduler: "rr" excludeCIDRs: null minSyncPeriod: 0s syncPeriod: 30s tcpTimeout: 0s tcpFinTimeout: 0s udpTimeout: 0s

保存退出后,kube-proxy并不会自动应用这些变更。我们需要重启所有kube-proxy Pod:

kubectl -n kube-system delete pod -l k8s-app=kube-proxy

等待几分钟让Pod重新创建,然后检查日志确认IPVS模式已启用:

kubectl -n kube-system logs -l k8s-app=kube-proxy | grep "Using ipvs Proxier"

你应该能看到类似输出:

I0721 09:15:32.345678 1 server_others.go:269] "Using ipvs Proxier"

4. 验证IPVS是否生效

配置完成后,我们需要从多个维度验证IPVS确实在工作。

方法一:检查kube-proxy日志

kubectl -n kube-system logs -l k8s-app=kube-proxy | grep -i ipvs

正常应该看到IPVS相关初始化日志,如:

I0721 09:15:32.345678 1 server_others.go:269] "Using ipvs Proxier" I0721 09:15:32.456789 1 proxier.go:420] "IPVS scheduler not specified, use rr by default"

方法二:使用ipvsadm检查规则

sudo ipvsadm -L -n

输出示例:

IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.96.0.1:443 rr -> 192.168.1.100:6443 Masq 1 0 0 TCP 10.96.0.10:53 rr -> 10.244.0.5:53 Masq 1 0 0 -> 10.244.0.6:53 Masq 1 0 0

方法三:创建测试Service验证部署一个临时Nginx服务:

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80

然后检查IPVS规则:

sudo ipvsadm -L -n | grep nginx

应该能看到新创建的Service对应的IPVS规则。

5. 常见问题排查指南

即使按照上述步骤操作,你可能还是会遇到各种问题。以下是几个典型场景的解决方案:

问题1:kube-proxy日志显示仍在使用iptables

I0721 09:15:32.345678 1 server_others.go:269] "Using iptables Proxier"

解决方案

  1. 确认ConfigMap修改已保存
  2. 确认已删除所有kube-proxy Pod
  3. 检查节点是否缺少IPVS内核模块(回到步骤1)

问题2:ipvsadm -L -n显示空列表

IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn

解决方案

  1. 确认kube-proxy确实运行在IPVS模式(检查日志)
  2. 检查是否有活跃的Service:
    kubectl get svc
  3. 等待几分钟让kube-proxy同步规则(默认同步周期30秒)

问题3:NodePort服务无法访问解决方案

  1. 检查net.ipv4.ip_forward是否设置为1:
    sudo sysctl -w net.ipv4.ip_forward=1
  2. 确保防火墙没有阻止NodePort端口(通常范围30000-32767)
  3. 检查IPVS规则中是否有对应的NodePort条目

问题4:IPVS模式下服务访问延迟高解决方案

  1. 尝试调整kube-proxy配置中的syncPeriod(默认30s):
    syncPeriod: 10s
  2. 考虑更换调度算法(如从rr改为wrr):
    scheduler: "wrr"

6. 性能调优与高级配置

当IPVS基本功能验证通过后,我们可以进一步优化性能参数。

内核参数调优编辑/etc/sysctl.conf,添加以下内容:

net.ipv4.vs.conn_reuse_mode = 1 net.ipv4.vs.expire_nodest_conn = 1 net.ipv4.vs.expire_quiescent_template = 1 net.ipv4.vs.conntrack = 1

应用设置:

sudo sysctl -p

kube-proxy高级配置在ConfigMap中添加以下参数可以进一步提升大规模集群下的性能:

conntrack: maxPerCore: 32768 min: 131072 tcpCloseWaitTimeout: 1h0m0s tcpEstablishedTimeout: 24h0m0s

监控IPVS性能安装ipvsadm后,可以通过以下命令实时监控:

watch -n 1 sudo ipvsadm -L -n --stats

输出示例:

IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 10.96.0.1:443 12 1560 1560 182KB 184KB -> 192.168.1.100:6443 12 1560 1560 182KB 184KB

对于生产环境,建议将IPVS指标接入Prometheus监控系统。可以使用ipvs-exporter来暴露这些指标:

kubectl apply -f https://raw.githubusercontent.com/danielqsj/kube-proxy-ipvs-exporter/master/deploy/rbac.yaml kubectl apply -f https://raw.githubusercontent.com/danielqsj/kube-proxy-ipvs-exporter/master/deploy/deployment.yaml
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 16:51:43

结构化内容的算法红利——H1-H3标题层级的SEO优化

你的文章不是写给读者看的,是写给算法"筛选"的。 一、引言:结构化内容 = “给算法看的简历” 想象一下,HR每天要看500份简历。什么样的简历能在3秒内抓住眼球? 不是字最多的,不是经历最丰富的,而是排版最清晰、重点最突出、信息最容易被扫描的那一份。 算法…

作者头像 李华
网站建设 2026/5/16 16:50:52

基于eNSP的园区网络高可用与安全隔离综合实验

1. 实验背景与核心价值 园区网络作为企业数字化转型的基础设施&#xff0c;其稳定性和安全性直接关系到日常运营效率。记得去年参与某金融机构网络改造项目时&#xff0c;他们的核心业务系统因为单点故障导致全网瘫痪4小时&#xff0c;直接损失超过百万。这个案例让我深刻认识到…

作者头像 李华
网站建设 2026/5/16 16:49:31

Linux文件搜索太慢?FSearch让您体验毫秒级文件查找的快感

Linux文件搜索太慢&#xff1f;FSearch让您体验毫秒级文件查找的快感 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 还在为Linux系统中繁琐的文件查找而烦恼吗&#…

作者头像 李华
网站建设 2026/5/16 16:49:25

在自动化工作流中集成Taotoken实现多模型决策调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在自动化工作流中集成Taotoken实现多模型决策调用 构建自动化AI工作流或智能体时&#xff0c;一个常见的挑战是如何为不同的任务匹…

作者头像 李华
网站建设 2026/5/16 16:44:07

AI Native Web 开发实战:从零构建智能应用

AI Native Web 产品实战指南&#xff1a;从概念到落地的完整路线做了大半年 AI 应用开发之后&#xff0c;我发现一个现象&#xff1a;很多人知道 “AI Native” 这个词&#xff0c;但真要动手做一个 AI Native 的 Web 产品&#xff0c;脑子里是一团浆糊的。这篇文章就是想把这块…

作者头像 李华