書籍來源:《Kubernetes網絡權威指南:基礎、原理與實踐》
一邊學習一邊整理讀書筆記,并與大家分享,侵權即删,謝謝支援!
附上彙總貼:《Kubernetes網絡權威指南》讀書筆記 | 彙總_COCOgsta的部落格-CSDN部落格
顧名思義,Linux bridge就是Linux系統中的網橋,但是Linux bridge的行為更像是一台虛拟的網絡交換機,任意的真實實體裝置(例如eth0)和虛拟裝置(例如,前面講到的veth pair和後面即将介紹的tap裝置)都可以連接配接到Linux bridge上。
Linux bridge有多個端口,資料可以從任何端口進來,進來之後從哪個口出去取決于目的MAC位址,原理和實體交換機差不多。
1.3.1Linuxbridge初體驗
用iproute2軟體包裡的ip指令建立一個bridge:
或使用bridge-utils軟體包裡的brctl工具管理網橋,例如建立一個網橋:
剛建立一個bridge時,其實沒有任何實際功能,如圖1-4所示。
圖1-4 獨立的bridge裝置示意圖
建立一對veth裝置,并配置IP位址:
将veth0連接配接到br0上:
添加一個裝置到網橋上:
對接後,檢視目前網橋上都有哪些網絡裝置:
或使用brctl指令顯示目前存在的網橋及其所連接配接的網絡端口:
執行完以上指令後,連接配接veth pair的bridge裝置的網絡拓撲如圖1-5所示。
圖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:
于是,綁定IP位址的bridge裝置的網絡拓撲如圖1-6所示。
圖1-6 綁定IP位址的bridge裝置的網絡拓撲
圖1-6将協定棧和veth0之間的聯系去掉了,veth0相當于一根網線。
這時,再通過br0 ping veth1,結果成功收到了ICMP的回程封包:
1.3.3 将實體網卡添加到Linuxbridge
将主機上的實體網卡eth0添加到Linux bridge:
通過br0 ping網關成功:
通過veth1 ping網關成功:
将eth0上的IP删除:
通過eth0 ping網關成功:
檢視主機路由表:
eth0的IP被删除後,預設路由不見了,需要手動将預設網關加回來。
添加預設網關:
ping外網成功:
經過上面一系列的操作,将實體網卡添加到bridge裝置的網絡拓撲如圖1-7所示。
圖1-7 将實體網卡添加到bridge裝置的網絡拓撲
1.3.4 Linuxbridge在網絡虛拟化中的應用
下面将通過Linux bridge的兩種常見的部署方式說明其在現代網絡虛拟化技術中的地位。
- 虛拟機
虛拟機通過tun/tap或者其他類似的虛拟網絡裝置,将虛拟機内的網卡同br0連接配接起來,這樣就達到和真實交換機一樣的效果,如圖1-8所示。如果有多個虛拟機,那麼這些虛拟機通過tun/tap裝置連接配接到網橋。
圖1-8 Linux bridge在虛拟機中的應用
- 容器
Linux bridge在容器場景的組網和上面的虛拟機場景差不多,但也存在一些差別。例如,容器使用的是veth pair裝置,容器和實體網絡不在同一個網段内。Linux bridge在容器中的應用如圖1-9所示。
圖1-9 Linux bridge在容器中的應用
1.3.5 網絡接口的混雜模式
網絡接口的混雜模式在Kubernetes網絡也有應用。
混雜模式(Promiscuous mode),簡稱Promisc mode,俗稱“監聽模式”。在非混雜模式下,網卡隻會接收目的MAC位址是它自己的單點傳播幀,以及多點傳播及廣播幀;在混雜模式下,網卡會接收經過它的所有幀!
我們可以使用ifconfig或者netstat -i指令檢視一個網卡是否開啟了混雜模式。
- ifconfig eth0,檢視eth0的配置,包括混雜模式。當輸出包含PROMISC時,表明該網絡接口處于混雜模式。
啟用網卡的混雜模式,可以使用下面這條指令:
使網卡退出混雜模式,可以使用下面這條指令:
将網絡裝置加入Linux bridge後,會自動進入混雜模式。
網絡裝置離開Linux bridge後,會自動退出混雜模式,如下所示: