Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

IPVS 基础教程

1. IPVS 是什么?

IPVS(IP Virtual Server)是 Linux 内核中的四层负载均衡实现,是 LVS(Linux Virtual Server)项目的核心组件。

它工作在 内核态,具备高性能、低延迟的特点。

  • 用途:四层(TCP/UDP)负载均衡
  • 核心优势:性能比 nginx/haproxy 等用户态 LB 高出 5~10 倍

2. IPVS 与 iptables 的区别(重点)

特性 iptables (kube-proxy) IPVS (kube-proxy)
工作模式 用户态 + 内核态 内核态、专为 LB 优化
性能(QPS) 较低 极高(百万级)
并发连接 超大、可百万级
负载均衡算法
K8s 支持 默认 需要安装模块或切换模式

Kubernetes 在大规模集群中强烈推荐选择 IPVS 模式的 kube-proxy

3. IPVS 的 3 种工作模式(LVS 经典模式)

3.1 NAT(Network Address Translation)

负载均衡器修改请求和响应的源/目标地址。

  • 优点:简单
  • 缺点:LB 压力大(进、出都要 NAT)
  • 适用:小规模
Client -> [VIP -> LB -> DIP] -> RealServer
RealServer -> LB -> Client

3.2 DR(Direct Routing)— 最常用、最高性能

请求经过 LB,响应 直接从 RealServer 回客户端。

  • 优点:性能最高
  • 缺点:RealServer 必须与 LB 在同一二层网络
  • 场景:高性能集群
Client -> LB -> RealServer  
RealServer -> Client(绕过 LB)

3.3 TUN(IP Tunneling)

LB 用隧道封装(如 IPIP)转发请求。

  • 优点:跨三层高性能
  • 缺点:RealServer 要支持 IPIP
  • 适用:跨机房、跨城市

4 IPVS 支持的负载均衡算法(非常强大)

算法 说明
rr 轮询
wrr 权重轮询
lc 最少连接
wlc 加权最少连接
lblc 基于本地性最少连接
lblcr 基于本地性副本
sed 最短期望延迟
nq 不排队

Kubernetes 里 kube-proxy 默认使用 rr。

5. Linux 安装 IPVS 模块

一键加载(常用)

sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe nf_conntrack

确保模块生效:

lsmod | grep ip_vs

6. kube-proxy 切换到 IPVS 模式(K8s 必用)

K8s 默认使用 iptables 模式,可以改为 IPVS:

查看 kube-proxy 配置文件(通常在)

/var/lib/kube-proxy/config.conf

修改:

mode: "ipvs"

重启 kube-proxy:

systemctl restart kube-proxy

验证:

kubectl get pods -n kube-system -o wide | grep kube-proxy

并确认 ipvsadm 生效:

ipvsadm -Ln

7. IPVS 常用命令(ipvsadm)

查看 IPVS 配置

ipvsadm -Ln

添加 Virtual Server(VIP)

ipvsadm -A -t 10.0.0.1:80 -s rr

添加 Real Server

ipvsadm -a -t 10.0.0.1:80 -r 192.168.1.10:80 -m

“-m” 表示 NAT,DR 用 “-g”,TUN 用 “-i”。

删除虚拟服务

ipvsadm -D -t 10.0.0.1:80

清除全部配置

ipvsadm -C

8. IPVS 在 Kubernetes 里的表现

IPVS 模式的优势非常明显:

  • 更低延迟
  • 更高吞吐
  • 服务数量越多,优势越明显(iptables 会导致规则爆炸)
  • 支持更多 LB 算法

强烈建议:

大规模集群必须用 IPVS 模式的 kube-proxy。

9. IPVS vs Keepalived

要做高可用时,你会看到 Keepalived(VRRP)配合 IPVS。

用途:

  • Keepalived 提供 VIP 漂移(双机热备)
  • IPVS 提供负载均衡调度

经常组合成:

  • LVS-DR
  • LVS-TUN
  • 高可用负载均衡器(MASTER & BACKUP)

10. IPVS 在生产中的最佳实践

LVS-DR 模式 + Keepalived

最高性能方案,适用于 web 服务、API 服务。

在 Kubernetes 中使用 IPVS 模式

适合 Node 数或 Service 数较多的集群。

关闭 conntrack(可选)

大规模环境能提升性能。