網(wǎng)絡(luò)基礎(chǔ)知識
計算機網(wǎng)絡(luò)分層
分別為: OSI七層參考模型闻镶,TCP/IP參考模型傍菇,五層參考模型
網(wǎng)關(guān)谍椅,網(wǎng)橋误堡,網(wǎng)卡
網(wǎng)橋:一種網(wǎng)絡(luò)設(shè)備,主要用于連接兩個或多個局域網(wǎng)(LAN)雏吭,通常工作在數(shù)據(jù)鏈路層锁施。它可以在兩個網(wǎng)絡(luò)之間中繼數(shù)據(jù)幀,確保數(shù)據(jù)可以在不同的網(wǎng)絡(luò)之間正確傳輸思恐。網(wǎng)橋的主要作用是在同類LAN之間連接沾谜,而網(wǎng)關(guān)則用于連接不同類型的網(wǎng)絡(luò)或協(xié)議
網(wǎng)卡:是計算機與網(wǎng)絡(luò)進行物理連接的接口設(shè)備,全稱為網(wǎng)絡(luò)接口卡胀莹。它集成了局域網(wǎng)功能基跑,有時也稱為LAN卡或網(wǎng)絡(luò)適配器。每個網(wǎng)卡都有一個唯一的MAC地址描焰,用于在局域網(wǎng)內(nèi)尋址媳否。網(wǎng)卡將數(shù)字信號轉(zhuǎn)換為電信號,并通過網(wǎng)線發(fā)送出去荆秦,屬于OSI模型的第一和第二層
網(wǎng)關(guān):一種更為復(fù)雜的網(wǎng)絡(luò)設(shè)備篱竭,用于實現(xiàn)不同局域網(wǎng)(LAN)的連接。與網(wǎng)橋不同步绸,網(wǎng)關(guān)建在應(yīng)用層掺逼,并且可以處理不同網(wǎng)絡(luò)之間的協(xié)議轉(zhuǎn)換,使得使用不同通信協(xié)議瓤介、數(shù)據(jù)格式或語言的系統(tǒng)可以相互通信吕喘。網(wǎng)關(guān)的主要優(yōu)勢在于能夠?qū)⒕哂胁幌嗳莸牡刂犯袷降木W(wǎng)絡(luò)連接起來,實現(xiàn)不同網(wǎng)絡(luò)之間的通
網(wǎng)關(guān)是郵電局,所有的信息必須通過這里的打包刑桑、封箱氯质、尋址败玉,才能發(fā)出去與收進來奋单;網(wǎng)卡是設(shè)備,也就是郵電局郵筒守伸,你家的信箱琢锋;而網(wǎng)橋是郵遞員辕漂,但他只負責一個鎮(zhèn)里面(局域網(wǎng))不負責廣域網(wǎng)
linux的ipip隧道技術(shù):
https://blog.csdn.net/sanhewuyang/article/details/136491896
calico的主要組件
1.Felix:
功能:
分布式鍵值存儲,主要負責網(wǎng)絡(luò)元數(shù)據(jù)一致性吴超,確保Calico網(wǎng)絡(luò)狀態(tài)的準確性钮热,可以與kubernetes共用
作用:
Felix會監(jiān)聽etcd中心的存儲,從它獲取事件烛芬,比如說用戶在這臺機器上加了一個IP,或者是創(chuàng)建了一個容器等。用戶創(chuàng)建pod后赘娄,F(xiàn)elix負責將其網(wǎng)卡仆潮、IP、MAC都設(shè)置好遣臼,然后在內(nèi)核的路由表里面寫一條性置,注明這個IP應(yīng)該到這張網(wǎng)卡。同樣如果用戶制定了隔離策略揍堰,F(xiàn)elix同樣會將該策略創(chuàng)建到ACL中鹏浅,以實現(xiàn)隔離。
2.etcd:
功能:
分布式鍵值存儲屏歹,主要負責網(wǎng)絡(luò)元數(shù)據(jù)一致性隐砸,確保Calico網(wǎng)絡(luò)狀態(tài)的準確性,可以與kubernetes共用
3.BGP Client(BIRD):
功能:
calico 為每一個主機部署一個BGP Client蝙眶,使用BIRD實現(xiàn)季希,BIRD是一個獨特的持續(xù)發(fā)展項目,實現(xiàn)了眾多動態(tài)路由協(xié)議幽纷,比如BGP式塌,OSPF,RIP等,caloco的角色是監(jiān)聽host上有Felix注入的路由信息,然后通過BGP廣播告訴剩余的主機節(jié)點友浸,從而實現(xiàn)網(wǎng)絡(luò)互通
作用:
BIRD是一個標準的路由程序峰尝,它會從內(nèi)核里面獲取哪一些IP的路由發(fā)生了變化,然后通過標準BGP的路由協(xié)議擴散到整個其他的宿主機上收恢,讓外界都知道這個IP在這里武学,你們路由的時候得到這里來。
4.BGP Route Reflector:
功能:
在大型網(wǎng)絡(luò)規(guī)模中派诬,如果僅僅使用 BGP client 形成 mesh 全網(wǎng)互聯(lián)的方案就會導(dǎo)致規(guī)模限制劳淆,因為所有節(jié)點之間倆倆互聯(lián),需要 N^2 個連接默赂,為了解決這個規(guī)模問題沛鸵,可以采用 BGP 的 Router Reflector 的方法,使所有 BGP Client 僅與特定 RR 節(jié)點互聯(lián)并做路由同步缆八,從而大大減少連接數(shù)曲掰。
Calico實現(xiàn)的node之間的倆種網(wǎng)絡(luò)
ipip模式:
采用linux的ipip隧道技術(shù)實現(xiàn)數(shù)據(jù)包的封裝和轉(zhuǎn)發(fā)
具體流程
1、數(shù)據(jù)包從 Pod1 出到達Veth Pair另一端(宿主機上奈辰,以cali前綴開頭)栏妖。
2、進入IP隧道設(shè)備(tunl0)奖恰,由Linux內(nèi)核IPIP驅(qū)動封裝吊趾,把源容器ip換成源宿主機ip宛裕,目的容器ip換成目的主機ip,這樣就封裝成 Node1 到 Node2 的數(shù)據(jù)包论泛。
3揩尸、數(shù)據(jù)包經(jīng)過路由器三層轉(zhuǎn)發(fā)到 Node2。
4屁奏、Node2 收到數(shù)據(jù)包后岩榆,網(wǎng)絡(luò)協(xié)議棧會使用IPIP驅(qū)動進行解包,從中拿到原始IP包坟瓢。
5勇边、然后根據(jù)路由規(guī)則,將數(shù)據(jù)包轉(zhuǎn)發(fā)給cali設(shè)備折联,從而到達 Pod2粒褒。
calico模式的啟用
CALICO_IPV4POOL_IPIP來實現(xiàn)ipip功能的開關(guān):默認是Always,表示開啟崭庸;Off表示關(guān)閉ipip怀浆。
# kubectl get daemonsets. calico-node -n kube-system -o yaml | grep -iA 1 ipip -
- name: CALICO_IPV4POOL_IPIP
value: "Always"
BGP模式
BGP網(wǎng)絡(luò)相比較IPIP網(wǎng)絡(luò),最大的不同之處就是沒有了隧道設(shè)備 tunl0怕享。 前面介紹過IPIP網(wǎng)絡(luò)pod之間的流量發(fā)送tunl0执赡,然后tunl0發(fā)送對端設(shè)備。BGP網(wǎng)絡(luò)中函筋,pod之間的流量直接從網(wǎng)卡發(fā)送目的地沙合,減少了tunl0這個環(huán)節(jié)。
具體流程
1.數(shù)據(jù)包也是先從veth設(shè)備對另一口發(fā)出跌帐,到達宿主機上的cali開頭的虛擬網(wǎng)卡上(當創(chuàng)建一個pod時幫你先起一個infra containers的容器首懈,調(diào)用calico的二進制幫你去配置容器的網(wǎng)絡(luò))
2.宿主機根據(jù)路由表決定這個數(shù)據(jù)包到底發(fā)送到哪里去,可以從ip route看到路由表信息谨敛,這里顯示是目的cni分配的子網(wǎng)絡(luò)和目的宿主機的網(wǎng)絡(luò)究履,
3.當進行跨主機通信的時候之間轉(zhuǎn)發(fā)到下一跳地址走宿主機的eth0網(wǎng)卡出去
4.一個宿主機的網(wǎng)卡中,在路由表中找到對應(yīng)的虛擬網(wǎng)卡cali地址
參考鏈接
https://www.cnblogs.com/goldsunshine/p/10701242.html