ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

k8s中关于kube-proxy的iptables模式和ipvs模式探讨

2021-03-21 19:54:09  阅读:348  来源: 互联网

标签:iptables ip 模式 ipvs vs proxy pod kube


作者:李毓

k8s中1.8版本中就加入了ipvs模式。那么这个模式相对于iptables模式来说有什么优缺点呢,我们就来探讨一下。
我们先来回顾一下一个pod的信息是如何产生变化的。

首先由kubectl发起请求,请求到了 api-server,然后api-server把信息存储到etcd。然后kube-proxy监听到了api-server的变化,然后将信息传送到service,接着再通过iptables送到后端的endpoint。
这一系列请求最后是通过iptables来传递的。

对于后台的每一个endpoint,是如何选择到底如何发送到哪一个的呢?如果选择的第一个pod没有响应,那么他将选择另外一个pod进行启动。

这样就产生了一个问题,iptables是基于内核规则列表的,集群节点越多,那么性能就越差。比如我们在1000个节点中使用了nodeport服务,并且1000个服务中每个服务有10个pod。那么每个节点上将至少产生了10000个iptables规则,这将使得内核变得非常的繁忙。机器的性能会大打折扣。

然后我们再看看ipvs模式,再这个模式中,仍然是由kube-proxy监听service的变化。并通过网络接口定期将ipvs规则和service信息进行同步。当访问service的时候,流量将流向后端的endpoint地址。

ipvs是基于netfilter hook函数的,这个函数使用的是hash表作为底层数据结构。这意味着ipvs用更少的流量同步规则,使得网络吞吐量效率更加高效。

在这里,我们就可以总结一下了。

ipvs和iptables都是基于netfilter的,他们的差别为:
ipvs 为大规模集群提供了更好的可扩展性和性能
ipvs 支持比 iptables 更复杂的复制均衡算法(最小负载、最少连接、加权轮询等)
ipvs 支持服务器健康检查和连接重试等功能

至于为什么这么好的性能但是K8S却一直默认使用iptables呢?估计是他们认为大多数公司都不会有大规模使用集群的要求吧。

接下来我们试一下ipvs的模式。

先查看一下目前的模式,我的是K8S1.18版本。

k8s中关于kube-proxy的iptables模式和ipvs模式探讨

我们改成ipvs模式,查看内核模块是否加载。

[root@adm-master ~]# lsmod|grep ip_vs
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145497  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139224  9 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

这里原来是空的,修改成ipvs模式

[root@adm-master ~]# kubectl edit configmap kube-proxy -n kube-system
configmap/kube-proxy edited

k8s中关于kube-proxy的iptables模式和ipvs模式探讨

删除所有kube-proxy的pod

[root@adm-master ~]# kubectl delete pod/kube-proxy-84p9n -n kube-system
pod "kube-proxy-84p9n" deleted
[root@adm-master ~]# kubectl delete pod/kube-proxy-mkbk8 -n kube-system
pod "kube-proxy-mkbk8" deleted
[root@adm-master ~]# kubectl delete pod/kube-proxy-xzwxl -n kube-system
pod "kube-proxy-xzwxl" deleted

查看模式

k8s中关于kube-proxy的iptables模式和ipvs模式探讨

查看ipvs相关规则。

安装ipvsadm

yum install -y ipvsadm

k8s中关于kube-proxy的iptables模式和ipvs模式探讨

标签:iptables,ip,模式,ipvs,vs,proxy,pod,kube
来源: https://blog.51cto.com/14783669/2667539

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有