国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

探究K8S Service內(nèi)部iptables路由規(guī)則

894974231 / 3916人閱讀

摘要:當(dāng)通過(guò)訪問(wèn)應(yīng)用時(shí),流量經(jīng)由表中的規(guī)則鏈處理后,跳轉(zhuǎn)到子鏈,而此鏈包含了對(duì)具體處理的規(guī)則。再次防火墻規(guī)則,發(fā)現(xiàn)經(jīng)由的模塊,以方式均衡的分發(fā)流量,也即負(fù)載均衡模式為輪訓(xùn)。

前言

? 在K8S集群內(nèi)部,應(yīng)用常使用Service互訪,那么,了解Service技術(shù)優(yōu)缺點(diǎn)將有利于應(yīng)用規(guī)劃與部署,鑒于此,本文將通過(guò)簡(jiǎn)單案例以探索Cluster-Ip類(lèi)型Service服務(wù)的利弊。

? 為便于講解,我們先創(chuàng)建如下應(yīng)用及Service服務(wù):

# kubectl run --image=nginx nginx-web-1 --image-pull-policy="IfNotPresent"
# kubectl expose deployment nginx-web-1 --port=80 --target-port=80
Service探索

? 作者的K8S環(huán)境是1.9版本,其Service內(nèi)部服務(wù)由Kube-Proxy1提供,且默認(rèn)用iptables技術(shù)實(shí)現(xiàn),故本文探索K8S集群Service技術(shù),即研究iptablesK8S上的技術(shù)實(shí)現(xiàn)。

Service Route(服務(wù)路由)

? 如下可知,通過(guò)nginx-web-1服務(wù)可實(shí)際訪問(wèn)到后端pod

# nginx pod ip地址:
# kubectl describe pod nginx-web-1-fb8d45f5f-dcbtt | grep "IP"
IP:             10.129.1.22

# Service服務(wù),通過(guò)172.30.132.253:80則實(shí)際訪問(wèn)到10.129.1.22:80
# kubectl describe svc nginx-web-1 
...
Type:              ClusterIP
IP:                172.30.132.253
Port:                80/TCP
TargetPort:        80/TCP
Endpoints:         10.129.1.22:80
Session Affinity:  None
...

# 重置nginx web頁(yè)面:
# kubectl exec -it nginx-web-1-fb8d45f5f-dcbtt -- 
               sh -c "echo hello>/usr/share/nginx/html/index.html"

# curl 10.129.1.22
hello
# curl 172.30.132.253
hello

? Service服務(wù)分配的CLUSTER-IP以及監(jiān)聽(tīng)的端口均虛擬的,即在K8S集群節(jié)點(diǎn)上執(zhí)行ip anetstat -an命令均無(wú)法找到,其實(shí)際上,IPPort是由iptables配置在每K8S節(jié)點(diǎn)上的。在節(jié)點(diǎn)上執(zhí)行如下命令可找到此Service相關(guān)的iptables配置,簡(jiǎn)析如下:

當(dāng)通過(guò)Service服務(wù)IP:172.30.132.253:80訪問(wèn)時(shí),匹配第3條規(guī)則鏈(KUBE-SERVICES)后,跳轉(zhuǎn)到第4條子鏈(KUBE-SVC-...)上;

4條子鏈做簡(jiǎn)單注釋后,繼而跳轉(zhuǎn)到第1、2規(guī)則鏈(KUBE-SEP-...)上;

當(dāng)源Pod通過(guò)Service訪問(wèn)自身時(shí),匹配第1條規(guī)則,繼而跳轉(zhuǎn)到KUBE-MARK-MASQ鏈中;

匹配到第2條規(guī)則,此時(shí)通過(guò)DNAT被重定向到后端Pod:108.29.1.22:80

# iptables-save | grep nginx-web-1
-A KUBE-SEP-UWNFTKZFYWNNNTK7 -s 10.129.1.22/32 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-MARK-MASQ
-A KUBE-SEP-UWNFTKZFYWNNNTK7 -p tcp -m comment --comment "demo/nginx-web-1:" 
   -m tcp -j DNAT --to-destination 10.129.1.22:80
-A KUBE-SERVICES -d 172.30.132.253/32 -p tcp -m comment 
   --comment "demo/nginx-web-1: cluster IP" -m tcp --dport 80 -j KUBE-SVC-SNP24T7IBBNZDJ76
-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-SEP-UWNFTKZFYWNNNTK7

