天天看點

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

作者:熱愛程式設計的通信人

書籍來源:《Kubernetes網絡權威指南:基礎、原理與實踐》

一邊學習一邊整理讀書筆記,并與大家分享,侵權即删,謝謝支援!

附上彙總貼:《Kubernetes網絡權威指南》讀書筆記 | 彙總_COCOgsta的部落格-CSDN部落格

顧名思義,Linux bridge就是Linux系統中的網橋,但是Linux bridge的行為更像是一台虛拟的網絡交換機,任意的真實實體裝置(例如eth0)和虛拟裝置(例如,前面講到的veth pair和後面即将介紹的tap裝置)都可以連接配接到Linux bridge上。

Linux bridge有多個端口,資料可以從任何端口進來,進來之後從哪個口出去取決于目的MAC位址,原理和實體交換機差不多。

1.3.1Linuxbridge初體驗

用iproute2軟體包裡的ip指令建立一個bridge:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

或使用bridge-utils軟體包裡的brctl工具管理網橋,例如建立一個網橋:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

剛建立一個bridge時,其實沒有任何實際功能,如圖1-4所示。

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

圖1-4 獨立的bridge裝置示意圖

建立一對veth裝置,并配置IP位址:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

将veth0連接配接到br0上:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

添加一個裝置到網橋上:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

對接後,檢視目前網橋上都有哪些網絡裝置:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

或使用brctl指令顯示目前存在的網橋及其所連接配接的網絡端口:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

執行完以上指令後,連接配接veth pair的bridge裝置的網絡拓撲如圖1-5所示。

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

圖1-5 連接配接veth pair的bridge裝置的網絡拓撲

br0和veth0相連之後發生了如下變化:

  • br0和veth0之間連接配接起來了,并且是雙向的通道;
  • 協定棧和veth0之間變成了單通道,協定棧能發資料給veth0,但veth0從外面收到的資料不會轉發給協定棧;
  • br0的MAC位址變成了veth0的MAC位址。

這就好比Linux bridge在veth0和協定棧之間做了一次攔截,将veth0本來要轉發給協定棧的資料攔截,全部轉發給bridge。

1.3.2 把IP讓給Linuxbridge

通過上面的分析可以看出,給veth0配置IP沒有意義。這裡我們就把veth0的IP位址“讓給”Linux bridge:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

于是,綁定IP位址的bridge裝置的網絡拓撲如圖1-6所示。

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

圖1-6 綁定IP位址的bridge裝置的網絡拓撲

圖1-6将協定棧和veth0之間的聯系去掉了,veth0相當于一根網線。

這時,再通過br0 ping veth1,結果成功收到了ICMP的回程封包:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

1.3.3 将實體網卡添加到Linuxbridge

将主機上的實體網卡eth0添加到Linux bridge:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

通過br0 ping網關成功:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

通過veth1 ping網關成功:

将eth0上的IP删除:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

通過eth0 ping網關成功:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

檢視主機路由表:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

eth0的IP被删除後,預設路由不見了,需要手動将預設網關加回來。

添加預設網關:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

ping外網成功:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

經過上面一系列的操作,将實體網卡添加到bridge裝置的網絡拓撲如圖1-7所示。

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

圖1-7 将實體網卡添加到bridge裝置的網絡拓撲

1.3.4 Linuxbridge在網絡虛拟化中的應用

下面将通過Linux bridge的兩種常見的部署方式說明其在現代網絡虛拟化技術中的地位。

  1. 虛拟機

虛拟機通過tun/tap或者其他類似的虛拟網絡裝置,将虛拟機内的網卡同br0連接配接起來,這樣就達到和真實交換機一樣的效果,如圖1-8所示。如果有多個虛拟機,那麼這些虛拟機通過tun/tap裝置連接配接到網橋。

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

圖1-8 Linux bridge在虛拟機中的應用

  1. 容器

Linux bridge在容器場景的組網和上面的虛拟機場景差不多,但也存在一些差別。例如,容器使用的是veth pair裝置,容器和實體網絡不在同一個網段内。Linux bridge在容器中的應用如圖1-9所示。

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

圖1-9 Linux bridge在容器中的應用

1.3.5 網絡接口的混雜模式

網絡接口的混雜模式在Kubernetes網絡也有應用。

混雜模式(Promiscuous mode),簡稱Promisc mode,俗稱“監聽模式”。在非混雜模式下,網卡隻會接收目的MAC位址是它自己的單點傳播幀,以及多點傳播及廣播幀;在混雜模式下,網卡會接收經過它的所有幀!

我們可以使用ifconfig或者netstat -i指令檢視一個網卡是否開啟了混雜模式。

  • ifconfig eth0,檢視eth0的配置,包括混雜模式。當輸出包含PROMISC時,表明該網絡接口處于混雜模式。
《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

啟用網卡的混雜模式,可以使用下面這條指令:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

使網卡退出混雜模式,可以使用下面這條指令:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

将網絡裝置加入Linux bridge後,會自動進入混雜模式。

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge

網絡裝置離開Linux bridge後,會自動退出混雜模式,如下所示:

《Kubernetes網絡權威指南》讀書筆記 | 連接配接你我他:Linux bridge