kube-proxy支持的三种工作模式

kube-proxy支持的三种工作模式

userspace模式

userspace模式下,kube-proxy会为每一个service创建一个监听端口,用户请求首先发送给Cluster IP,然后由iptables规则重定向到kube-proxy监听的端口上,kube-proxy根据LB算法选择一个提供服务的pod并和其建立连接

该模式下,kube-proxy充当了一个四层负载均衡器的角色,由于kube-proxy运行在userspace下,在转发的过程中会增加内核和用户空间之间的数据拷贝,虽然稳定但是效率比较低

在这里插入图片描述

iptables模式

iptables模式下,kube-proxy为service后端的每个pod创建对应的iptables规则,当用户请求时,首先将请求发给cluster IP,然后根据iptables规则,转发到具体的pod上

该模式下kube-proxy的作用仅仅是监听service的变化,生成最新的iptables规则,此时kube-proxy不再承担四层负载均衡器的角色,该模式的优点较userspace模式效率更高,但是不能提供灵活的LB策略,当其中一个pod异常,iptables还是会转发在异常的pod上,并且不会重试

在这里插入图片描述

ipvs模式

ipvs模式和iptables模式类似,kube-proxy监控service、pod的变化并创建对应的ipvs规则,ipvs相对于iptables转发效率更高,除此之外,ipvs支持更多的LB算法

在这里插入图片描述

开启ipvs模式

1.修改kube-proxy的configmap设置mode为ipvs
[root@k8s-master ~]# kubectl edit cm kube-proxy -n kube-system
44     mode: "ipvs"			#在44行左右
configmap/kube-proxy edited

2.重建所有关于kube-proxy的pod
#-l表示根据标签找到对应的pod
[root@k8s-master ~]# kubectl delete pod -l k8s-app=kube-proxy -n kube-system
pod "kube-proxy-4lvxw" deleted
pod "kube-proxy-lkm8r" deleted
pod "kube-proxy-whmll" deleted

3.查看ipvs规则
[root@k8s-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.81.210:30376 rr
TCP  192.168.122.1:30376 rr
TCP  10.96.0.1:443 rr
  -> 192.168.81.210:6443          Masq    1      0          0         
TCP  10.96.0.10:53 rr
  -> 10.244.0.18:53               Masq    1      0          0         
  -> 10.244.0.19:53               Masq    1      0          0         
TCP  10.96.0.10:9153 rr
  -> 10.244.0.18:9153             Masq    1      0          0         
  -> 10.244.0.19:9153             Masq    1      0          0         
TCP  10.101.187.80:80 rr
TCP  10.102.142.245:80 rr
  -> 10.244.1.198:8080            Masq    1      0          0         
TCP  10.103.231.226:80 rr persistent 10800
  -> 10.244.1.202:8080            Masq    1      0          0         
TCP  10.111.44.36:443 rr
  -> 192.168.81.230:443           Masq    1      1          0         
TCP  10.111.227.155:80 rr persistent 10800
TCP  10.244.0.0:30376 rr
TCP  10.244.0.1:30376 rr
TCP  127.0.0.1:30376 rr
TCP  172.17.0.1:30376 rr
UDP  10.96.0.10:53 rr
  -> 10.244.0.18:53               Masq    1      0          0         
  -> 10.244.0.19:53               Masq    1      0          0 

以ipvs为例解释

[root@k8s-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.96.0.10:53 rr
  -> 10.244.0.18:53               Masq    1      0          0         
  -> 10.244.0.19:53               Masq    1      0          0   
  • 10.96.0.10:53为service的ip,rr表示轮询,下面10.244.0.18、10.244.0.19都是pod的ip地址
  • 当访问这个service ip时,kube-proxy会根据ipvs策略通过轮询的方式转发给后端的pod
  • 这套规则会在集群上任意节点都生成,因此访问集群任意节点都可以访问到内部的pod

猜你喜欢

转载自blog.csdn.net/weixin_44953658/article/details/115003300