全景剖析阿里雲容器網絡數據鏈路(七):Terway DataPath V2(Terway≥1.8.0)

作者:餘凱

前言

近幾年,企業基礎設施雲原生化的趨勢越來越強烈,從最開始的IaaS化到現在的微服務化,客戶的顆粒度精細化和可觀測性的需求更加強烈。容器網絡爲了滿足客戶更高性能和更高的密度,也一直在高速的發展和演進中,這必然對客戶對雲原生網絡的可觀測性帶來了極高的門檻和挑戰。爲了提高雲原生網絡的可觀測性,同時便於客戶和前後線同學增加對業務鏈路的可讀性,ACK產研和AES聯合共建,梳理雲原生網絡數據面可觀測性系列,幫助客戶和前後線同學瞭解雲原生網絡架構體系,簡化對雲原生網絡的可觀測性的門檻,優化客戶運維和售後同學處理疑難問題的體驗 ,提高雲原生網絡的鏈路的穩定性。

鳥瞰容器網絡,整個容器網絡可以分爲三個部分:Pod網段,Service網段和Node網段。這三個網絡要實現互聯互通和訪問控制,那麼實現的技術原理是什麼?整個鏈路又是什麼,限制又是什麼呢?Flannel,Terway有啥區別?不同模式下網絡性能如何?這些,需要客戶在下搭建容器之前,就要依據自己的業務場景進行選擇,而搭建完畢後,相關的架構又是無法轉變,所以客戶需要對每種架構特點要有充分了解。比如下圖是個簡圖,Pod網絡既要實現同一個ECS的Pod間的網絡互通和控制,又要實現不同ECS Pod間的訪問,Pod訪問SVC 的後端可能在同一個ECS也可能是其他ECS,這些在不同模式下,數據鏈轉發模式是不同的,從業務側表現結果也是不一樣的。

本文是[全景剖析容器網絡數據鏈路]第七部分,主要介紹Kubernetes Terway DataPath V2模式下,數據面鏈路的轉發鏈路,一是通過了解不同場景下的數據面轉發鏈路,從而探知客戶在不同的場景下訪問鏈路的數據面表現,幫助客戶進一步優化業務架構;另一方面,通過深入瞭解轉發鏈路,從而在遇到容器網絡抖動時候,客戶運維以及阿里雲同學可以知道在哪些鏈路點進行部署觀測手動,從而進一步定界問題方向和原因。

系列一:全景剖析阿里雲容器網絡數據鏈路(一)—— Flannel

系列二:全景剖析阿里雲容器網絡數據鏈路(二)—— Terway ENI

系列三:全景剖析阿里雲容器網絡數據鏈路(三)—— Terway ENIIP

系列四:全景剖析阿里雲容器網絡數據鏈路(四)—— Terway IPVLAN+EBPF

系列五:全景剖析阿里雲容器網絡數據鏈路(五)—— Terway ENI-Trunking

系列六:全景剖析阿里雲容器網絡數據鏈路(六)—— ASM Istio 

Terway DataPath V2 模式架構設計

彈性網卡(ENI)支持配置多個輔助IP的功能,單個彈性網卡(ENI)根據實例規格可以分配6~20個輔助IP,ENI多IP模式就是利用了這個輔助IP分配給容器,從而大幅提高了Pod部署的規模和密度。在網絡聯通的方式上,Terway目前支持veth pair策略路由和IPVLAN兩種方案,但是社區在cilium v1.12版本後廢棄了IPVLAN的支持 [ 1] ,爲了統一數據面一致性,將ACK的數據面演進和社區保持一致,便於雲原生的能力集成,減少差異化。從v1.8.0開始,Terway不再支持IPvlan隧道加速,而採用DataPath V2的方式進行數據面的統一。

Pod所使用的CIDR網段和節點的CIDR是同一個網段。

Pod內部有一張網卡eth0,其中eth0的IP就是Pod的IP,此網卡的MAC地址和控制檯上的ENI的MAC地址不一致,同時ECS上有多張ethx的網卡,說明ENI附屬網卡並不是直接掛載到了Pod的網絡命名空間。

Pod內只有指向eth0的默認路由,說明Pod訪問任何地址段都是從eth0爲統一的出入口。

同時ECS上有多張ethx的網卡,說明ENI附屬網卡並不是直接掛載到了Pod的網絡命名空間。

