K8S kube-proxy- iptable模式实现原理分析
? ?每臺機器上都運行一個kube-proxy服務,它監聽api-server 和endpoint變化情況,維護service和pod之間的一對多的關系,通過iptable或者ipvs為服務提供負載均衡的能力。通常kube-proxy作為deemonset運行在各種節點中。
kube-proxy 常支持以下二種:
1)iptables:iptable模式是目前的默認模式,可以看成是userspace模式的升級版,它將請求的代理轉發規則全部寫入iptable中,砍掉了kube-proxy轉發的部分。整個過程全部發生在內核空間,提高了轉發性能。但是,iptable的規則是基于鏈表實現的,規則數量隨著Service數量的增加線性增加,查找時間復雜度為O(n)。當Service數量到達一定量級時,CPU消耗和延遲增加顯著
2)ipvs:ipvs模式是基于章文嵩博士開發的LVS實現的,ipvs和iptables都是基于內核的netfilter框架實現的,不同的是iptable主攻防火墻,ipvs主攻內核態4層負載均衡。可以說先天上,ipvs就比iptable更適合做Service的實現。
下面重點說下iptables,下圖是網上看到的一張圖作為理解。
iptables其實不是真正的防火墻,我們可以把它理解成一個客戶端代理,用戶通過iptables這個代理,將用戶的安全設定執行到對應的”安全框架”中,這個”安全框架”才是真正的防火墻,這個框架的名字叫netfilter。
netfilter才是防火墻真正的安全框架(framework),netfilter位于內核空間。
iptables其實是一個命令行工具,位于用戶空間,我們用這個工具操作真正的框架。
netfilter 包括 5個hook(prerouting,input,foeward,output,poostrouting) 函數 和 4張表(filter, net,mangle, row).
filter表:負責過濾功能,防火墻;內核模塊:iptables_filter
nat表:network address translation,網絡地址轉換功能;內核模塊:iptable_nat
mangle表:拆解報文,做出修改,并重新封裝 的功能;iptable_mangle
raw表:關閉nat表上啟用的連接追蹤機制;iptable_raw
?下圖是hook函數和各個表的對應關系,黃色代表的鏈式關系。
上圖簡單說明下,一個請求首先會進入prorouting,prorouting沒有過濾的功能,會判斷這個請求是流向,是外部還是內部的,如果是外部請求就會直接forward出去,如果是內部的請求就會走到input,然后到達應用層處理后會經過outoput 然后再發出去。中間會經過一系列的過濾規則,有一條不符合就會,reject或者drop掉。
通常使用來查看本機table名為TABLE_NAME的iptable規則
iptables -t TABLE_NAME -vnL?比如查看filter 表的規則信息,下圖展示了input和forward規則信息。
?
- pkts:處理過的匹配的報文數量
- bytes:累計處理的報文大小(字節數)
- target:如果報文與規則匹配,指定目標就會被執行。
- prot:協議,例如?tdp、udp、icmp?和?all。
- opt:很少使用,這一列用于顯示 IP 選項。
- in:入站網卡。
- out:出站網卡。
- source:流量的源 IP 地址或子網,后者是?anywhere。
- destination:流量的目的地 IP 地址或子網,或者是?anywhere。
還有一列沒有表頭,顯示在最后,表示規則的選項,作為規則的擴展匹配條件,用來補充前面的幾列中的配置。prot、opt、in、out、source?和?destination?和顯示在?destination?后面的沒有表頭的一列擴展條件共同組成匹配規則。當流量匹配這些規則后就會執行?target。
?分析iptables:
?
上圖展示k8s集群中nginx服務,cluster -ip? 是 10.1.125.152.對主機暴露了30978端口,對應了二個后端pod分別是10.244.0.10,10.244.0.9。
?1.iptables -t nat -L KUBE-SERVICES |egrep 'nginx'
?可以看到來自cluster -ip為 10.1.125.152的流量都會轉發到KUBE-SVC-27XJ54RMCFYE2CYL 鏈上處理,接下來看下KUBE-SVC-27XJ54RMCFYE2CYL上的規則。
2.?iptables -t nat -L KUBE-SVC-27XJ54RMCFYE2CYL
可以看到?KUBE-SVC-27XJ54RMCFYE2CYL 有二條規則,第一條是50%的概率到KUBE-SEP-VSD6RSQTLEBJCSMF上,匹配不到就會落到下面的那條規則。
3.查看那邊50%的概率到KUBE-SEP-VSD6RSQTLEBJCSMF。iptables -t nat -L KUBE-SEP-VSD6RSQTLEBJCSMF
?可以清晰看到上面的規則就會路由到一個pod上了。另一個也是一樣的規則只不過路由到另外一個pod上了,如下圖:
完!?
總結
以上是生活随笔為你收集整理的K8S kube-proxy- iptable模式实现原理分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 周六 第八章 iptable
- 下一篇: unity 调用 海康 网络摄像头 免费