? 詳細(xì)分析iptables規(guī)則,執(zhí)行iptables-save命令可發(fā)現(xiàn)natPREROUTINGOUTPUT鏈中均有KUBE-SERVICES規(guī)則鏈,且處于第一順位。

*nat
-A PREROUTING -m comment --comment "kubernetes service portals" -j KUBE-SERVICES
-A OUTPUT -m comment --comment "kubernetes service portals" -j KUBE-SERVICES

當(dāng)通過(guò)Service訪問(wèn)應(yīng)用時(shí),流量經(jīng)由nat表中的PREROUTING規(guī)則鏈處理后,跳轉(zhuǎn)到KUBE-SERVICES子鏈,而此鏈包含了對(duì)具體Service處理的規(guī)則。如下所示,訪問(wèn)172.30.132.253:80將被跳轉(zhuǎn)到KUBE-SEP-...子規(guī)則鏈中。

-A KUBE-SERVICES -d 172.30.132.253/32 -p tcp -m comment 
   --comment "demo/nginx-web-1: cluster IP" -m tcp --dport 80 -j KUBE-SVC-SNP24T7IBBNZDJ76
-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-SEP-UWNFTKZFYWNNNTK7

? 如下所示,KUBE-SEP-...子鏈存在兩條規(guī)則:

1條規(guī)則:Pod通過(guò)Service訪問(wèn)自身時(shí)匹配,此規(guī)則僅作標(biāo)記(MARK)處理;

2條規(guī)則:通過(guò)DNAT重定向到后端Pod實(shí)例上,至此,通過(guò)Service最終將流量導(dǎo)向到后端實(shí)例上;

-A KUBE-SEP-UWNFTKZFYWNNNTK7 -s 10.129.1.22/32 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-MARK-MASQ
-A KUBE-SEP-UWNFTKZFYWNNNTK7 -p tcp -m comment --comment "demo/nginx-web-1:" 
   -m tcp -j DNAT --to-destination 10.129.1.22:80

-A KUBE-MARK-MASQ -j MARK --set-xmark 0x1/0x1
Loadbalance(負(fù)載均衡)

? 執(zhí)行如下命令將Deployment擴(kuò)展為3個(gè)Pod后,繼而再觀察Service負(fù)載均衡方面的技術(shù)或問(wèn)題。

# kubectl scale deploy/nginx-web-1 --replicas=3

? 再次dump防火墻規(guī)則,發(fā)現(xiàn)Service經(jīng)由iptablesstatistic模塊,以random方式均衡的分發(fā)流量,也即負(fù)載均衡模式為輪訓(xùn)

存在3DNATKUBE-MARK-MASQ規(guī)則,分別對(duì)應(yīng)3個(gè)后端Pod實(shí)地址;

KUBE-SERVICES鏈中存在3條子鏈,除最后一條KUBE-SVC-...子鏈外,其余子鏈?zhǔn)褂媚Kstatisticrandom模式做流量分割或負(fù)載均衡:第1KUBE-SVC-...應(yīng)用33%流量,第2KUBE-SVC-...規(guī)則應(yīng)用剩余的50%流量,第3KUBE-SVC-...規(guī)則應(yīng)用最后的流量。

# iptables-save | grep nginx-web-1
-A KUBE-SEP-BI762VOIAZZWU5S7 -s 10.129.1.27/32 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-MARK-MASQ
-A KUBE-SEP-BI762VOIAZZWU5S7 -p tcp -m comment --comment "demo/nginx-web-1:" 
   -m tcp -j DNAT --to-destination 10.129.1.27:80

-A KUBE-SEP-CDQIKEVSTA766BRK -s 10.129.1.28/32 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-MARK-MASQ
-A KUBE-SEP-CDQIKEVSTA766BRK -p tcp -m comment --comment "demo/nginx-web-1:" 
   -m tcp -j DNAT --to-destination 10.129.1.28:80

-A KUBE-SEP-W5HTO42ZVNHJQWBG -s 10.129.3.57/32 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-MARK-MASQ
-A KUBE-SEP-W5HTO42ZVNHJQWBG -p tcp -m comment --comment "demo/nginx-web-1:" 
   -m tcp -j DNAT --to-destination 10.129.3.57:80

-A KUBE-SERVICES -d 172.30.132.253/32 -p tcp -m comment 
   --comment "demo/nginx-web-1: cluster IP" -m tcp --dport 80 -j KUBE-SVC-SNP24T7IBBNZDJ76