通過OS Linux Routing可以得到,所有目的是Pod IP的流量都會被轉發到Pod對應的calixx虛擬往卡上。因此,ECS OS和Pod的網絡命名空間已經建立好完整的出入鏈路配置了。

對於ENI多IP的實現,這個類似於ACK容器網絡數據鏈路(Terway ENIIP) [ 2] 原理,Terway Pod是通過Daemonset的方式部署在每個節點上的。通過terway-cli mapping命令可以得到節點上的附屬ENI數量、MAC地址以及每個ENI上的IP。

對於Pod訪問SVC,容器是利用各種辦法將請求轉發到Pod所在的ECS層面,由ECS內的netfilter模塊來實現SVC IP的解析。但是由於數據鏈路需要從Pod的網絡命名空間切換到ECS的OS的網絡命名空間,中間經過了對此內核協議棧,必然會產生性能損失,如果對高併發和高性能有機制追求,可能並不完全滿足客戶的需求。相比較IPVLAN模式將eBPF部署在Pod內部用於SVC地址轉換,DataPath V2模式的eBPF監聽在每個Pod的calixxx網卡上,用於實現Pod和Pod訪問的加速,以及Pod訪問SVC IP的地址轉後的鏈路加速,模式比較可以參考使用Terway網絡插件 [ 3]

BPF Routing

5.10 內核以後,Cilium 新增了 eBPF Host-Routing 功能,新增了bpf_redirect_peer和bpf_redirect_neigh兩個redirect方式。

  • bpf_redirect_peer

    數據包不經過宿主機的lxc接口,直接被送到veth pair Pod裏面接口eth0上,實現數據包少進入一次cpu backlog queue隊列,獲得更好的轉發性能。

  • bpf_redirect_neigh

    用來填充pod egress流量的src和dst mac地址,流量無需經過kernel的route協議棧處理過程。

故Terway DataPath V2模式總體可以歸納爲:

  • 目前低版本內核(低於4.2)不支持eBPF加速,Aliyun2可獲得部分加速能力,Aliyun3可獲得完整的加速能力。
  • 節點訪問Pod需要經過Host的協議棧,Pod和Pod間訪問以及Pod訪問SVC不經過Host的協議棧。
  • DataPath V2模式下,如果Pod訪問SVC IP,SVC IP在Pod的veth pair calixxx網卡上被eBPF轉爲某個SVC後端Pod的IP,之後數據鏈路繞過Host協議棧。也就是說SVC IP只會在源端Pod的veth pair被捕獲,目的端Pod和目的端的Pod所在ECS都無法被捕獲到。

Terway DataPath V2 模式容器網絡數據鏈路剖析

針對容器網絡特點,可以將Terway datapathv2模式下的網絡鏈路大體分爲以Pod IP對外提供服務和以SVC對外提供服務兩個大的SOP場景,進一步細分,可以歸納爲11個不同的小的SOP場景。

對這15個場景的數據鏈路梳理合並,這些場景可以總結爲下面8類典型的場景:

  • 訪問Pod IP,同節點訪問Pod
  • 訪問Pod IP,同節點Pod間互訪(Pod屬於同ENI)
  • 訪問Pod IP,同節點Pod間互訪(Pod屬於不同ENI)
  • 訪問Pod IP,不同節點間Pod之間互訪
  • 集羣內Pod訪問的SVC Cluster IP/External IP,SVC後端Pod和客戶端Pod屬同ECS同ENI
  • 集羣內Pod訪問的SVC Cluster IP/External IP,SVC後端Pod和客戶端Pod屬同ECS不同ENI
  • 集羣內Pod訪問的SVC Cluster IP/External IP,SVC後端Pod和客戶端Pod屬於不同ECS
  • 集羣外訪問SVC External IP

場景一:訪問Pod IP,同節點訪問Pod(含節點訪問後端爲同一節點的SVC ClusterIP)

環境

xxx.10.0.1.219節點上存在nginx2-7ff4679659-xkpmm,IP地址10.0.0.2。

內核路由

nginx2-7ff4679659-xkpmm,IP地址10.0.0.2,該容器在宿主機中的PID是5630,容器網絡命名空間有指向容器eth0的默認路由。

該容器eth0在ECS OS 內對應veth pair是cali10e985649a0,在ECS OS內,有指向Pod IP,下一跳爲calixxx的路由,通過前文可以知道calixxx網卡是和每個Pod內的veth1組成的pair。

