专业营销的网站建设公司,天津快速关键词排名,wordpress自动发布文章无效,网站运营与管理1 kube-proxy概述
kubernetes里kube-proxy支持三种模式#xff0c;在v1.8之前我们使用的是iptables 以及 userspace两种模式#xff0c;在kubernetes 1.8之后引入了ipvs模式#xff0c;并且在v1.11中正式使用#xff0c;其中iptables和ipvs都是内核态也就是基于netfilter在v1.8之前我们使用的是iptables 以及 userspace两种模式在kubernetes 1.8之后引入了ipvs模式并且在v1.11中正式使用其中iptables和ipvs都是内核态也就是基于netfilter只有userspace模式是用户态。
2 userspace模式
刚开始kube-proxy进程是一个真实的TCP/UDP代理当某个pod以clusterIP方式访问某个service的时候这个流量会被pod所在的本机的iptables转发到本季的kube-proxy进程然后将请求转发到后端某个pod上。具体过程为 1kube-proxy为每个service在node上打开一个随机端口作为代理端口
2建立iptables规则将clusterip的请求重定向到代理端口用户空间
3到达代理端口的请求再由kubeproxy转发到后端pod
clusterip重定向到kube-proxy服务的过程存在内核态到用户态的切换开销很大因此有了iptables模式而userspace模式也被废弃了。
3 iptables模式
kubernets从1.2版本开始将iptabels模式作为默认模式这种模式下kube-proxy不再起到proxy的作用。其核心功能通过API Server的Watch接口实时跟踪Service和Endpoint的变更信息并更新对应的iptables规则Client的请求流量通过iptables的NAT机制“直接路由”到目标Pod。
不同于userspace模式iptables模式由kube-proxy动态的管理kube-proxy不再负责转发数据包的走向完全由iptables规则决定这样的过程不存在内核态到用户态的切换效率明显会高很多。但是随着service的增加iptables规则会不断增加导致内核十分繁忙等于在读一张很大的没建索引的表。
2个svc8个pod就有34条iptabels规则了随着集群中svc和pod大量增加以后iptables中的规则开会急速膨胀导致性能下降某些极端情况下甚至会出现规则丢失的情况并且这种故障难以重现和排查。
4 ipvs模式 从kubernetes 1.8版本开始引入第三代的IPVS模式它也是基于netfilter实现的但定位不同iptables是为防火墙设计的IPVS则专门用于高性能
负载均衡并使用高效的数据结构Hash表允许几乎无限的规模扩张。
一句话说明ipvs使用ipset存储iptables规则在查找时类似hash表查找时间复杂度为O(1)而iptables时间复杂度则为O(n)。
可以将ipset简单理解为ip集合这个集合的内容可以是IP地址、IP网段、端口等iptabels可以直接添加规则对这个可变集合进行操作这样做的好处可以大大减少iptables规则的数量从而减少性能损耗。
假设要禁止上万个IP访问我们的服务器如果用iptables的话就需要一条一条的添加规则会生成大量的iptabels规则但是用ipset的话只需要将相关IP地址加入ipset集合中即可这样只需要设置少量的iptables规则即可实现目标。
由于ipvs无法提供包过滤、地址伪装、SNAT等功能所以某些场景下比如NodePort的实现还要与iptables搭配使用。