我们前面介绍过在Kubernetes中的一个重要组件Service,它的作用为Pod提供一个入口,我们在集群中只要访问servie的IP+Port就可以代理到后端的Pod,在它们之前的请求转发离不开每个Node节点上的kube-proxy组件。
kube-proxy的模式有以下三种:
kube-proxy的主要作用是:
其工作流程为:请求到达Service IP的内核空间,然后回到当前组件的用户空间kube-proxy,然后生成相应的规则再到内核空间,再由iptables规则代理到请求的Pod。
在这整个过程中,kube-proxy起到代理的作用,整个调度都要经过它。
其工作流程为:请求到达内核空间service IP,直接由其iptables规则转发到相应Pod。 相比于userspace,iptables模式全工作在内核态,不用经过用户态kube-proxy中转。
与iptables相比,IPVS拥有以下明显优势: ◎ 为大型集群提供了更好的可扩展性和性能; ◎ 支持比iptables更复杂的复制均衡算法(最小负载、最少连接、加权等); ◎ 支持服务器健康检查和连接重试等功能; ◎ 可以动态修改ipset的集合,即使iptables的规则正在使用这个集合。
由于IPVS无法提供包过滤、airpin-masquerade tricks(地址伪装)、SNAT等功能,因此在某些场景(如NodePort的实现)下还要与iptables搭配使用。在IPVS模式下,kube-proxy又做了重要的升级,即使用iptables的扩展ipset,而不是直接调用iptables来生成规则链。
其工作流程:请求到达内核空间Service IP,然后由ipvs规则转发到相应的Pod。