通過下面的命令我們可以獲取到nginx2-7ff4679659-xkpmm,IP地址10.0.0.2被terway分配到了eth2附屬網卡。

kubectl --kubeconfig kubeconfig -n kube-system exec -it terway-eniip-v5v2p -c terway -- terway-cli mapping

小結

ECS的eth0捕獲了從nginx2-7ff4679659-xkpmm返回的數據,但是沒有捕獲發送數據。

ECS的eth1同樣也捕獲了從nginx2-7ff4679659-xkpmm返回的數據,但是沒有捕獲發送數據。

cali10e985649a0可以捕獲發和收的數據包。

後續小結不再展示數據報文觀測。

數據鏈路轉發示意圖(Aliyun2&Aliyun3):

  • 整個鏈路是經過了ECS和Pod的網絡協議棧。
  • 整個請求鏈路是:ECS OS -> calixxx -> ECS Pod eth0

場景二:訪問Pod IP,同節點Pod間互訪(Pod屬於同ENI)

環境

xxx.10.0.1.219節點上存在nginx2-7ff4679659-xkpmm,IP地址10.0.0.2和centos-5bf8644bcf-jqxpk,IP地址10.0.0.13。

內核路由

centos-5bf8644bcf-jqxpk,IP地址10.0.0.13,該容器在宿主機中的PID是126938,容器網絡命名空間有指向容器eth0的默認路由。

該容器eth0在ECS OS 內對應veth pair是calia7003b8c36c,在ECS OS內,有指向Pod IP,下一跳爲calixxx的路由,通過前文可以知道calixxx網卡是和每個Pod內的veth1組成的pair。

nginx2-7ff4679659-xkpmm,IP地址10.0.0.2,該容器在宿主機中的PID是5630,容器網絡命名空間有指向容器eth0的默認路由。

該容器eth0在ECS OS 內對應veth pair是cali10e985649a0,在ECS OS內,有指向Pod IP,下一跳爲calixxx的路由,通過前文可以知道calixxx網卡是和每個Pod內的veth1組成的pair。

通過下面的命令我們可以獲取到nginx2-7ff4679659-xkpmm和centos-5bf8644bcf-jqxpk都被terway分配到了eth2同一張附屬網卡。

kubectl --kubeconfig kubeconfig -n kube-system exec -it terway-eniip-v5v2p -c terway -- terway-cli mapping

小結

Aliyun2:

  • 不會經過分配給Pod的附屬網卡。
  • 整個鏈路是經過了Pod的網絡協議棧,鏈路由Pod的網絡命名空間轉發到對端時候,會經過eBPF加速繞過OS協議棧。
  • 整個請求鏈路是:ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2。

Aliyun3:

  • 不會經過分配給Pod的附屬網卡。
  • 整個鏈路會在eBPF的ingress被直接加速到目的Pod內,不會經過目的Pod的calixxx網卡。
  • 整個請求鏈路是:
  • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
  • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

場景三:訪問Pod IP,同節點Pod間互訪(Pod屬於不同ENI)

環境

xxx.10.0.1.219節點上存在ngxin3-55f5c67988-p4qnb和centos-5bf8644bcf-jqxpk兩個Pod,IP地址分別爲10.0.0.251和10.0.0.13。

此節點的terway Pod,利用terway-cli mapping的命令得到這兩個IP(10.0.0.251和10.0.0.13)都屬於不同ENI網卡,在OS層面是被認爲是eth1和eth2。

內核路由

centos-5bf8644bcf-jqxpk,IP地址10.0.0.13,該容器在宿主機中的PID是126938,容器網絡命名空間有指向容器eth0的默認路由。

該容器eth0在ECS OS 內對應veth pair是calia7003b8c36c,在ECS OS內,有指向Pod IP,下一跳爲calixxx的路由,通過前文可以知道calixxx網卡是和每個Pod內的veth1組成的pair。

ngxin3-55f5c67988-p4qnb,IP地址10.0.0.251,該容器在宿主機中的PID是5630,容器網絡命名空間有指向容器eth0的默認路由。

該容器eth0在ECS OS 內對應veth pair是cali08203025d22,在ECS OS內,有指向Pod IP,下一跳爲calixxx的路由,通過前文可以知道calixxx網卡是和每個Pod內的veth1組成的pair。

小結

