一、核心定位
iptables内核Netfilter包过滤、NAT转发,k8s默认早起Service代理
IPVS:内核四层负载均衡,专门做流量调度
二、核心区别
1.调度能力
iptables:无调度算法,纯规则匹配转发
IPVS: 支持轮询、加权轮询、最小连接等多种调度算法
2.性能规模
iptables:规则海量时卡顿、延迟飙升,千级服务吃力
IPVS:哈希表调度,万级服务依旧稳定,高并发更强
3.连接模型
iptables:DNAT/SNAT逐条规则跳转
IPVS:四层负载转发,链路更简洁
4.会话保持
iptables:仅简单源IP绑定
IPVS:NAT/DR/TUN全支持,k8s常用NAT
三、两者联系
1.同属Linux内核网络模块,都处理四层流量
2.K8s Service二选一作为流量代理
3.IPVS底层仍依赖部分iptables规则做潜质过滤、端口拦截
4.都实现Service:ClusterIP->后端Pod转发
四、最简选型
小集群、业务少:iptables够用简单
大集群、高并发、多服务:IPVS性能更稳
五、K8s切换命令
#查看当前代理模式
kubectl get configmap kube-proxy -n kube-system -o yaml
#修改mode:ipvs即可切换
六、iptables原理
1.给予linux内核Netfilter钩子链,生成海量DNAT、SNAT、过滤规则存入内核
2.流量入栈,逐条对比规则,匹配成功就改写IP端口,转发至后段pod
3.无调度算法,仅按规则定向转发;服务增多,规则线性暴涨,匹配耗时变长
七、内核专属四层负载均衡模式,哈希表查表调度
1.kube-proxy维护虚拟服务、后端真实pod节点映射
2.流量抵达后,直接哈希检索映射,安轮询、加权轮询等算法挑选后端
3.完成IP/端口改写转发,表查询效率极高,海量服务下性能衰减极小
八、关联原理
1.共用内核网络协议栈,均实现ClusterIP到Pod的流量转发
2.IPVS运行时,会借用少量iptables规则做流量准入、边界拦截
3.都依靠内核NAT机制完成地址转换,仅调度检索方式不同
九、核心原理差异
iptables:链表遍历匹配,规则越多越慢
IPVS:哈希索引查询,算法调度,高并发稳定