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(如 rrwrrlc)。
IPVS 与 iptables 模式对比
特性IPVS 模式iptables 模式
负载均衡算法支持多种(rr/wrr/lc 等)仅支持随机均衡
规则存储结构哈希表(O(1) 复杂度)线性链表(O(n) 复杂度)
大规模集群性能更优(适合 10k+ Service)性能下降明显
依赖内核模块ip_vsip_vs_rr 等iptablesnf_conntrack

3. Kubernetes 中 IPVS 的工作流程

  1. Service 创建

    • 当创建 ClusterIP 类型的 Service 时,kube-proxy 会:

      • 在 kube-ipvs0 虚拟接口上绑定 Service 的 ClusterIP。

      • 通过 ipvsadm 添加 IPVS 规则,将 VIP(Service IP)映射到后端 Pod IP。

  2. 流量转发

    • 当访问 ClusterIP:Port 时:

      • 内核根据 IPVS 规则匹配到目标 Service。

      • IPVS 按调度算法选择一个后端 Pod,转发流量。

  3. 示例规则
    执行 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 状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值