Aliyun2:

  • 不會經過分配給Pod的附屬網卡。
  • 整個鏈路是經過了Pod的網絡協議棧,鏈路由Pod的網絡命名空間轉發到對端時候,會經過eBPF加速繞過OS協議棧
  • 整個請求鏈路是:ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2。

Aliyun3:

  • 不會經過分配給Pod的附屬網卡。
  • 整個鏈路會在eBPF的ingress被直接加速到目的Pod內,不會經過目的Pod的calixxx網卡。
  • 整個請求鏈路是:
    • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
    • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

場景四:訪問Pod IP,不同節點間Pod之間互訪

環境

xxx.10.0.1.219節點上存在centos-5bf8644bcf-jqxpk,IP地址爲10.0.0.13。

xxx.10.0.5.27節點上存在nginx1-7bcf4ffdb4-6rsqz,IP地址爲10.0.4.121。

可以利用terway-cli show factory的命令得到centos-5bf8644bcf-jqxpk的IP 10.0.0.13屬於xxx.10.0.1.219上的MAC地址爲00:16:3e:0d:74:23的ENI網卡。

同理可得到nginx1-7bcf4ffdb4-6rsqz的IP 10.0.4.121屬於xxx.10.0.5.27上的MAC地址爲00:16:3e:0c:ef:6c的ENI網卡。

內核路由

centos-5bf8644bcf-jqxpk,IP地址10.0.0.13,該容器在宿主機中的PID是126938,容器網絡命名空間有指向容器eth0的默認路由。

該容器eth0在ECS OS 內對應veth pair是calia7003b8c36c,在ECS OS內,有指向Pod IP,下一跳爲calixxx的路由,通過前文可以知道calixxx網卡是和每個Pod內的veth1組成的pair。

nginx1-7bcf4ffdb4-6rsqz,IP地址10.0.4.121,該容器在宿主機中的PID是7745,容器網絡命名空間有指向容器eth0的默認路由。

該容器eth0在ECS OS 內對應veth pair是cali06cd16bb25f,在ECS OS內,有指向Pod IP,下一跳爲calixxx的路由,通過前文可以知道calixxx網卡是和每個Pod內的veth1組成的pair。

小結

Aliyun2:

  • 會經過宿主機OS的網絡命名空間,但協議棧鏈路會被eBPF加速。
  • 整個鏈路是需要從客戶端Pod所屬的ENI網卡出ECS再從目的Pod所屬的ENI網卡進入ECS。
  • 整個請求鏈路是ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2 calixxx -> ECS2 Pod2。

Aliyun3:

  • 整個鏈路是需要從客戶端Pod所屬的ENI網卡出發,再經過ECS再從目的Pod所屬的ENI網卡進入ECS。
  • 整個請求鏈路是:
    • 去方向:ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2。
    • 回方向:ECS2 Pod2 -> ECS2 Pod2 calixxx -> ECS2 ENI ethx -> VPC -> ECS1 ENI ethx -> ECS1 Pod1。

場景五:集羣內Pod訪問的SVC Cluster IP/External IP,SVC後端Pod和客戶端Pod屬同ECS同ENI

環境

xxx.10.0.1.219節點上存在nginx2-7ff4679659-xkpmm,IP地址10.0.0.2和centos-5bf8644bcf-jqxpk,IP地址10.0.0.13。

其中nginx2-7ff4679659-xkpmm Pod是SVC nginx2的endpoint。

內核路由

內核路由類似場景2,此處不再敘述。

關於eBPF,在datapathv2中,eBPF監聽在OS層面的calixxx網卡上,而非Pod內部。利用cilium去調用eBPF的能力,可以通過圖示命令可以得到centos-5bf8644bcf-jqxpk和nginx2-7ff4679659-xkpmm identity ID分別是693和2702。

找到Pod所在的ECS的Terway Pod爲terway-eniip-v5v2p,在Terway Pod中運行cilium bpf lb list | grep -A5 192.168.152.119命令可以得到eBPF中對於Cluster IP 192.168.152.119:80記錄的後端是10.0.0.2:80。

小結

從客戶端Pod centos-5bf8644bcf-jqxpk訪問SVC。

客戶端的centos-6c48766848-znkl8的calia7003b8c36c網卡觀測,可以捕獲SVC的IP和客戶端的Pod IP。

