找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4115

积分

1

好友

563

主题
发表于 12 小时前 | 查看: 3| 回复: 0

IPVS(IP Virtual Server,IP虚拟服务器)是 Linux 内核中的一个负载均衡模块,由章文嵩博士主导开发。它的核心功能是实现基于 IP 地址的负载均衡,将客户端请求分发到后端多台真实服务器(Real Server),从而提升服务的可用性、扩展性和并发处理能力。

在 Kubernetes(K8s)集群中,IPVS 是 kube-proxy 的核心负载均衡模式之一(另外两种是 userspace、iptables),也是企业级 K8s 集群的首选负载均衡方案,尤其适合大规模集群和高并发场景。下面,我们从核心概念、工作原理、核心特性以及它在 K8s 中的应用等方面,来全面剖析 IPVS。

一、IPVS核心基础(必懂概念)

要理解 IPVS,需要先明确它的核心组成和关键术语,避免混淆负载均衡的核心逻辑。

(一)核心组成

  • 负载均衡器(Load Balancer):运行 IPVS 模块的服务器,也称为“Director Server”(调度器),负责接收客户端的所有请求,并根据预设的负载均衡算法,将请求分发到后端 Real Server。
  • 真实服务器(Real Server, RS):后端提供实际业务服务的服务器或容器,接收来自调度器的请求并处理,最终将响应结果返回给客户端(可直接返回,也可通过调度器转发)。
  • 虚拟服务(Virtual Service, VS):调度器上配置的虚拟 IP(VIP)和端口,是客户端访问的入口。客户端只需访问 VIP:Port,无需关心后端 Real Server 的具体 IP,实现了“服务无感知”。
  • IPVS规则:调度器上配置的负载均衡策略,包括虚拟服务(VIP+端口)、后端 Real Server 列表、负载均衡算法、会话保持策略等,决定了请求的分发逻辑。

(二)核心术语补充

  • VIP(Virtual IP):虚拟 IP 地址,是虚拟服务的入口 IP,客户端通过 VIP 访问服务。
  • DIP(Director IP):调度器的物理 IP 地址,用于与后端 Real Server 通信,转发请求和接收响应。
  • RIP(Real IP):后端 Real Server 的 IP 地址,是实际处理请求的服务器 IP。
  • 端口转发:调度器将客户端请求的 VIP:Port,转发到后端 Real Server 的 RIP:Port,实现请求分发。

二、IPVS工作原理(核心逻辑)

IPVS 工作在 Linux 内核的 传输层(TCP/UDP),属于“四层负载均衡”。它的核心优势是“内核态处理”——请求的分发逻辑直接在 Linux 内核中完成,无需经过用户态,性能远高于用户态负载均衡(如 Nginx)。其整体工作流程可分为 3 个核心步骤:

  1. 配置阶段:管理员在调度器(K8s 节点)上配置 IPVS 规则,定义虚拟服务(VIP+端口,对应 K8s 的 Service VIP)、后端 Real Server 列表(对应 K8s 的 Pod IP)、负载均衡算法和会话保持策略。
  2. 请求接收:客户端向 VIP 发送请求(如访问 K8s 的 Service VIP),请求数据包到达调度器后,内核中的 IPVS 模块拦截数据包,识别该请求对应的虚拟服务。
  3. 请求分发与响应:IPVS 根据预设的负载均衡算法,从后端 Real Server 列表中选择一台合适的服务器(Pod),将请求数据包转发到该 Real Server。Real Server 处理请求后,将响应数据包返回给客户端(可通过调度器转发,也可直接返回,取决于 IPVS 的转发模式)。

关键补充:IPVS的3种核心转发模式(K8s常用)

IPVS 支持多种转发模式,核心差异在于“响应数据包的返回路径”,不同模式适配不同场景。其中,K8s 集群中最常用前两种:

  • NAT模式(Network Address Translation,网络地址转换)
    • 逻辑:调度器接收客户端请求后,将数据包的目标 IP(VIP)转换为后端 Real Server 的 IP(RIP),目标端口转换为 Real Server 的服务端口;Real Server 处理后,将响应数据包的源 IP(RIP)转换为调度器的 DIP,源端口转换为 VIP 的端口,再返回给客户端。
    • 特点:所有请求和响应都需经过调度器,调度器易成为性能瓶颈;但配置简单,无需修改后端 Real Server 的路由,适合小规模集群。
  • DR模式(Direct Routing,直接路由)
    • 逻辑:调度器仅负责分发请求,不参与响应转发;调度器将请求数据包的目标 MAC 地址修改为后端 Real Server 的 MAC 地址,数据包直接发送到 Real Server;Real Server 处理后,直接将响应数据包返回给客户端(源 IP 为 VIP,客户端无感知)。
    • 特点:响应数据包不经过调度器,性能极高,无瓶颈;但要求调度器和后端 Real Server 必须在同一局域网(同一广播域),适合大规模、高并发集群(K8s 集群首选)。
  • TUN模式(IP Tunneling,IP隧道)
    • 逻辑:调度器将客户端请求数据包封装在 IP 隧道中,转发到后端 Real Server;Real Server 解封装后处理请求,直接将响应数据包返回给客户端。
    • 特点:调度器和 Real Server 可不在同一局域网,扩展性强;但隧道封装会增加一定性能开销,K8s 集群中较少使用。

