作者:餘凱
前言
近幾年,企業基礎設施雲原生化的趨勢越來越強烈,從最開始的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