在這個Pod centos-6c48766848-znkl8所屬的附屬網卡ENI上觀測,未能捕獲任何相關流量報文,說明流量從客戶端的所屬的calixx網卡到ENI之間經過了eBPF轉換。

在Pod nginx2-7ff4679659-xkpmmI的cali10e985649a0觀測,只能捕獲centos和nginx的Pod IP。

cilium提供了一個monitor的功能,使用cilium monitor --related-to < endpoint ID > ,可以得到:源端Pod IP訪問SVC IP 192.168.152.119,之後被解析到SVC的後端Pod IP 10.0.0.2,說明SVC IP直接在tc層做了轉發。

Aliyun2:

  • 整個鏈路是經過了Pod的網絡協議棧,鏈路由Pod的網絡命名空間轉發到對端時候,會經過eBPF加速繞過OS協議棧。
  • 整個鏈路請求未經過Pod所分配的ENI。
  • SVC IP在客戶端Pod的calixxx網卡通過eBPF轉換成了SVC後端Pod的IP,後續節點無法捕獲SVC IP。
  • 整個請求鏈路是:ECS Pod1 -> Pod1 calixxx -> Pod2 calixxx -> ECS Pod2。

Aliyun3:

  • 整個鏈路是經過了Pod的網絡協議棧,鏈路由Pod的網絡命名空間轉發到對端時候,會經過eBPF加速繞過OS協議棧。

  • 整個鏈路請求未經過Pod所分配的ENI。

  • SVC IP在客戶端Pod的calixxx網卡通過eBPF轉換成了SVC後端Pod的IP,後續節點無法捕獲SVC IP。

  • 整個鏈路會在eBPF的ingress被直接加速到目的Pod內,不會經過目的Pod的calixxx網卡。

  • 整個請求鏈路是:

    • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
    • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

場景六:集羣內Pod訪問的SVC Cluster IP/External IP,SVC後端Pod和客戶端Pod屬同ECS不同ENI

環境

xxx.10.0.1.219節點上存在ngxin3-55f5c67988-p4qnb,IP地址10.0.0.251和centos-5bf8644bcf-jqxpk,IP地址10.0.0.13。

其中ngxin3-55f5c67988-p4qnb Pod是SVC nginx3的endpoint。

內核路由

內核路由類似場景3,此處不再敘述。

關於eBPF,在datapathv2中,eBPF監聽在OS層面的calixxx網卡上,而非Pod內部。利用cilium去調用eBPF的能力,可以通過圖示命令可以得到centos-5bf8644bcf-jqxpk和ngxin3-55f5c67988-p4qnb identity ID分別是693和94。

找到Pod所在的ECS的Terway Pod爲terway-eniip-v5v2p,在Terway Pod中運行cilium bpf lb list | grep -A5 192.168.239.183命令可以得到eBPF中對於Cluster IP 192.168.239.183:80記錄的後端是10.0.0.2:80。

小結

從客戶端Pod centos-5bf8644bcf-jqxpk訪問SVC。

客戶端的centos-6c48766848-znkl8的calia7003b8c36c網卡觀測,可以捕獲SVC的IP和客戶端的Pod IP。

在Pod centos-6c48766848-znkl8所屬的附屬網卡ENI和ngxin3-55f5c67988-p4qnb所屬的附屬網卡ENI上觀測,未能捕獲到相關流量,說明流量從客戶端的所屬的calixx網卡上被eBPF轉換成SVC相關的endpoint後直接被短路到目的calixxx網卡。

在Pod ngxin3-55f5c67988-p4qnb所屬的cali08203025d22觀測,只能捕獲centos和nginx的Pod IP。

cilium提供了一個monitor的功能,使用cilium monitor --related-to < endpoint ID >,可以得到:源端Pod IP訪問SVC IP 192.168.239.183,之後被解析到SVC的後端Pod IP 110.0.0.251,說明SVC IP直接在tc層做了轉發。

後續小節如果涉及SVC IP的訪問,如有類似,不再做詳細的說明。

Aliyun2:

  • 會經過宿主機OS的網絡命名空間,但協議棧鏈路會被eBPF加速。
  • 整個鏈路請求未經過Pod所分配的ENI。
  • SVC IP在客戶端Pod的calixxx網卡通過eBPF轉換成了SVC後端Pod的IP,後續節點無法捕獲SVC IP。
  • 整個請求鏈路是ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS2 Pod2 calixxx -> ECS2 Pod2。