三、IPVS核心特性(优势与局限)

IPVS 作为 Linux 内核级负载均衡模块,其特性直接决定了它在 K8s 集群中的应用场景。它既有核心优势,也存在一定局限性,需要结合实际场景进行选择。

(一)核心优势(适配K8s企业级场景)

  • 高性能:工作在 Linux 内核态,请求分发无需经过用户态与内核态的切换,处理延迟极低,并发能力强——单调度器可支持 10 万+并发连接,远超 iptables(用户态与内核态切换开销大)和 Nginx(用户态负载均衡)。
  • 支持多种负载均衡算法:内置 10 多种算法,可适配不同业务场景,K8s 中常用的有:
    • rr(Round Robin,轮询):请求依次分发到后端 Real Server,适合后端服务器性能一致的场景。
    • wrr(Weighted Round Robin,加权轮询):根据后端 Real Server 的权重分发请求,权重越高,接收的请求越多,适合后端服务器性能不一致的场景(K8s 默认算法)。
    • lc(Least Connections,最少连接):将请求分发到当前连接数最少的 Real Server,适合请求连接时间较长的场景(如数据库、长连接服务)。
    • sh(Source Hashing,源地址哈希):根据客户端 IP 地址哈希,将同一客户端的请求分发到同一台 Real Server,实现会话保持(适合需要会话一致性的业务)。
  • 高可用性:支持健康检查(通过 ipvsadm 工具配置),当后端 Real Server 故障时,IPVS 会自动将其从集群中剔除,不再分发请求;故障恢复后,自动重新加入集群,保障服务不中断。
  • 可扩展性强:支持动态添加/删除后端 Real Server,无需重启 IPVS 服务,也无需中断现有请求,非常适合 K8s 中 Pod 动态扩缩容的场景(Pod 创建/删除时,kube-proxy 自动更新 IPVS 规则)。
  • 无缝适配K8s:作为 kube-proxy 的负载均衡模式,可直接对接 K8s 的 Service 资源,实现 Service 的负载均衡功能,无需额外部署第三方负载均衡工具。

(二)局限性

  • 仅支持四层负载均衡:仅能基于 IP 地址和端口进行请求分发,无法基于 HTTP 路径、域名等应用层信息(如 Nginx 的 location 匹配)。若需应用层负载均衡,需搭配 Ingress 控制器(如 Nginx Ingress)。
  • 配置相对复杂:需通过 ipvsadm 工具手动配置规则(K8s 中由 kube-proxy 自动配置,无需手动操作),直接使用时 运维 成本较高。
  • 部分模式有网络限制:如 DR 模式要求调度器和后端 Real Server 在同一局域网,TUN 模式有隧道开销,限制了部分场景的应用。

四、IPVS在K8s中的应用(核心重点)

在 K8s 集群中,IPVS 的核心作用是 实现 Service 的负载均衡。K8s 的 Service 资源本质是“虚拟服务”,其 VIP 对应 IPVS 的虚拟服务 IP,后端 Pod 对应 IPVS 的 Real Server,kube-proxy 负责自动配置和维护 IPVS 规则,无需管理员手动操作。

(一)K8s中IPVS的工作流程(结合kube-proxy)

  1. 用户创建 K8s Service(如 ClusterIP 类型),K8s 会为该 Service 分配一个 VIP(ClusterIP)。
  2. kube-proxy 监听 K8s API Server 的 Service 和 Pod 事件,当 Service 关联的 Pod 创建/删除时,kube-proxy 会自动更新 IPVS 规则:
    • 创建虚拟服务:以 Service 的 VIP+端口 作为 IPVS 的虚拟服务。
    • 更新Real Server列表:将 Service 关联的 Pod IP+容器端口,作为 IPVS 的后端 Real Server。
    • 配置负载均衡算法:默认使用 wrr(加权轮询)算法,可通过 Service 注解(如 service.beta.kubernetes.io/aws-load-balancer-type)修改算法。
  3. 客户端(Pod 内部或外部)访问 Service 的 VIP:Port,请求数据包被节点内核的 IPVS 模块拦截。
  4. IPVS 根据负载均衡算法,将请求分发到后端对应的 Pod,Pod 处理后返回响应,完成负载均衡。