-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-BI762VOIAZZWU5S7
-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-CDQIKEVSTA766BRK
-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-SEP-W5HTO42ZVNHJQWBG
Session Affinity(會(huì)話保持)

? 如下所示,調(diào)整Service服務(wù),打開(kāi)會(huì)話保持功能,并設(shè)置會(huì)話保持期限為3小時(shí)(PS:若不設(shè)置,則默認(rèn)是3小時(shí)):

# kubectl edit svc nginx-web-1
...
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
...

? 繼續(xù)觀察iptables實(shí)現(xiàn),發(fā)現(xiàn)在原有基礎(chǔ)上,iptables規(guī)則中添加了recent模塊,此模塊被用于會(huì)話保持功能,故kube-proxy通過(guò)在iptables中結(jié)合statisticrecent模塊,實(shí)現(xiàn)了Service的輪訓(xùn)負(fù)載均衡與會(huì)話保持功能。

通過(guò)Service服務(wù)訪問(wèn)應(yīng)用,封包進(jìn)入KUBE-SERVICES規(guī)則鏈,并跳轉(zhuǎn)到KUBE-SVC-...子鏈中;

KUBE-SVC-SNP...子鏈中,recent位于statistic模塊前,故而,有如下情況出現(xiàn):

當(dāng)客戶(hù)端第一次訪問(wèn)Service時(shí),KUBE-SVC-...子鏈中的規(guī)則(-m recent --rcheck --seconds 10800 --reap ...--rsource)池中未記錄客戶(hù)端地址,故封包匹配失敗,從而封包被后續(xù)的statistic模塊規(guī)則處理后,均衡分發(fā)到KUBE-SEP-...子鏈中,此鏈中使用recent模塊的--set參數(shù)將客戶(hù)源地址記錄到規(guī)則池后,DNAT到實(shí)際后端實(shí)例上;

KUBE-SVC-...子鏈中recent模塊配置了源地址記錄期限,若客戶(hù)端3--seconds 10800 --reap)小時(shí)內(nèi)未訪問(wèn)服務(wù),則recent規(guī)則池中的客戶(hù)端記錄將被移除,此時(shí)客戶(hù)端再次訪問(wèn)Service就如同第一次訪問(wèn)Service一樣;

當(dāng)客戶(hù)端在3小時(shí)內(nèi)再次訪問(wèn)Service時(shí),匹配KUBE-SVC-...子鏈中的recent模塊規(guī)則后,跳轉(zhuǎn)到KUBE-SEP子鏈,其規(guī)則中recent模塊--set參數(shù)將更新規(guī)則池中的Record TTL,而后DNAT到實(shí)際后端實(shí)例上;

# iptables-save | grep nginx-web-1
-A KUBE-SEP-BI762VOIAZZWU5S7 -s 10.129.1.27/32 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-MARK-MASQ
-A KUBE-SEP-BI762VOIAZZWU5S7 -p tcp -m comment --comment "demo/nginx-web-1:" 
   -m recent --set --name KUBE-SEP-BI762VOIAZZWU5S7 --mask 255.255.255.255 
   --rsource -m tcp -j DNAT --to-destination 10.129.1.27:80
# 省略2條類(lèi)似的KUBE-SEP規(guī)則
...

-A KUBE-SERVICES -d 172.30.132.253/32 -p tcp -m comment 
   --comment "demo/nginx-web-1: cluster IP" -m tcp --dport 80 -j KUBE-SVC-SNP24T7IBBNZDJ76

-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -m recent --rcheck --seconds 10800 --reap --name KUBE-SEP-BI762VOIAZZWU5S7 
   --mask 255.255.255.255 --rsource -j KUBE-SEP-BI762VOIAZZWU5S7
# 省略2條類(lèi)似的KUBE-SVC規(guī)則
...

-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-BI762VOIAZZWU5S7
-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-CDQIKEVSTA766BRK
-A KUBE-SVC-SNP24T7IBBNZDJ76 -m comment --comment "demo/nginx-web-1:" 
   -j KUBE-SEP-W5HTO42ZVNHJQWBG
總結(jié)

