k8---proxy
kube-proxy 通過(guò) Informer知道了Service、endpoints對(duì)象的創(chuàng)建,然后把service身上的CLUSTER-IP 和端口已經(jīng)端點(diǎn)信息拿出來(lái),創(chuàng)建iptable NAT規(guī)則做轉(zhuǎn)發(fā)或通過(guò)ipvs模塊創(chuàng)建VS服務(wù)器,這樣經(jīng)過(guò)CLUSTER-IP的流量都被轉(zhuǎn)發(fā)到后端pod。
iptables模式
我們先查看nat表的OUTPUT鏈,存在kube-proxy創(chuàng)建的KUBE-SERVICE鏈
iptables -nvL OUTPUT -t nat
在KUBE-SERVICES鏈中有一條目的地為10.96.148.206即CLUSTER-IP地址跳轉(zhuǎn)到KUBE-SVC-EJUV4ZBKPDWOZNF4
iptables -nvL KUBE-SERVICES -t nat |grep service-demo
接著是查看這條鏈,以1/3的概率跳轉(zhuǎn)到其中一條
iptables -nvL KUBE-SVC-EJUV4ZBKPDWOZNF4 -t nat
最后KUBE-SEP-BTFJGISFGMEBGVUF鏈終于找到了DNAT規(guī)則
iptables -nvL KUBE-SEP-BTFJGISFGMEBGVUF -t nat
即將請(qǐng)求通過(guò)DNAT發(fā)送到地址100.101.184.61:9376也就是我們其中一個(gè)Pod。
IPVS模式
與iptalbes模式相比,IPVS模式工作在內(nèi)核態(tài),在同步代理規(guī)則時(shí)具有更好的性能,同時(shí)提高網(wǎng)絡(luò)吞吐量為大型集群提供了更好的可擴(kuò)展性。
IPVS 模式在工作時(shí),當(dāng)我們創(chuàng)建了前面的 Service 之后,kube-proxy 首先會(huì)在宿主機(jī)上創(chuàng)建一個(gè)虛擬網(wǎng)卡kube-ipvs0,并為它分配 Service VIP 作為 IP 地址,如圖
接著kube-proxy通過(guò)Linux的IPVS模塊為這個(gè) IP 地址添加三個(gè) IPVS 虛擬主機(jī),并設(shè)置這三個(gè)虛擬主機(jī)之間使用輪詢模式 來(lái)作為負(fù)載均衡策略。
通過(guò)ipvsadm查看
ipvsadm -ln |grep -C 5 10.96.148.206
可以看到虛擬server的IP即是Pod的地址,這樣流量即向了目的地Pod。
以上我們先認(rèn)識(shí)了Service這個(gè)API對(duì)象,接著講到了service與endpoints和pod的關(guān)聯(lián),然后是service與kube-proxy的關(guān)系,以及kube-proxy的兩種模式如何通過(guò)service的IP創(chuàng)建iptables、IPVS規(guī)則將流量轉(zhuǎn)發(fā)到Pod。
總結(jié)
以上是生活随笔為你收集整理的k8---proxy的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JDK源码解析之 java.lang.I
- 下一篇: update和delete操作忘加whe