(二)K8s中IPVS与iptables的对比(为何优先选IPVS)

kube-proxy 支持三种负载均衡模式:userspace(废弃)、iptablesIPVS。其中 IPVS 是企业级大规模集群的首选,核心对比如下:

对比维度 IPVS iptables
工作层面 内核态,无需用户态/内核态切换 内核态,但规则匹配需遍历链表,开销大
并发能力 强,支持10万+并发连接 弱,大规模集群(Pod数多)易卡顿
规则更新效率 高,支持动态更新,无性能损耗 低,Pod数多时,规则遍历耗时久
负载均衡算法 支持10+种,灵活适配不同场景 仅支持简单轮询,无复杂算法
适用场景 大规模集群、高并发场景(企业级生产) 小规模集群、测试环境

(三)K8s启用IPVS模式的实操要点

  • 前提条件:K8s 节点需加载 IPVS 内核模块,Ubuntu 系统可通过以下命令加载:
    • 查看是否加载:lsmod | grep ip_vs
    • 手动加载:modprobe ip_vs ip_vs_rr ip_vs_wrr ip_vs_lc(加载核心模块和常用算法模块)
    • 永久加载:将模块名称写入 /etc/modules-load.d/ipvs.conf,重启节点生效。
  • 启用IPVS模式:在 kube-proxy 的配置文件(如 config.yaml)中,将 mode 设置为 ipvs,重启 kube-proxy 即可生效。
  • 查看IPVS规则:使用 ipvsadm 工具(Ubuntu 需安装:apt install ipvsadm),执行 ipvsadm -Ln,可查看当前 IPVS 的虚拟服务、后端 Real Server 列表和负载均衡算法。
  • 注意事项:启用 IPVS 后,需确保节点内核版本 ≥ 3.10(推荐 4.15+),避免版本不兼容导致的异常;同时,K8s 版本建议 ≥ 1.11(IPVS 模式在 1.11 版本后稳定)。

五、K8s负载均衡其他解决方案(补充)

除了 IPVS,K8s 集群中还有多种负载均衡解决方案,分别适配不同场景,核心分为“kube-proxy 内置模式”和“第三方独立方案”两大类。

(一)kube-proxy内置其他模式(无需额外部署)

  • iptables模式kube-proxy 的默认模式(部分 K8s 版本),基于 Linux iptables 规则实现负载均衡,工作在内核态。但规则匹配需遍历链表,当 Pod 数量较多(如千级以上)时,规则遍历开销大,并发能力弱、规则更新效率低,仅适合小规模集群、测试环境,企业级生产场景极少使用。
  • userspace模式(已废弃):最早的 kube-proxy 负载均衡模式,工作在用户态,请求需经过用户态与内核态的多次切换,性能极差,并发能力弱,目前已被 IPVS 和 iptables 模式完全替代,无任何企业级应用场景。

(二)第三方独立负载均衡方案(企业级场景补充)

此类方案需额外部署,不依赖 kube-proxy,功能更灵活,适合复杂企业级场景,核心有 3 种:

  • Cilium(eBPF驱动方案):基于 eBPF 技术的新一代网络与负载均衡方案,可完全替代 kube-proxy 和传统 CNI 插件,工作在 Linux 内核态,支持 L3-L7 层负载均衡。核心优势是高性能(通过 XDP 快速路径绕过 TCP/IP 协议栈)、低延迟,支持动态会话管理和百万级并发连接。适配大规模、高并发、对网络性能要求极高的企业级场景,是当前 IPVS 的主要替代方案之一。
  • HAProxy:开源的高性能负载均衡器,支持四层(TCP/UDP)和七层(HTTP/HTTPS)负载均衡,可部署在 K8s 集群外部(作为外部负载均衡器)或内部。核心优势是配置灵活、稳定性高,适合企业级集群的外部流量入口负载均衡(如对接公网流量),常与 Ingress 控制器配合使用,解决 IPVS 仅支持四层负载均衡的局限。
  • Nginx/Nginx Ingress:Nginx 是经典的用户态负载均衡器,支持七层负载均衡。在 K8s 中,Nginx Ingress 控制器是最常用的七层负载均衡方案,可对接 K8s Service,实现基于 HTTP 路径、域名的请求分发,弥补 IPVS 仅支持四层负载均衡的不足。但 Nginx 工作在用户态,性能低于 IPVS 和 Cilium。

