在每个Node节点都运行一个kube-proxy服务,用来监听API server中service和endpoint的变化情况,并通过IPvs、iptables等来为服务配置负载均衡(仅支持 TCP 和 UDP)。
一、kube-proxy工作模式
kube-proxy当前支持以下几种模式:
1、userspace:最早的负载均衡方案,它在用户空间监听一个端口,所有服务通过iptables转发到这个端口,然后在其内部负载均衡到实际的Pod。该方式最主要的问题是效率低,有明显的性能瓶颈。
2、iptables:目前推荐的方案,完全以 iptables 规则的方式来实现 service 负载均衡。该方式最主要的问题是在服务多的时候产生太多的 iptables 规则,非增量式更新会引入一定的时延,大规模情况下有明显的性能问题。
3、ipvs:为解决iptables模式的性能问题,v1.11新增了ipvs模式(v1.8开始支持测试版,并在v1.11 GA),采用增量式更新,并可以保证service更新期间连接保持不断开。
4、winuserspace:同userspace,但仅工作在Windows 节点上。
二、kube-proxy的工作过程:
三、ipvs模式
在本章节中主要学习ipvs模式
需要预先安装ipvsadm插件,预先在每台Node上加载内核模块
# modprobe -- ip_vs
# modprobe -- ip_vs_rr
# modprobe -- ip_vs_wrr
# modprobe -- ip_vs_sh
# modprobe -- nf_conntrack_ipv4
查看kube-ipvs0接口:
查看ipvs的状态:
kube-proxy不足:
kube-proxy目前仅支持TCP和UDP,不支持HTTP路由,并且也没有健康检查机制。这些也可以通过自定义Ingress Controller的方法来解决。