新聞中心
在現(xiàn)代的計算機網(wǎng)絡(luò)中,網(wǎng)橋是一種重要的網(wǎng)絡(luò)設(shè)備,它能夠?qū)⒍鄠€網(wǎng)絡(luò)分段連接起來,從而實現(xiàn)網(wǎng)絡(luò)互聯(lián)互通。在Linux操作系統(tǒng)中,也有許多關(guān)于網(wǎng)橋的實現(xiàn)方案,例如透明網(wǎng)橋就是其中較為重要的一種。

創(chuàng)新互聯(lián)公司是一家業(yè)務(wù)范圍包括IDC托管業(yè)務(wù),網(wǎng)頁空間、主機租用、主機托管,四川、重慶、廣東電信服務(wù)器租用,成都服務(wù)器托管,成都網(wǎng)通服務(wù)器托管,成都服務(wù)器租用,業(yè)務(wù)范圍遍及中國大陸、港澳臺以及歐美等多個國家及地區(qū)的互聯(lián)網(wǎng)數(shù)據(jù)服務(wù)公司。
透明網(wǎng)橋是指連接多個網(wǎng)絡(luò)的一種網(wǎng)橋,它能夠在各個網(wǎng)絡(luò)之間自動轉(zhuǎn)發(fā)數(shù)據(jù),而且不會干擾其他網(wǎng)絡(luò)設(shè)備的通信。在Linux系統(tǒng)中,使用雙網(wǎng)卡就能夠?qū)崿F(xiàn)透明網(wǎng)橋。下面就來具體介紹一下這種實現(xiàn)方案。
我們需要準(zhǔn)備兩塊網(wǎng)卡。然后,就可以開始設(shè)置透明網(wǎng)橋了。在Linux系統(tǒng)中,我們可以使用Bridge-utils這個工具來配置透明網(wǎng)橋。它包含了bridge-utils和bridge-utils-dbg兩個程序。其中,bridge-utils是用于配置透明網(wǎng)橋的工具包,而bridge-utils-dbg則包含了一些調(diào)試工具。
使用Bridge-utils配置透明網(wǎng)橋的過程如下:
1. 安ridge-utils包
在終端中輸入以下命令即可安ridge-utils包:
# sudo apt-get install bridge-utils
2. 配置網(wǎng)卡
使用編輯器打開/etv/network/interfaces文件,在文件的結(jié)尾處添加以下內(nèi)容:
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp
3. 配置透明網(wǎng)橋
使用編輯器打開/etv/network/interfaces文件,在文件的結(jié)尾處添加以下內(nèi)容:
# Bridge setup
auto br0
iface br0 inet dhcp
bridge_ports eth0 eth1
4. 保存并重啟網(wǎng)絡(luò)服務(wù)
在命令行中輸入以下命令以保存并重啟網(wǎng)絡(luò)服務(wù):
# service networking restart
以上就是使用Bridge-utils配置透明網(wǎng)橋的全部過程。當(dāng)然,在實際操作中,可能會遇到一些問題,例如網(wǎng)卡IP地址沖突、網(wǎng)卡速度不一致等等。為了避免這些問題,我們可以使用一些工具來輔助實現(xiàn)透明網(wǎng)橋。下面就來介紹一下這些工具。
1. brctl
brctl是Bridge-utils工具包中最常用的工具之一,它可以用于配置和管理透明網(wǎng)橋。下面就來介紹一下brctl的常用命令。
創(chuàng)建網(wǎng)橋:
# brctl addbr br0
添加網(wǎng)卡:
# brctl addif br0 eth0
刪除網(wǎng)卡:
# brctl delif br0 eth0
刪除網(wǎng)橋:
# brctl delbr br0
2. ifconfig
ifconfig是Linux系統(tǒng)中一個常用的命令行工具,用于配置和管理網(wǎng)絡(luò)接口。下面就來介紹一下ifconfig的常用命令。
啟用網(wǎng)絡(luò)接口:
# ifconfig eth0 up
禁用網(wǎng)絡(luò)接口:
# ifconfig eth0 down
設(shè)置網(wǎng)卡IP地址:
# ifconfig eth0 192.168.0.1 netmask 255.255.255.0
3. iptables
iptables是Linux系統(tǒng)中一個強大的防火墻工具,它可以對網(wǎng)絡(luò)流量進(jìn)行過濾、修改、重定向等操作。當(dāng)使用透明網(wǎng)橋時,我們可以使用iptables來實現(xiàn)流量轉(zhuǎn)發(fā)。下面就來介紹一下iptables的常用命令。
開啟轉(zhuǎn)發(fā):
# echo 1 > /proc/sys/net/ipv4/ip_forward
設(shè)置NAT:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
以上就是使用一些工具來實現(xiàn)透明網(wǎng)橋的全部過程。在實際操作中,應(yīng)該根據(jù)具體的應(yīng)用場景選擇合適的解決方案,以達(dá)到更好的性能和穩(wěn)定性。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220什么是網(wǎng)橋
工作在
數(shù)據(jù)鏈路層
的一種網(wǎng)絡(luò)互連設(shè)備,它在互連的LAN之間實現(xiàn)幀的存儲和轉(zhuǎn)發(fā)??梢赃B接不同類型的局域網(wǎng)。根據(jù)MAC幀的目的地址對收到的幀進(jìn)行轉(zhuǎn)發(fā)。網(wǎng)橋具有過濾幀的功能。當(dāng)網(wǎng)橋收到一個幀時,并不是向所有的
端口轉(zhuǎn)發(fā)
此幀,而是先檢查此幀的目的
MAC地址
,然后再確定將該幀轉(zhuǎn)發(fā)到哪一個端口
網(wǎng)段
A和網(wǎng)段B如果是同構(gòu)網(wǎng)是可以直接用電纜相連,但是如果是不同種類的網(wǎng)絡(luò),比如
以太網(wǎng)
和令牌環(huán)網(wǎng)不能直接用介質(zhì)相連,這時候需要中轉(zhuǎn)設(shè)備(網(wǎng)橋)進(jìn)行相連
網(wǎng)橋只有若干個端口,因此一般直接相連的是網(wǎng)段,而不是主機
網(wǎng)橋的優(yōu)點:
? 過濾通信量
? 擴大了物理范圍(為了解決由于媒體訪問控制導(dǎo)致的距離不能過長的問題。假如網(wǎng)段連接兩段,這兩段就相當(dāng)于兩個媒體訪問控制。每一段有一個媒體訪問控制的更大距離,兩個距離加起來遠(yuǎn)遠(yuǎn)大于一個媒體訪問控制的更大距離。而
中繼器
解決的是由于距離過長而導(dǎo)致的信號衰減的問題,中繼器所連接的各個網(wǎng)段最終還是單一的一個CA/CD
碰撞域
(沖突域),中繼器只能在一個碰撞域內(nèi)部延伸距離,每一個碰撞域是有一個更大距離限制的,中繼器不可能延伸碰撞域本身所固定的更大距離。如果用網(wǎng)橋,有兩個端口,可以連接兩個碰撞域,這樣范圍就增大了)
? 提高了可靠性(各個碰撞域可以獨立工作,一個碰撞域出問題不會影響其他碰撞域)
? 可互連不同
物理層
、不同MAC子層和不同速率(如10Mb/s和100Mb/s以太網(wǎng))的局域網(wǎng)(一個以太網(wǎng)里能連接的用戶數(shù)量是有限的,當(dāng)超過這個限度的時候要接兩個網(wǎng),這兩個網(wǎng)也要互相連接起來,這時的兩個網(wǎng)是沒有差異的,只是因為用戶數(shù)量過多而分出兩個網(wǎng),這時就是同構(gòu)網(wǎng)絡(luò)連接。而由于技術(shù)不同,兩個網(wǎng)對于傳輸可靠性的要求不一樣,速率不一樣等時,這就是異構(gòu)網(wǎng)絡(luò)連接)
網(wǎng)橋的缺點:
? 存儲轉(zhuǎn)發(fā)增加了時延
? 在MAC子層并沒有
流量控制
功能(使用中繼器互連的各個節(jié)點之間的收發(fā)速率沒有不一樣的,也就不存在流量控制問題。但是網(wǎng)橋是可以連接異構(gòu)網(wǎng)絡(luò),這樣兩個網(wǎng)絡(luò)的速率可能是不一樣的,就出現(xiàn)了流量失配的問題。當(dāng)高速網(wǎng)絡(luò)向低速網(wǎng)絡(luò)發(fā)送數(shù)宏正型據(jù)的時候就會出現(xiàn)問題)
? 具有不同MAC子層的網(wǎng)段連接在一起時時延更大(異構(gòu)網(wǎng)絡(luò)之間傳輸存在一個MAC協(xié)議的轉(zhuǎn)換)
網(wǎng)橋只適合于用戶數(shù)不太多(不超過幾百個)和通信量不太大的局域蔽猜網(wǎng),否則有時還會因傳播過多的廣播信息而產(chǎn)生網(wǎng)絡(luò)擁塞。這就是所說的
廣播風(fēng)暴
。當(dāng)用戶數(shù)量龐大,通信量很大的情況之下就用路由器來進(jìn)行主網(wǎng)規(guī)劃。局域網(wǎng)不用路由器,因為局域網(wǎng)中只存在物理層和數(shù)據(jù)鏈路層,沒有
網(wǎng)絡(luò)層
,而路由器是應(yīng)用在網(wǎng)絡(luò)層的,因此局域網(wǎng)不用路由器。概念已而現(xiàn)在的局域網(wǎng)的經(jīng)在擴大,不再只是用中繼器和網(wǎng)橋連接網(wǎng)絡(luò),也會用路由器
網(wǎng)橋與集線器的區(qū)別
? 集線器在轉(zhuǎn)發(fā)幀時,不對傳播媒體進(jìn)行檢測
? 網(wǎng)橋在轉(zhuǎn)發(fā)前必須執(zhí)行CA/CD算法。若在發(fā)送過程中出現(xiàn)碰撞,就必須停止發(fā)送和進(jìn)行退避(數(shù)據(jù)會在緩存里面儲存,發(fā)送一次不成功就會一直發(fā)送,知道到16次清毀還沒發(fā)送成功才會停止);在這一點上網(wǎng)橋的接口就像一個網(wǎng)卡(網(wǎng)卡有MAC地址,但是網(wǎng)橋沒有),但網(wǎng)橋卻沒有網(wǎng)卡。由于網(wǎng)橋沒有網(wǎng)卡,因此網(wǎng)橋并不改變它轉(zhuǎn)發(fā)的幀的源地址(只是進(jìn)行信息傳輸,并不會改變
數(shù)據(jù)幀
的內(nèi)容以及源地址)
網(wǎng)橋工作在混雜方式;
(比如網(wǎng)卡,在正常方式下,網(wǎng)卡如果接收地址為當(dāng)前網(wǎng)卡MAC地址,這時相當(dāng)于單播通信,網(wǎng)卡就會把內(nèi)容提交給上層。但是如果在廣播信道里,即使不是數(shù)據(jù)的接收方也可以看到發(fā)送方發(fā)送的數(shù)據(jù),這樣網(wǎng)卡就會把所有它接收到的數(shù)據(jù),不管是不是它這個節(jié)點應(yīng)該接受的數(shù)據(jù)都會提交給上層)
網(wǎng)橋接收到一定幀后,通過查詢地址/端口對應(yīng)表來確定是丟棄還是轉(zhuǎn)發(fā);
網(wǎng)橋剛啟動時,地址/端口對應(yīng)表為空,采用洪泛方法轉(zhuǎn)發(fā)幀(使用網(wǎng)橋時不需要對網(wǎng)橋進(jìn)行配置,只需要物理上連接就可以。洪泛方法:采取廣播的方式給所有節(jié)點發(fā)送);
在轉(zhuǎn)發(fā)過程中采用逆向?qū)W習(xí)算法收集MAC地址。網(wǎng)橋通過分析幀的源MAC地址得到MAC地址與端口的對應(yīng)關(guān)系,并寫入地址/端口對應(yīng)表(因為在剛開始表為空的的時候,是通過廣播方式給所有節(jié)點轉(zhuǎn)發(fā)數(shù)據(jù)的,所以是沒法了解想要傳送的節(jié)點的MAC目的地址的,因此用源MAC地址);
網(wǎng)橋軟件對地址/端口對應(yīng)表進(jìn)行不斷的更新,并定時檢查,刪除在一定時間內(nèi)沒有更新的地址/端口項;
透明網(wǎng)橋的幀轉(zhuǎn)發(fā)
幀的轉(zhuǎn)發(fā)過程:目的LAN與源LAN相同,則丟棄幀;目的LAN源LAN不同,則轉(zhuǎn)發(fā)幀;目的LAN未知,則洪泛幀;均執(zhí)行逆向?qū)W習(xí)
透明橋工作流程
網(wǎng)橋回路問題
↑圖
假設(shè)
A發(fā)出了一個幀,假設(shè)不認(rèn)識目標(biāo)方,這時網(wǎng)橋會按照廣播方式處理。正常來講,F(xiàn)1和F2的時序不會完全一樣。因為網(wǎng)橋的端口在發(fā)送數(shù)據(jù)之前需要進(jìn)行媒介的載波傾聽。它們會進(jìn)行信道使用的競爭,因此存在一定的先后順序。假設(shè)F1先發(fā)送,發(fā)給網(wǎng)橋2,F(xiàn)2發(fā)給網(wǎng)橋1,這樣數(shù)據(jù)幀就會一直在信道里不停地傳輸;如果目標(biāo)地址明確的話就不會出現(xiàn)這樣的問題
解決多個網(wǎng)橋產(chǎn)生回路的問題:
讓網(wǎng)橋之間互相通信,用一棵連接每個LAN的生成樹覆蓋實際的
拓?fù)浣Y(jié)構(gòu)
(任意兩個節(jié)點之間只有唯一一條想通的連接,使備份的網(wǎng)橋處于休眠狀態(tài),只接受數(shù)據(jù)而不轉(zhuǎn)發(fā)數(shù)據(jù)。會監(jiān)控主要
網(wǎng)橋的作用
,一旦主要網(wǎng)橋失控就會重新構(gòu)建生成樹來保障中斷網(wǎng)絡(luò)的連通性,這時備用的網(wǎng)橋就變成了主要網(wǎng)橋)
※構(gòu)造生成樹:
每個橋廣播自己的橋編號,號最小的橋稱為生成樹的根;每個網(wǎng)橋計算自己到根的最短路徑,構(gòu)造出生成樹,使得每個LAN和橋到根的路徑最短;當(dāng)某個LAN或網(wǎng)橋發(fā)生故障時,要重新計算生成樹;生成樹構(gòu)造完后,算法繼續(xù)執(zhí)行以便自動發(fā)現(xiàn)拓?fù)浣Y(jié)構(gòu)變化,重新生成樹
源路由網(wǎng)橋
透明網(wǎng)橋容易安裝,但網(wǎng)絡(luò)資源的利用不充分。源路由網(wǎng)橋在發(fā)送幀時將詳細(xì)的路由信息放在幀的首部中。源站以廣播方式向欲通信的目的站發(fā)送一個發(fā)現(xiàn)幀,每個發(fā)現(xiàn)幀都記錄所經(jīng)過的路由。發(fā)現(xiàn)幀到達(dá)目的站時就沿各自的路由返回源站。源站在得知這些路由后,按照客戶的要求,從所有可能的路由中選擇出一個更佳路由之后發(fā)送幀。凡從該源站向該目的站發(fā)送的幀的首部,都必須攜帶源站所確定的這一路由信息。
以太網(wǎng)交換機
通常都有多個端口,以太網(wǎng)交換機實質(zhì)上就是一個多端口的網(wǎng)橋
特點:
以太網(wǎng)交換機的每個端口都直接與主機(同構(gòu)主機)相連(網(wǎng)橋的端口連接的是網(wǎng)段,可以連異構(gòu)網(wǎng)段),并且一般都工作在全雙工方式。交換機能同時聯(lián)通許多對的端口,使每一對相互通信的主機都能像獨占通信媒體那樣,進(jìn)行無碰撞的傳輸數(shù)據(jù)。以太網(wǎng)交換機由于使用了專用的交換結(jié)構(gòu)芯片,其交換速率就較高。物理端口類型相同
計算機網(wǎng)絡(luò)-k8s網(wǎng)絡(luò)
K8S網(wǎng)絡(luò)模型設(shè)計:扁襪備帶平的可連通的網(wǎng)絡(luò)
K8S的網(wǎng)絡(luò)是一個極其復(fù)雜的網(wǎng)絡(luò),如果想要用兩個簡單的詞來描述K8S網(wǎng)絡(luò),那么我覺得扁平和可連通是K8S網(wǎng)絡(luò)更大的特點(不懂隔離性)。
何為連通呢?
二層網(wǎng)絡(luò)的連通:如果能夠直接通過MAC幀直接通信的網(wǎng)絡(luò)便是二層連通的網(wǎng)絡(luò),LAN就是這種網(wǎng)絡(luò)
比如無限WIFI網(wǎng)絡(luò),比如以太網(wǎng)
三層網(wǎng)絡(luò)的連通:如果能夠通過IP報直接通信的網(wǎng)絡(luò)便是三層連通的網(wǎng)絡(luò),便是三層連通
三層網(wǎng)絡(luò)的連通分為兩個部分,之一個部分是三層網(wǎng)絡(luò)中的每一個LAN都是二層連通的,其次需要存在能夠連通的路由來保證;這里可以簡單回顧下三層網(wǎng)絡(luò)通信的流程
通過路由表確定目標(biāo)ip是否在鏈路上
如果在鏈路上,通過arp協(xié)議獲取對應(yīng)主機的mac地址,發(fā)送mac幀到鏈路上;
如果不在同一個鏈路上,通過本地路由表發(fā)送mac幀給下一跳,然后下一跳解析mac幀,分析ip報,繼續(xù)路由直到最終跳到目標(biāo)網(wǎng)絡(luò)再次通過mac幀發(fā)送到目標(biāo)主機或者到達(dá)ttl消失。
假如其中任何一個步驟不滿足或者出問題,三層網(wǎng)絡(luò)就無法連通
何為扁平呢?
就是希望可以在pod內(nèi)直接通過IP進(jìn)行互相通信而不需要在pod內(nèi)部使用vpn之類的東西來連接其他pod(基礎(chǔ)架構(gòu)告蘆化),具體的可以看下k8s對網(wǎng)絡(luò)的設(shè)計與要求。
k8s在設(shè)計其網(wǎng)絡(luò)時,就希望網(wǎng)絡(luò)對運行在其中的pod是透明的,因此提出了以下的一些要求與原則
k8s組網(wǎng)要求
所有的Pods之間可以在不使用 NAT網(wǎng)絡(luò)地址轉(zhuǎn)換 的情況下相互通信
所有的Nodes之間可以在不使用NAT網(wǎng)絡(luò)地址轉(zhuǎn)換的情況下相互通信
每個Pod自己看到的自己的ip和其他Pod看到的一致
k8s網(wǎng)絡(luò)模型設(shè)計原則
每個Pod都擁有一個獨立的 IP地址,而且 假定所有 Pod 都在一個可以直接連通的、扁平的網(wǎng)絡(luò)空間中 。
不管它們是否運行在同 一 個 Node (宿主機)中,都要求它們可以直接通過對方的 IP 進(jìn)行訪問。
設(shè)計這個原則的原因 是,用戶不需要額外考慮如何建立 Pod 之間的連接,也不需要考慮將容器端口映射到主機端口等問題。
而要想深入了解K8S的網(wǎng)絡(luò),就不得不去了解Linux操作系統(tǒng)中的網(wǎng)絡(luò)以及計算機網(wǎng)絡(luò)協(xié)議棧和一些網(wǎng)絡(luò)技術(shù)
其中關(guān)于計滾信算機網(wǎng)絡(luò)協(xié)議棧道部分上次分享已經(jīng)分享過了,所以本次的主題更多是Linux操作系統(tǒng)的網(wǎng)絡(luò)以及一些網(wǎng)絡(luò)技術(shù)
Linux操作系統(tǒng)中的網(wǎng)絡(luò)
首先,我們來看下基本的linux網(wǎng)絡(luò),如下圖所示
一個APP生成socket數(shù)據(jù),然后經(jīng)過網(wǎng)絡(luò)協(xié)議棧包裝IP報文,然后封裝成MAC幀,在經(jīng)過網(wǎng)絡(luò)協(xié)議棧的過程中,會存在netfilters對數(shù)據(jù)進(jìn)行一定的處理,同時也會存在路由的過程,
如果在同一個物理鏈路內(nèi),將直接通過ARP協(xié)議獲取目標(biāo)IP地址的MAC地址最終發(fā)送出去;
如果不在同一個物理鏈路則通過路由表確定下一跳的MAC地址,封裝成MAC幀發(fā)送到目標(biāo)地址。
在這個過程中,會根據(jù)路由表選擇對應(yīng)的端口,如果是lo端口,則會將幀原封不動的返回計算機網(wǎng)絡(luò)協(xié)議棧,然后回到監(jiān)聽對應(yīng)端口的SOCKET里。
如果是以太網(wǎng)端口則走以太網(wǎng)端口,如果是藍(lán)牙或者無線網(wǎng)端口同理。
iptables與netfilters
iptables是一個用戶空間的應(yīng)用程序,通過該程序可以修改一些配置文件,這些文件定義了防火墻的一些行為,netfilters是操作系統(tǒng)內(nèi)核的一部分,netfilters里有5個回調(diào)鉤子會觸發(fā)iptables里的規(guī)則;iptables只是Linux防火墻的管理工具而已,位于/in/iptables。真正實現(xiàn)防火墻功能的是
netfilter,它是Linux內(nèi)核中實現(xiàn)包過濾的內(nèi)部結(jié)構(gòu)。
這里不具體講述其實現(xiàn)的原理,僅僅列出netfilters的一些功能:
1)filter表——三個鏈:INPUT、FORWARD、OUTPUT
作用:過濾數(shù)據(jù)包 內(nèi)核模塊:iptables_filter.
2)Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
作用:用于網(wǎng)絡(luò)地址轉(zhuǎn)換(IP、端口) 內(nèi)核模塊:iptable_nat
3)Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改數(shù)據(jù)包的服務(wù)類型、TTL、并且可以配置路由實現(xiàn)QOS內(nèi)核模塊:iptable_mangle(別看這個表這么麻煩,咱們設(shè)置策略時幾乎都不會用到它)
4)Raw表——兩個鏈:OUTPUT、PREROUTING
作用:決定數(shù)據(jù)包是否被狀態(tài)跟蹤機制處理 內(nèi)核模塊:iptable_raw
虛擬網(wǎng)絡(luò)設(shè)備 tap/tun
TUN 和 TAP 設(shè)備是 Linux 內(nèi)核虛擬網(wǎng)絡(luò)設(shè)備,純軟件實現(xiàn)。TUN(TUNnel)設(shè)備模擬網(wǎng)絡(luò)層設(shè)備,處理三層報文如 IP
報文。TAP 設(shè)備模擬鏈路層設(shè)備,處理二層報文,比如以太網(wǎng)幀。TUN 用于路由,而 TAP 用于創(chuàng)建網(wǎng)橋。OS 向連接到 TUN/TAP
設(shè)備的用戶空間程序發(fā)送報文;用戶空間程序可像往物理口發(fā)送報文那樣向 TUN/TAP 口發(fā)送報文,在這種情況下,TUN/TAP
設(shè)備發(fā)送(或注入)報文到 OS 協(xié)議棧,就像報文是從物理口收到一樣。
虛擬網(wǎng)絡(luò)設(shè)備 veth-pairs
虛擬以太網(wǎng)電纜。使用雙向有名管道實現(xiàn)。常用于不同 namespace 之間的通信,即 namespace 數(shù)據(jù)穿越或容器數(shù)據(jù)穿越。
虛擬網(wǎng)絡(luò)設(shè)備 bridge
bridge是linux自帶的虛擬交換機(網(wǎng)橋),其可以連接多個以太網(wǎng)設(shè)備,擁有智能處理MAC幀的能力,流向交換機的MAC幀將智能的被傳輸?shù)较鄳?yīng)的二層鏈路
網(wǎng)絡(luò)命名空間
在 Linux 中,網(wǎng)絡(luò)名字空間可以被認(rèn)為是隔離的擁有單獨網(wǎng)絡(luò)棧(網(wǎng)卡、路由轉(zhuǎn)發(fā)表、iptables)的環(huán)境。網(wǎng)絡(luò)名字空間經(jīng)常用來隔離網(wǎng)絡(luò)設(shè)備和服務(wù),只有擁有同樣網(wǎng)絡(luò)名字空間的設(shè)備,才能看到彼此。
從邏輯上說,網(wǎng)絡(luò)命名空間是網(wǎng)絡(luò)棧的副本,有自己的網(wǎng)絡(luò)設(shè)備、路由選擇表、鄰接表、Netfilter表、網(wǎng)絡(luò)套接字、網(wǎng)絡(luò)procfs條目、網(wǎng)絡(luò)sysfs條目和其他網(wǎng)絡(luò)資源。
從系統(tǒng)的角度來看,當(dāng)通過clone()系統(tǒng)調(diào)用創(chuàng)建新進(jìn)程時,傳遞標(biāo)志CLONE_NEWNET將在新進(jìn)程中創(chuàng)建一個全新的網(wǎng)絡(luò)命名空間。
從用戶的角度來看,我們只需使用工具ip(package is iproute2)來創(chuàng)建一個新的持久網(wǎng)絡(luò)命名空間。
從系統(tǒng)實現(xiàn)來說,就是原本一個數(shù)據(jù)結(jié)構(gòu)是static公共的,后來變成進(jìn)程私有的,在PCB里存在一個命名空間的結(jié)構(gòu),命名空間里有著網(wǎng)絡(luò)命名空間,網(wǎng)絡(luò)命名空間擁有著所有跟網(wǎng)絡(luò)相關(guān)的配置數(shù)據(jù)
默認(rèn)空的網(wǎng)絡(luò)命名空間可能只有一個未啟動的lo回環(huán)網(wǎng)卡。
兩個網(wǎng)絡(luò)命名空間可以通過以太網(wǎng)攬直接連著兩個網(wǎng)絡(luò)命名空間的網(wǎng)卡,也可以通過以太網(wǎng)網(wǎng)橋連接。
通過以太網(wǎng)網(wǎng)橋或者以太網(wǎng)攬連接的兩個網(wǎng)絡(luò)命名空間只能說是在二層連通的,如果希望在三層連通,還需要給每個網(wǎng)絡(luò)命名空間配置相應(yīng)的路由表規(guī)則以及分配IP地址。
如何使用虛擬網(wǎng)絡(luò)設(shè)備聯(lián)通網(wǎng)絡(luò)命名空間
SingleHost容器網(wǎng)絡(luò)
none模式
本質(zhì)上就是創(chuàng)建一個網(wǎng)絡(luò)命名空間,里面沒有路由表,也沒有通過veths-pair連接任何鏈路,外部無法訪問這個容器,容器也無法訪問外部
host模式
本質(zhì)上就是使用宿主機的默認(rèn)網(wǎng)絡(luò)命名空間
container模式
本質(zhì)上就是將當(dāng)前容器部署在另一個容器所在的網(wǎng)絡(luò)命名空間,這樣發(fā)給本地的報文最終通過回環(huán)網(wǎng)卡回到了本機,這是同一個網(wǎng)絡(luò)命名空間可以互通的原因
bridge模式
橋接模式就是在這些網(wǎng)絡(luò)命名空間通過veth-pairs連接到同一個虛擬交換機上(二層連通),同時在對應(yīng)的命名空間配置對應(yīng)的路由表規(guī)則,但是從圖片中可以看到交換機另一端連的上網(wǎng)絡(luò)協(xié)議棧。
也就是那些MAC幀都會被宿主機接收,但是宿主機接收并不一定會處理,比如并沒有開啟ip轉(zhuǎn)發(fā)功能(工作于路由器模式還是主機模式),那么不是本地ip的報文都會被丟棄;或者說netfilters拒絕處理
這些奇怪的報文。
理論上,這些容器發(fā)送給其他容器的mac報文是會被虛擬交換機智能轉(zhuǎn)發(fā)到對應(yīng)的容器的,這是同一主機不同容器互相連通的原因
假如宿主機配備了相應(yīng)的路由規(guī)則和防火墻規(guī)則,那么容器的報文說能夠通過路由最終轉(zhuǎn)發(fā)出去的,這也是容器訪問互聯(lián)網(wǎng)的原理
但是這種模式是沒法運用在多主機的情況下,因為宿主機不知道其他宿主機里的虛擬網(wǎng)絡(luò)的路由,當(dāng)相關(guān)ip報到達(dá)宿主機時,這些ip報將會被宿主機交給默認(rèn)路由(下一跳:路由器)
最終路由器會把相關(guān)的ip報丟失或者到達(dá)ttl最終丟失
MultiHost容器網(wǎng)絡(luò)
路由方案
回顧docker的單機網(wǎng)絡(luò)模型,我們發(fā)現(xiàn)多主機不能通行的原因就在于你只能給當(dāng)前主機配置路由規(guī)則和防火墻規(guī)則,而其他主機并不知道這些ip在你的虛擬網(wǎng)絡(luò)中,假如能夠?qū)⑦@些路由信息同步到其他
宿主機,那么網(wǎng)絡(luò)便會打通。比較直接的想法就是給每臺宿主機配置路由規(guī)則。而路由規(guī)則要求下一跳必須在當(dāng)前網(wǎng)絡(luò),所以假如宿主機是二層互聯(lián)的,那么通過給這些宿主機同步這些路由規(guī)則便能夠
實現(xiàn)一個扁平的連通的網(wǎng)絡(luò)。
其中布置在每一臺宿主機可以通過k8s的daemonSet實現(xiàn),而這種數(shù)據(jù)的管理可以交給etcd來實現(xiàn)。
這類方案便是基于路由,基于這個方案的實現(xiàn)有基于靜態(tài)路由的flannel的host-gateway,以及基于動態(tài)路由的calico(使用邊際路由協(xié)議以及一堆深奧的名詞的實現(xiàn))。
下面來看看Flannel的host-gateway原理(每一臺宿主機都相當(dāng)于本機容器網(wǎng)絡(luò)的路由器):
通過路由方案構(gòu)建的網(wǎng)絡(luò),宿主機也能訪問這些虛擬網(wǎng)絡(luò)里的Pod
詢問基德大佬得知國際化sit環(huán)境的k8s網(wǎng)絡(luò)接口實現(xiàn)就是Flannel的Host-gateway,而我們的辦公網(wǎng)絡(luò)和集群網(wǎng)絡(luò)之間的路由是搭建好的,所以我們應(yīng)該可以直接通過podId訪問pod里的服務(wù)
下面是sit環(huán)境的兩個服務(wù)
跟蹤路由發(fā)現(xiàn)符合猜想
其中10.1.9.56和10.1.1.24就是宿主機的ip,這些宿主機在一個LAN里,這些宿主機相當(dāng)于虛擬網(wǎng)絡(luò)中的路由器;
猜測我們辦公網(wǎng)和qunhe集群在一個VLAN里(二層可達(dá))
隧道方案
隧道方案比較典型的就是UDP和XVLAN,兩者都是使用Overlay網(wǎng)絡(luò)(覆蓋網(wǎng)絡(luò),所謂的大二層技術(shù));其實用隧道技術(shù)最多的是VPN應(yīng)用
其中UDP是XVLAN的替代品(早期Linux沒有支持XVLAN協(xié)議,通過tun/tap技術(shù)將流量引到用戶空間然后解包生成包再發(fā),因為發(fā)生在用戶空間而且多次copy導(dǎo)致性能較差,所以一般不推薦,除非你的linux版本比較低沒法用xvlan)
下面就簡單介紹下XVLAN技術(shù)的大概原理,下圖是XVLAN的報文格式,可以發(fā)現(xiàn)就是在高層協(xié)議的報文里塞了二層報文
其中XVLAN頭里有一個關(guān)鍵的字段,VNID這是個24位的字段,每個虛擬的網(wǎng)絡(luò)主機都有一個自身的VNID作為標(biāo)識,理論上支持2的24次方個虛擬網(wǎng)絡(luò)。
在docker的橋接網(wǎng)絡(luò)里,是使用docker0網(wǎng)橋,在Flannel的xvlan方案里則是使用cni0作為網(wǎng)橋(和docker0沒啥區(qū)別),主要的不同是cni網(wǎng)橋后面連接的是flannel.1這個網(wǎng)絡(luò)設(shè)備,應(yīng)該是一個虛擬網(wǎng)卡
這個網(wǎng)卡將原始報文包裝成XVLAN報文(linux高版本支持xvlan報文)
這時需要的信息有 源nodeId,目標(biāo)nodeId,源vnid,源macId,目標(biāo)macId,源podId,目標(biāo)podId
其中目標(biāo)nodeId,目標(biāo)macId這兩個信息是不存在的;因此需要有個方式根據(jù)目標(biāo)podId獲取目標(biāo)nodeId以及目標(biāo)macId
因此需要記錄如何根據(jù)目標(biāo)podId獲取目標(biāo)macId以及目標(biāo)nodeId即可
這些數(shù)據(jù)是可以托管在某個地方的,F(xiàn)lannel就是將這些信息記錄在etcd上
在每個node上的flannel.1網(wǎng)絡(luò)設(shè)備通過etcd來通過對方的podId獲取nodeId和macId
這樣最終報文就變成了一個源ip是源nodeIp,目標(biāo)ip是目標(biāo)nodeIp的IP報文了(兩臺宿主機三層可達(dá))
原本經(jīng)過虛擬網(wǎng)橋是直接連接網(wǎng)絡(luò)協(xié)議棧,但在xvlan模式下,則改為連接一個flannel1,在flannel1中將對原始報文封裝成overlay報文轉(zhuǎn)發(fā)
udp模式類似,只是udp轉(zhuǎn)發(fā)報文說通過tap連通到用戶空間,用戶空間對報文進(jìn)行處理然后發(fā)送(因為多次內(nèi)核態(tài)用戶態(tài)切換且數(shù)據(jù)copy問題,性能較差,僅在不支持xvlan的低版本linux中使用)
當(dāng)然xvlan是一個技術(shù),上面只是簡單介紹最簡單的形式
參考:
開發(fā)內(nèi)功修煉之網(wǎng)絡(luò)篇:
K8S知識圖譜:
VXLAN協(xié)議原理簡介:
linux雙網(wǎng)卡透明網(wǎng)橋的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux雙網(wǎng)卡透明網(wǎng)橋,Linux雙網(wǎng)卡的透明網(wǎng)橋概述,什么是網(wǎng)橋,計算機網(wǎng)絡(luò)-k8s網(wǎng)絡(luò)的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計算機網(wǎng)絡(luò)、設(shè)計、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
標(biāo)題名稱:Linux雙網(wǎng)卡的透明網(wǎng)橋概述(linux雙網(wǎng)卡透明網(wǎng)橋)
轉(zhuǎn)載來于:http://www.dlmjj.cn/article/dpssjee.html


咨詢
建站咨詢