六、企业级主流负载均衡方案及核心原因

结合当前企业级 K8s 集群的部署场景(大规模、高并发、高可用、易运维),主流方案分为两类:核心负载均衡(Service层)首选 IPVS,高级负载均衡(七层/外部流量)首选 Cilium+HAProxy/Nginx Ingress 组合。其中 IPVS 是当前企业级 K8s 集群 Service 层负载均衡的绝对主流,核心原因如下:

(一)IPVS成为企业级主流的核心原因(Service层)

  • 性能适配企业级需求:内核态处理,无用户态与内核态切换开销,支持 10 万+并发连接,规则更新效率高,完美适配大规模集群(Pod 数千级以上)、高并发业务场景,这是 iptables 无法比拟的核心优势。
  • 无缝适配K8s生态:作为 kube-proxy 内置模式,无需额外部署第三方工具,kube-proxy 可自动监听 Service 和 Pod 变化,动态更新 IPVS 规则,运维成本极低,契合企业级集群“简化运维”的需求。
  • 功能满足核心需求:支持多种负载均衡算法(wrr、lc、sh 等),可适配不同业务场景,支持健康检查,能自动剔除故障 Pod,保障服务高可用。
  • 兼容性强、成熟稳定:IPVS 是 Linux 内核原生模块,支持绝大多数 Linux 发行版,与 K8s 各版本(1.11+)兼容良好,经过多年企业级验证,运行稳定,故障排查成本低。
  • 成本可控:无需额外采购商业负载均衡设备,基于 Linux 内核原生功能实现,降低企业硬件和软件成本。

(二)其他方案的定位(非主流,仅作为补充)

  • Cilium:是 IPVS 的“进阶替代方案”,性能略优,且支持 L3-L7 层负载均衡,但部署和运维复杂度高于 IPVS,目前主要在超大规模集群或对网络性能有极致要求的企业中逐步推广。
  • HAProxy/Nginx:仅作为“补充方案”。HAProxy 多用于集群外部流量入口的四层/七层负载均衡,Nginx Ingress 多用于七层负载均衡(路径、域名转发)。二者均不替代 IPVS 在 Service 层的核心作用,而是与 IPVS 配合,形成“四层(IPVS)+七层(HAProxy/Nginx Ingress)”的完整负载均衡架构。
  • iptables:仅用于小规模测试环境,企业级生产场景几乎不使用。

(三)企业级主流架构总结

当前企业级 K8s 集群的主流负载均衡架构为:IPVS(Service层,四层负载均衡,核心)+ Nginx Ingress/HAProxy(七层负载均衡,补充)。部分超大规模、高性能需求场景,会用 Cilium 替代 IPVS。这种架构既保证了 Service 层的高并发、高稳定性,又满足了应用层的灵活调度需求。

七、总结

IPVS 是 Linux 内核级的四层负载均衡模块,核心优势是高性能、高并发、可扩展。通过内核态处理请求分发,避免了用户态与内核态的切换开销,完美适配 K8s 集群中 Service 的负载均衡需求。在 K8s 中,IPVS 由 kube-proxy 自动配置和维护,是大规模、高并发企业级集群的首选负载均衡方案。

需要注意的是,IPVS 仅支持四层负载均衡,若需应用层负载均衡(如 HTTP 路径匹配、域名转发),需搭配 Ingress 控制器使用。同时,启用 IPVS 需确保节点加载对应的内核模块。整体而言,IPVS 是 K8s 集群性能优化的重要环节。

结合企业级需求,IPVS 作为 Service 层核心负载均衡方案,搭配 HAProxy/Nginx Ingress 作为七层补充,是当前最成熟、最主流的企业级 K8s 负载均衡架构,Cilium 则作为进阶方案,适配更极致的性能需求。对这类云原生和负载均衡技术感兴趣的开发者,欢迎到 云栈社区 交流讨论。




上一篇:GitHub星标数爆冷:OpenClaw仅用四个月反超React,AI代理时代到来?
下一篇:Web应用评论功能XSS漏洞挖掘:从功能组合到自动关注利用链分析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-5 17:51 , Processed in 0.488997 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表