前言
Service是k8s中资源的一种,也是k8s能够实现减少运维工作量,甚至免运维的关键点,我们公司的运维都要把服务搭在我们集群里,接触过的人应该都能体会到其方便之处。Service能将pod的变化屏蔽在集群内部,同时提供负载均衡的能力,自动将请求流量分布到后端的pod,这一功能的实现靠的就是kube-proxy的流量代理,一共有三种模式,userspace、iptables以及ipvs。
1、userspace
网上的图是这样的:
没大理解,自己画的一下:
1、为每个service在node上打开一个随机端口(代理端口)
2、建立iptables规则,将clusterip的请求重定向到代理端口
3、到达代理端口(用户空间)的请求再由kubeproxy转发到后端pod。
这里为什么需要建iptables规则,因为kube-proxy 监听的端口在用户空间,所以需要一层 iptables 把访问服务的连接重定向给 kube-proxy 服务,这里就存在内核态到用户态的切换,代价很大,因此就有了iptables。