目录
[Kubernetes 中 Service 的流量负载均衡模式](#Kubernetes 中 Service 的流量负载均衡模式)
[1. iptables 模式](#1. iptables 模式)
[2. IPVS 模式](#2. IPVS 模式)
[启用 IPVS 模式](#启用 IPVS 模式)
Kubernetes 中 Service 的流量负载均衡模式
Kubernetes 的 Service 提供了一种抽象,用于将网络流量分发到一组后端 Pod 上,实现流量的负载均衡和高可用。具体来说,Service 的流量负载均衡有两种实现模式:
1. iptables 模式
工作原理
- 使用 Linux 内核的 Netfilter 框架,通过 iptables 规则实现流量转发。
 - 每个 Kubernetes Service 都会对应一组 iptables 规则。
 - 当请求到达 Service 的 ClusterIP 或 NodePort 时,iptables 会根据规则将流量转发到后端 Pod。
 
数据路径
- 用户请求到达 Kubernetes Service 的 ClusterIP。
 - iptables 根据规则匹配 Service 的 Endpoints。
 - 流量随机转发到某个 Pod。
 
优点
- 简单可靠:iptables 是 Linux 系统中非常成熟的技术。
 - 易于使用:默认配置,开箱即用。
 - 无额外依赖:无需安装额外的工具或模块。
 
缺点
- 性能限制:规则数量多时性能下降(规则逐条匹配)。
 - 不支持动态更新:当后端 Pod 状态变化时,重建规则会导致短暂的流量中断。
 - 流量监控难度高:不易获取详细的流量分发信息。
 
适用场景
适合小型集群或对性能要求不高的场景。
2. IPVS 模式
工作原理
- 基于 Linux 内核的 IP Virtual Server(IPVS)技术实现负载均衡。
 - IPVS 使用 Netfilter 框架,通过在内核中构建高效的哈希表实现流量分发。
 - 支持多种负载均衡算法,如轮询 (RR)、加权轮询 (WRR)、最少连接 (LC) 等。
 
数据路径
- 用户请求到达 Kubernetes Service 的 ClusterIP。
 - IPVS 根据预定义的调度算法选择后端 Pod。
 - 流量直接转发到选定的 Pod。
 
优点
- 性能高效:基于内核实现,比 iptables 更快。
 - 扩展性强:支持更多的负载均衡算法(如源地址散列、目标地址散列等)。
 - 动态更新:后端 Pod 状态变化时,可以快速更新规则,避免流量中断。
 - 可观测性 :使用工具(如 
ipvsadm)可以直接查看流量分发信息。 
缺点
- 依赖内核模块:需要加载 IPVS 相关内核模块。
 - 配置较复杂:需要手动启用和配置。
 
适用场景
适合大规模集群或对负载均衡性能要求较高的场景。
两种模式的对比
| 特性 | iptables 模式 | IPVS 模式 | 
|---|---|---|
| 性能 | 中等 | 高效 | 
| 负载均衡算法 | 随机 | 轮询、加权轮询、最少连接等 | 
| 动态更新 | 延迟更新,可能中断流量 | 快速更新,无中断 | 
| 规则处理 | 顺序匹配规则 | 哈希表处理,性能更优 | 
| 依赖性 | 无需额外模块 | 需加载 IPVS 相关模块 | 
| 监控工具 | 不支持直接监控 | 支持 ipvsadm 查看状态 | 
| 适用场景 | 小型集群,默认使用 | 大规模集群,高性能要求 | 
如何切换模式
启用 IPVS 模式
- 
确保节点支持 IPVS 模块:
lsmod | grep ip_vs如果未加载,手动加载:
modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh - 
编辑 kube-proxy 配置:
kubectl -n kube-system edit configmap kube-proxy设置
proxy-mode为ipvs:apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: "ipvs" - 
重启 kube-proxy:
kubectl -n kube-system delete pod -l k8s-app=kube-proxy 
验证模式
检查 kube-proxy 的模式:
kubectl -n kube-system get configmap kube-proxy -o yaml
        查看 IPVS 规则:
ipvsadm -Ln
        总结
- iptables 模式 是 Kubernetes 的默认模式,简单易用,适合小规模集群。
 - IPVS 模式 性能更高,支持多种负载均衡算法,适合大规模、高并发场景。
 - 根据集群规模和性能需求选择合适的模式,同时注意 IPVS 模式需要额外的配置和依赖支持。
 
