28、k8s-service-简介-kube-proxy-ipvs

概念:在kubernetes中、pod是应用程序的载体、我们可以通过pod的ip来访问应用程序、但是pod的ip地址是不固定的、这也就意味着不方便直接采用pod的ip对服务进行访问
为了解决这个问题、kubernetes提供了service资源、service会对提供同一个服务的多个pod进行聚合、并且提供一个统一的入口地址、通过访问service的入口地址就能访问到后面的pod服务

service在很多情况下只是一个概念、 真正起作用的其实是kube-proxy服务进程、每个node节点上都运行着一个kube-proxy服务进程
当创建service的时候会通过api-server向etcd写入创建的service信息、而kube-proxy会基于监听的机制发现这种service的变动、然后 
他会将最新的service信息转换成对应的访问规则

-----------------------------------------------

kube-proxy目前支持三种工作模式:

  ·userspace模式:由kube-proxy管理pod

userspace模式下、kube-proxy会为每一个service创建一个监听端口、发向Cluster IP 的请求被iptables规则重定向到kube-proxy监听的端口上
kube-proxy会根据LB算法选择一个提供服务的pod并和其建立链接、以将请求转发到pod上
该模式下、kube-proxy充当了一个四层负责均衡器的角色、由于kube-proxy运行在userspace中、在进行转发处理时会增加内核和用户空间之间的数据拷贝、虽然比较稳定、但是效率较低

#注:LB算法:轮询、权重、随机、加权轮询、基于session转发等

  ·iptables:由cluster ip(iptables)管理pod、kube-proxy负责给cluster ip(iptables)定规则

iptables模式下、kube-proxy为service后端的每个pod创建对应的iptables规则、直接将发向Cluster IP的请求重定向到一个pod IP
该模式下kube-proxy不承担四层负载均衡器的角色、只负责创建iptables规则、该模式的优点是较userspace模式效率更高、但不能提供灵活的LB策略、当后端pod不可用时也无法进行重试

 

  ·ipvs模式(推荐):将iptables换为virtual server

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

注意:
    ·使用ipvs模式需要安装此内核模块、否则会默认使用的是iptables
    
---------------------------------------------------------------------
1、查看ipvs规则:ipvsadm -Ln
---------------------------------------------------
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
  #没有规则,要么没有安装ipvs模块、要么没有打开
---------------------------------------------------------------------------
2、这里已安装ipvs模块、直接编辑配置文件打开即可:
    ·编辑:kubectl edit cm kube-proxy -n kube-system
    -----------------------------------------------
    #找到mode 写入ipvs
     mode: "ipvs"        #开启ipvs
    ------------------------------------------------
3、删除kube-system空间下的pod进行重建:
    ·kubectl delete pod -l k8s-app=kube-proxy -n kube-system
4、再次查看ipvs规则:ipvsadm -Ln
-------------------------------------------------------------------
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  127.0.0.1:31484 rr                                                        #表示当访问这个地址的时候(rr是轮询的意思)会转发到10.244.1.132:80
TCP  172.17.0.1:30114 rr                                                       #表示当访问这个地址的时候(rr是轮询的意思)会转发到10.244.1.132:80
  -> 10.244.1.132:80              Masq    1      0          0
TCP  172.17.0.1:31484 rr                            #TCP 后面的地址是service的地址
TCP  172.17.0.1:31846 rr
  -> 10.244.1.126:8090            Masq    1      0          0          #转发 到pod里的地址
  -> 10.244.1.129:8090            Masq    1      0          0
TCP  192.168.177.160:30114 rr
  -> 10.244.1.132:80              Masq    1      0          0
TCP  192.168.177.160:31484 rr
TCP  192.168.177.160:31846 rr
  -> 10.244.1.126:8090            Masq    1      0          0
  -> 10.244.1.129:8090            Masq    1      0          0
  ..................省略
--------------------------------------------------------------------------------------

posted @ 2024-07-01 00:13  little小新  阅读(2)  评论(0编辑  收藏  举报