kube-proxy使用ipvs的主要原因是为了提高kubernetes集群中服务的可靠性和性能。

两者区别

1.底层数据结构
ipvs底层的数据结构是哈希表,时间复杂度为O(1),适用于需要快速查找、插入、删除的场景;
iptables底层数据结构是线性表,时间复杂度为O(n),适用于插入和删除操作频繁且位置不固定的场景。

2.负载均衡算法
ipvs支持的负载均衡算法更多,包括轮询、加权轮询、最小连接数、加权最小连接数、地址哈希等8种;
iptables支持的相对较少,只支持随机、轮询2种负载均衡算法。

3.操作工具
ipvs使用ipvsadm来定义规则;
iptables使用iptables命令行定义规则。

4.clusterIP是否可以ping通
ipvs模式下clusterIP可以ping通;
iptables模式下clusterIP不能ping通,因为没有一个实际的网络设备做支持。

示例:

  • 安装ipvsadm工具
yum install ipvsadm
  • 查看ipvs负载均衡规则
# 使用ipvsadm查看当前负载均衡规则
ipvsadm -Ln

# 将显示当前所有负载均衡规则和对应后端服务器列表
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.100:80 wlc
  -> 10.244.2.2:80                Masq    1      0          0
  -> 10.244.1.2:80                Masq    1      0          0

这个示例中,有一个 IPVS 负载均衡规则,监听10.0.0.100:80,采用 WLC 调度算法,有两个后端服务器10.244.2.2:8010.244.1.2:80

两者联系

ipvs和iptables都是基于内核netfilter模块,都是在内核中的5个钩子函数处工作。

  • 在iptables模式下,kube-proxy会监视master对service对象和endpoint对象的添加和移除,会创建iptables规则,捕获该service的clusterip和端口的请求,然后把请求重定向到service的一组backend中的某个Pod上。
  • 在ipvs模式下,kube-proxy监视service和endpoint,调用netlink接口以相应的创建ipvs规则,并定期和service、endpoint同步ipvs规则,以确保ipvs状态和期望保持一致。
posted on 2023-05-25 10:42  jiayou111  阅读(124)  评论(0编辑  收藏  举报