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 ..................省略 --------------------------------------------------------------------------------------
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/17675293.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步