Aliyun3:

  • 不會經過分配給Pod的附屬網卡。
  • 整個鏈路會在eBPF的ingress被直接加速到目的Pod內,不會經過目的Pod的calixxx網卡。
  • SVC IP在客戶端Pod的calixxx網卡通過eBPF轉換成了SVC後端Pod的IP,後續節點無法捕獲SVC IP。
  • 整個請求鏈路是:
  • 去方向:ECS Pod1 -> Pod1 calixxx -> ECS Pod2。
  • 回方向:ECS Pod2 -> Pod2 calixxx -> ECS Pod1。

場景七:集羣內Pod訪問的SVC Cluster IP/External IP,SVC後端Pod和客戶端Pod屬於不同ECS

環境

xxx.10.0.1.219節點上存在centos-5bf8644bcf-jqxpk,IP地址爲10.0.0.13。

xxx.10.0.5.27節點上存在nginx1-7bcf4ffdb4-6rsqz,IP地址爲10.0.4.121。

其中nginx1-7bcf4ffdb4-6rsqz Pod是SVC nginx1的endpoint。

內核路由

Pod訪問SVC的Cluster IP,而SVC的後端Pod和客戶端Pod部署在不同ECS上,此架構和場景四:不同節點間Pod之間互訪 [ 4] 小節相似,只不過此場景是Pod訪問SVC的Cluster IP。對於Cluster IP的eBPF轉發進行描述,詳情請見場景五和場景六。

小結

Aliyun2:

  • 會經過宿主機OS的網絡命名空間,但協議棧鏈路會被eBPF加速。
  • 整個鏈路是需要從客戶端Pod所屬的ENI網卡出ECS再從目的Pod所屬的ENI網卡進入ECS。
  • 整個請求鏈路是ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2 calixxx -> ECS2 Pod2。

Aliyun3:

  • 整個鏈路是需要從客戶端Pod所屬的ENI網卡出發,再經過ECS再從目的Pod所屬的ENI網卡進入ECS。
  • 整個請求鏈路是:
    • 去方向:ECS1 Pod1 -> ECS1 Pod1 calixxx -> ECS1 ENI ethx -> VPC -> ECS2 ENI ethx -> ECS2 Pod2。
    • 回方向:ECS2 Pod2 -> ECS2 Pod2 calixxx -> ECS2 ENI ethx -> VPC -> ECS1 ENI ethx -> ECS1 Pod1。

場景八:集羣外訪問SVC External IP

環境

xxx.10.0.5.27 節點上存在nginx1-7bcf4ffdb4-6rsqz,IP地址爲10.0.4.121。

通過describe SVC可以得到nginx Pod被加入到了SVC nginx的後端。SVC的Cluster IP是192.168.190.78。

內核路由

在SLB控制檯,可以得到lb-3nsj50u4gyz623nitxxx虛擬服務器組的後端服務器組是兩個後端nginx Pod的ENI eni-j6cgs979ky3evxxx。

從集羣外部角度看,SLB的後端虛擬服務器組是SVC的後端Pod所屬的ENI網卡,內網的IP地址就是Pod的地址。

小結

Aliyun2:

  • ExternalTrafficPolicy爲Local或Cluster模式下,SLB只會將Pod分配的ENI掛載到SLB的虛擬服務器組。
  • 數據鏈路會經過Pod的Veth的calixxx網卡
  • 數據鏈路:Client -> SLB -> Pod ENI + Pod Port -> ECS1 Pod1 calixxx -> ECS1 Pod1 eth0。

Aliyun3:

  • ExternalTrafficPolicy爲Local或Cluster模式下,SLB只會將Pod分配的ENI掛載到SLB的虛擬服務器組。
  • 數據鏈路會被ECS的附屬網卡上eBPF加速繞過Pod的Veth的calixxx網卡,直接進到Pod的網絡命名空間。
  • 數據鏈路:Client -> SLB -> Pod ENI + Pod Port -> ECS1 Pod1 eth0。

相關鏈接:

[1] 廢棄了IPVLAN的支持

https://docs.cilium.io/en/v1.12/operations/upgrade/#deprecated-options

[2] ACK容器網絡數據鏈路(Terway ENIIP)

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ack-network-fabric-terway-eniip

[3] 使用Terway網絡插件

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/work-with-terway

[4] 不同節點間Pod之間互訪https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ack-network-fabric-terway-eni-trunking#RS9Nc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章