? K8S中的Service服務(wù)可提供負(fù)載均衡及會(huì)話保持功能,其通過(guò)Linux內(nèi)核netfilter模塊來(lái)配置iptables實(shí)現(xiàn),網(wǎng)絡(luò)封包在內(nèi)核中流轉(zhuǎn),且規(guī)則匹配很少,故效率非常高;而Service負(fù)載均衡分發(fā)比較薄弱,其通過(guò)statisticrandom規(guī)則實(shí)現(xiàn)輪訓(xùn)分發(fā),無(wú)法實(shí)現(xiàn)復(fù)雜的如最小鏈接分發(fā)方式,鑒于此,K8S 1.9后續(xù)版本調(diào)整了kube-proxy服務(wù),其可通過(guò)ipvs實(shí)現(xiàn)Service負(fù)載均衡功能。


  • K8S 1.9版本可使用kube-router替換kube-proxy,且可使用ipvs替換iptables來(lái)實(shí)現(xiàn)service服務(wù)。 ?

  • 文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/33179.html

    相關(guān)文章

    • 探究K8S Service內(nèi)部iptables路由規(guī)則

      摘要:當(dāng)通過(guò)訪問(wèn)應(yīng)用時(shí),流量經(jīng)由表中的規(guī)則鏈處理后,跳轉(zhuǎn)到子鏈,而此鏈包含了對(duì)具體處理的規(guī)則。再次防火墻規(guī)則,發(fā)現(xiàn)經(jīng)由的模塊,以方式均衡的分發(fā)流量,也即負(fù)載均衡模式為輪訓(xùn)。 前言 ? 在K8S集群內(nèi)部,應(yīng)用常使用Service互訪,那么,了解Service技術(shù)優(yōu)缺點(diǎn)將有利于應(yīng)用規(guī)劃與部署,鑒于此,本文將通過(guò)簡(jiǎn)單案例以探索Cluster-Ip類(lèi)型Service服務(wù)的利弊。 ? 為便...

      nemo 評(píng)論0 收藏0
    • Kubernetes Service詳解

      摘要:后端代理之前的文章部署最后的測(cè)試部分,創(chuàng)建了一組及服務(wù)來(lái)驗(yàn)證業(yè)務(wù),繼續(xù)以這個(gè)例子來(lái)說(shuō)明集群中已經(jīng)有如下一組都帶有標(biāo)簽,對(duì)外暴露端口,訪問(wèn)路徑會(huì)返回主機(jī)名。請(qǐng)求代理轉(zhuǎn)發(fā)是一個(gè)虛擬的地址,并不是某張網(wǎng)卡的真實(shí)地址。 為什么需要service Kubernetes可以方便的為容器應(yīng)用提供了一個(gè)持續(xù)運(yùn)行且方便擴(kuò)展的環(huán)境,但是,應(yīng)用最終是要被用戶(hù)或其他應(yīng)用訪問(wèn)、調(diào)用的。要訪問(wèn)應(yīng)用pod,就會(huì)有以...

      baukh789 評(píng)論0 收藏0
    • 如何在Kubernetes中暴露服務(wù)訪問(wèn)

      摘要:中暴露服務(wù)訪問(wèn)自己實(shí)現(xiàn)了一個(gè),它本質(zhì)上是包裝了,在真正創(chuàng)建負(fù)載均衡器上它會(huì)調(diào)用來(lái)創(chuàng)建自身的。 Kubernetes概述 最近的一年,kubernetes的發(fā)展如此閃耀,正被越來(lái)越多的公司采納用于生產(chǎn)環(huán)境的實(shí)踐。同時(shí),我們可以在最著名的開(kāi)發(fā)者問(wèn)答社區(qū)StackOverflow上看到k8s的問(wèn)題數(shù)量的增長(zhǎng)曲線(2015.5-2016.5),開(kāi)發(fā)者是用腳投票的,從這一點(diǎn)看也無(wú)疑證明了k8s的...

      wendux 評(píng)論0 收藏0
    • 如何在Kubernetes中暴露服務(wù)訪問(wèn)

      摘要:中暴露服務(wù)訪問(wèn)自己實(shí)現(xiàn)了一個(gè),它本質(zhì)上是包裝了,在真正創(chuàng)建負(fù)載均衡器上它會(huì)調(diào)用來(lái)創(chuàng)建自身的。 Kubernetes概述 最近的一年,kubernetes的發(fā)展如此閃耀,正被越來(lái)越多的公司采納用于生產(chǎn)環(huán)境的實(shí)踐。同時(shí),我們可以在最著名的開(kāi)發(fā)者問(wèn)答社區(qū)StackOverflow上看到k8s的問(wèn)題數(shù)量的增長(zhǎng)曲線(2015.5-2016.5),開(kāi)發(fā)者是用腳投票的,從這一點(diǎn)看也無(wú)疑證明了k8s的...

      Lin_R 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    最新活動(dòng)
    閱讀需要支付1元查看
    <