多圖匯總梳理VPC與三種K8s網(wǎng)絡模型
1. 基礎和基石
1.1 TCP/IP協(xié)議棧和網(wǎng)絡棧
1.2 ?虛擬網(wǎng)卡數(shù)據(jù)接收流程
為了便于對比,它包含了兩種類型的網(wǎng)絡設備:一個物理網(wǎng)卡和veth虛擬網(wǎng)卡。數(shù)據(jù)流分為兩條線路:線路1和線路2。 線路1從物理網(wǎng)卡的數(shù)據(jù)接收開始,涉及到中斷處理流程和DMA。這一步的處理結(jié)果是網(wǎng)絡包被放進了與每個網(wǎng)卡相關(guān)的queue(RingBuffer)里面。 線路2從容器內(nèi)的進程在veth一端發(fā)送數(shù)據(jù)開始,它相對簡單很多,主要是單純的軟件調(diào)用,沒有硬件的介入。這一步的處理結(jié)果是skb被放入到了input_pkt_queue里。 無論是線路1還是線路2,它們都需要喚起ksoftirqd以便來處理skb,并提前將相應的網(wǎng)卡掛到per CPU的poll_list上。我們可以將poll_list想象成晾曬香腸的架子,而每個網(wǎng)絡設備則如同香腸一樣掛到架子上面等待ksoftirqd處理。 ksoftirqd扛起了網(wǎng)絡包處理的重擔。它從pull_list里找到要處理的網(wǎng)卡并從該網(wǎng)卡的queue里面拿到skb,然后沿著網(wǎng)絡設備子系統(tǒng) -> IP協(xié)議層 -> TCP層一路調(diào)用內(nèi)核里面的函數(shù)來分析和處理這個skb,最終將其放置到位于TCP層的socket接收隊列里。 這個處理過程包括iptables的處理、路由查詢、TCP協(xié)議處理等各種費時費力的工作。如圖1所示,這里的iptables、路由查詢等數(shù)據(jù)部分與每個network namespace相關(guān),宿主機OS上會有若干個network ns,但TCP/IP協(xié)議棧作為代碼部分卻是大家共享的。

2. VPC與Overlay

3. VPC與Underlay


4. VPC與host-gw
4.1 VPC與host-gw(Flannel)

4.2 VPC與host-gw(Calico)

評論
圖片
表情
