背景
kubernetes
中的service
最开始是利用iptables
技术实现,但是后来kubernetes
官方抛弃了iptables
,改用ipvs
来实现service
。
Iptables问题
- 规则复杂凌乱,排查问题困难
- 基于链表实现,查找复杂度为
O(n)
,当规则超过2w
条时,内核压力巨大,iptbales
将会成为瓶颈
IPVS特点
- 专注于负载均衡技术,且支持多种调度算法
- 基于哈希查找,复杂度为
O(1)
个人思考
为什么要弃用iptables
?
Iptables
在功能上应该是偏防火墙功能k8s
中流量的负载均衡就是利用service
来实现的,而ipvs
最初的目的就是解决负载问题,ipvs
更加专注于负载均衡技术。在这一点上,和service
的需求更加契合;而且ipvs
的性能还非常好
从以上两点出发,去思考kubenertes
为社么要弃用iptables
,这样会更简单直接一些!
应该使用ipvs的哪种模式呢?
service
是需要支持端口映射的,so,这样一来就只有一种模式可选了——VS/NAT模式