程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

kubernetes基础知识之service服务工作模式

balukai 2025-04-23 22:02:53 文章精选 9 ℃

kubernetes中kube-proxy的默认代理模式是iptables,但是可以从iptables迁移到ipvs。

Kubernetes 代理模式分成:

①:userspace 用户空间模式

②:iptables 防火墙模式(默认模式)

③:ipvs 虚拟服务器模式

用户空间模式userspace 涉及到两个组件,kube-apiserver和kube-proxy。每个节点上的kube-proxy 都需要监听当前的kube-apiserver,也就是监听当前的负载均衡规则的需要去改变的信息,其实就是service对象。

客户端的pod 要想访问多个server 端的pod,首先客户端的pod需要先访问本地的防火墙规则,也就是service_ip,防火墙规则会把流量转发到当前节点的kube-proxy,或者是其它节点的kube-proxy。然后kube-proxy再代理server pod,返回给当前的客户端client pod,去实现当前的整个负载均衡。kube-proxy在整个工作方式里有两个功能:

1.需要去根据监听的service对象修改防火墙的规则,实现负载均衡的分发。

2.需要代理来自客户端的请求,再返回给客户端。

如果当前来自客户端的请求量级很大、请求的资源规模比较多的话,那么kube-proxy就会形成一定的压力。

Service服务的用户空间userspace模式,在用户空间模式下,kube-proxy的作用有两个:

①:监听kube-apiserver,并且根据service的变化修改本地的防火墙规则。

②:代理来自当前节点pod的用户请求。

在规模大的情况下,kube-proxy的压力可能会比较大,而且也不便于功能的解耦。

service中kube-proxy第二种工作模式是:iptables防火墙模式。

kube-proxy监听了kube-apiserver以后,只是将当前的监听结果写入至本机当前的防火墙规则。也就是后端的客户端访问,完全由防火墙iptables转发给当前的本地服务器和远程服务器中的Server pod,kube-proxy本身不再参与本身的代理功能。

kube-proxy防火墙iptables工作模式的好处:

①:这样功能就解耦了,功能不复杂才便于更稳定更有效的开发。

②:不会由于本机的一些pod数量的增多、请求量的增大导致kube-proxy出现压力。

kube-proxy的第二种工作模式是:iptables防火墙模式。kube-proxy的作用:kube-proxy监听kube-apiserver,并且根据service对象的变化修改本地的iptables防火墙规则。iptabls防火墙工作模式中pod的代理访问完全不经过kube-proxy组件,所以压力会更小一些。

kube-proxy的iptables防火墙工作模式,具有的优势:

①:相比第一代userspace用户空间模式,kube-proxy功能解耦、压力较小。

service中kube-proxy第三种工作模式是:ipvs虚拟服务器模式。

ipvs工作模式其实本质上没有变化,唯一的变化就是把底层的iptables防火墙换成了在linux机器里面的非常著名的底层负载均衡器ipvs,也叫LVS。

每个节点服务器里面kube-proxy去监听kube-apiserver,kube-proxy将当前service集群的负载均衡集群的信息去转换成ipvs规则,落在本地的机器上。然后每一个机器的客户端pod访问本机器的ipvs规则,被负载到第一个、第二个或者第三个pod中。

ipvs在当前的四层负载均衡领域是专业的,所以只是谈负载均衡的话,它是优于当前的iptables防火墙工作模式的。

所以kube-proxy用ipvs理论上是性能更强的选择。

默认的服务器kube-proxy并没有选择ipvs的方案工作,因为ipvs模块需要在内核中开启。kubernetes官方害怕由于服务器没有启用ipvs模块的规则导致默认启用ipvs规则的话,没办法正常工作。

很多云厂商内部服务器的ipvs模块是被移除了的。原因很简单:现在每家云公司在做活动,每一台服务器的价格比较便宜。但是如果买了一个云主机,在上面安装了ipvs去充当负载均衡集群的话,它的价格相对是比较低廉的。那么就不会购买云厂商自己提供的负载均衡即服务的服务了,所以云厂商会把ipvs的模块给事先去掉。

在service服务的kube-proxy ipvs工作模式中,要事先确认服务器是否已经正常加载ipvs模块。如果可以加载,那么推荐把kube-proxy的工作方式修改成ipvs模式,它的性能一定是最好的。与防火墙iptables的工作模式相比,ipvs的效率一定是更高的。每一个ipvs的引用没有任何问题,那么就可以修改kube-proxy的工作模式为ipvs。

修改kube-proxy的工作模式,把防火墙iptables模式改成ipvs虚拟主机模式的方法:

kubectl edit configmap kube-proxy -n kube-system

把mode改成ipvs。

然后:

kubectl delete pod -n kube-system -l k8s-app=kube-proxy

鼓励的话语:雄心的一半是耐心!

Tags:

最近发表
标签列表