ipvsadm,是一个什么工具?
1. ipvsadm 是什么?
 
ipvsadm(IP Virtual Server Administration)是 Linux 内核中 IPVS(IP Virtual Server) 模块的管理工具,用于配置和监控内核级的负载均衡规则。它是 Kubernetes 中 kube-proxy 在 IPVS 模式 下的底层实现工具。
主要功能
-  管理 IPVS 的虚拟服务(Virtual Service)和真实服务器(Real Server,即后端 Pod)。 
-  支持多种负载均衡算法(如轮询 rr、加权轮询wrr、最少连接lc等)。
-  查看当前负载均衡规则和连接状态。 
常用命令
ipvsadm -Ln # 列出所有 IPVS 规则(数字格式显示) ipvsadm -Ln --stats # 显示统计信息(如连接数、流量) ipvsadm -Ln --rate # 显示速率(如每秒请求数) ipvsadm -E -t <VIP:PORT> -s <ALGORITHM> # 修改调度算法
2. IPVS 模式详解
IPVS(IP Virtual Server)是 Linux 内核内置的 四层(L4)负载均衡器,工作在传输层(TCP/UDP),性能远高于传统的 iptables 模式。
为什么 Kubernetes 使用 IPVS 模式?
-  高性能:基于哈希表存储规则,查询效率为 O(1),适用于大规模集群。 
-  支持多种调度算法:如轮询( rr)、加权轮询(wrr)、最少连接(lc)等。
-  更好的可扩展性:在 Service 数量超过 10,000 时,性能仍稳定。 
IPVS 模式的核心组件
| 组件 | 说明 | 
|---|---|
| Virtual Service | 虚拟服务(VIP),对应 Kubernetes Service 的 ClusterIP:Port。 | 
| Real Server | 真实后端(Pod),对应 Endpoints 中的 PodIP:Port。 | 
| 调度算法 | 决定流量如何分发给后端 Pod(如 rr、wrr、lc)。 | 
IPVS 与 iptables 模式对比
| 特性 | IPVS 模式 | iptables 模式 | 
|---|---|---|
| 负载均衡算法 | 支持多种(rr/wrr/lc 等) | 仅支持随机均衡 | 
| 规则存储结构 | 哈希表(O(1) 复杂度) | 线性链表(O(n) 复杂度) | 
| 大规模集群性能 | 更优(适合 10k+ Service) | 性能下降明显 | 
| 依赖内核模块 | ip_vs、ip_vs_rr等 | iptables、nf_conntrack | 
3. Kubernetes 中 IPVS 的工作流程
-  Service 创建 -  当创建 ClusterIP类型的 Service 时,kube-proxy会:-  在 kube-ipvs0虚拟接口上绑定 Service 的 ClusterIP。
-  通过 ipvsadm添加 IPVS 规则,将 VIP(Service IP)映射到后端 Pod IP。
 
-  
 
-  
-  流量转发 -  当访问 ClusterIP:Port时:-  内核根据 IPVS 规则匹配到目标 Service。 
-  IPVS 按调度算法选择一个后端 Pod,转发流量。 
 
-  
 
-  
-  示例规则 
 执行ipvsadm -Ln可能看到如下输出:TCP 10.233.25.255:80 rr-> 10.233.1.2:80 Masq 1 0 0-> 10.233.1.3:80 Masq 1 0 0 -  rr:轮询算法。
-  Masq:使用 SNAT(源地址转换)。
-  后端是两个 Pod( 10.233.1.2:80和10.233.1.3:80)。
-  检查 Service 和 Endpoints kubectl get svc -A | grep 10.233.25.255 # 找到关联的 Service kubectl describe endpoints <service-name> # 检查是否有健康的 Pod 
-  查看 IPVS 规则 ipvsadm -Ln | grep 10.233.25.255 -  如果输出中无目标 Pod( ->开头的行),则说明 Endpoints 缺失。
 
-  
 
-  
4. 常见问题
Q1: 为什么 kube-ipvs0 显示 state DOWN?
 
-  这是正常的,因为 kube-ipvs0是虚拟接口,仅用于绑定 IP,不参与实际网络通信。IPVS 规则由内核直接处理。
Q2: 如何检查 IPVS 是否正常工作?
# 查看规则 ipvsadm -Ln # 检查是否有流量转发 ipvsadm -Ln --stats
Q3: 如何切换 kube-proxy 到 IPVS 模式?
在 kube-proxy 启动参数中添加:
--proxy-mode=ipvs --ipvs-scheduler=rr # 指定调度算法
总结
-  ipvsadm是管理 IPVS 负载均衡规则的工具,Kubernetes 通过它实现高性能 Service 转发。
-  IPVS 模式 适用于大规模集群,支持多种调度算法,性能优于 iptables。 
-  遇到 no destination available时,优先检查 Endpoints 和 Pod 状态。
