[](
)1)工作模式
kube-proxy 支持 3 种工作模式,如下:
1. userSpace
这个模式比较稳定,但是效率比较低!在 userSpace 模式下,kube-proxy 会为每一个 Service 创建一个监听端口,当有请求发往Cluster IP 的时候,会被 Iptables 规则重定向到 kube-proxy 监听的端口上,kube-proxy 会根据 LB 算法选择一个 Pod 提供服务并建立起连接。
这个模式下,kube-proxy 充当的角色是一个 四层负责均衡器,由于 kube-proxy 运行在 userSpace 模式下,在进行转发处理的时候会增加内核和用户空间之间的数据拷贝,因此效率比较低。
2. iptables
在 iptables 模式下,kube-proxy 会为 Service 后端的每个 pod 都创建对应的 iptable 规则,直接将发往 Cluster IP 的请求重定向到一个 pod IP 上。该模式下 kube-proxy 不承担四层负载均衡器的角色,只负责创建 iptables 的规则。该模式的优点便是较 userspace 模式来说效率更高,但是不能提供灵活的 LB 策略。当后端Pod不可用的时候也无法进行重试。
3. ipvs
这种模式与 iptables 模式形似,kube-proxy 会监控pod的变化并且创建相应的 ipvs 规则。但是 ipvs 规则相对于 iptables 来说转发效率更高,而且支持更多的 LB 算法。
实践
上面了解到3种工作模式。我们来简单试一下 ipvs 的作用。首先准备一份资源清单:
这份清单上半部分是创建一个 Pod控制器,下半部分是创建一个 Service。
然后我们输入 ipvsadm -Ln命令即可看到 ipvs规则策略:
10.108.230.12 是 service 提供的访问入口,当访问这个入口的时候,可以发现后面有三个 pod 的服务在等待调用,kube-proxy 会基于 rr(轮询)的策略,将请求分发到其中一个pod上去,这个规则会同时在集群内的所有节点上都生成,所以在任何一个节点上访问都可以!
此模式必须安装 ipvs 内核模块,否则会降低为 iptables
开启 ipvs:
kubectl edit cm kube-proxy -n kube-system
编辑后保存(:wq)