最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

kubernetes網(wǎng)絡(luò)模型flannel和calico解析和對比

2023-07-20 17:06 作者:風格星辰  | 我要投稿

有段時間沒寫技術(shù)文章了,一直忙著找工作,刷力扣,看書。也沒有找時間好好沉淀下?,F(xiàn)在補上。

本文探討kubernetes常見的網(wǎng)絡(luò)模型flannel和calico,會介紹兩種網(wǎng)絡(luò)模型的各種模式以及通信原理,然后對比相同點和不同點以及優(yōu)缺點。網(wǎng)上也有很多參考資料,也是參考了這些資料整理出來的。

首先,我們需要了解下kubernetes的網(wǎng)絡(luò)模型的基本要求。

每個Pod都擁有一個獨立的IP地址,并假定所有Pod都在一個可以直接連通的、扁平的網(wǎng)絡(luò)空間中。

具體要求有3點

(1)所有容器都可以在不用NAT的方式下同別的容器通信。

(2)所有節(jié)點都可以在不用NAT的方式下同所有容器通信,反之亦然。

(3)容器的地址和別人看到的地址是同一個地址。

主要就是兩個工作

1、網(wǎng)絡(luò)模型需要分配和管理pod的ip,保證ip不沖突。

2、網(wǎng)絡(luò)模型需要將這些信息通過各種方式同步給所有節(jié)點

不管是flannel和calico就是實現(xiàn)了這兩個工作。

現(xiàn)在來探討下flannel和calico如何實現(xiàn)這兩個工作。

flannel

flannel是通過flanneld進程分配ip,并通過etcd進行持久化存儲。根據(jù)不同模型采用不同方式將信息同步給其他節(jié)點。

模式一:udp

在udp模式下,flannel會創(chuàng)建一個tun設(shè)備flannel0(TUN設(shè)備是工作在三層的虛擬網(wǎng)絡(luò)設(shè)備,在操作系統(tǒng)內(nèi)核和用戶程序之間傳遞ip包),這個設(shè)備由flanneld創(chuàng)建。一端是綁定到docker0,作為docker0默認網(wǎng)關(guān)。一端是flanneld。如果flannel0收到數(shù)據(jù),會將其發(fā)送給創(chuàng)建其的進程即flanneld。

為了描述方便,我將flannel分配給pod的ip稱為私網(wǎng)ip,將宿主機的ip稱為宿主機ip

flanneld會根據(jù)接收方私網(wǎng)ip地址,查詢本地緩存或者去etcd查詢。得到接收方宿主機ip。然后再封裝一層ip報文,其接收方ip即剛才查詢到的接收方宿主機ip,目的端口是自己監(jiān)聽的端口。然后傳遞給宿主機的網(wǎng)卡。宿主機網(wǎng)卡根據(jù)ip發(fā)送給接收方宿主機。由于目標端口是flanneld監(jiān)聽端口,所以接收方宿主機收到報文后會將其發(fā)送給宿主機上的flanneld,其會將報文拆開,然后發(fā)送給docker0。docker0發(fā)送給對應(yīng)的pod。

總結(jié)下:

flannel在啟動時會創(chuàng)建一個flanneld進程,其會創(chuàng)建一個tun設(shè)備flannel0,作為docker0默認網(wǎng)關(guān)。并且flanneld會根據(jù)當前集群節(jié)點給每個節(jié)點分配一個私有網(wǎng)段(會預(yù)留一部分供后續(xù)增加節(jié)點使用),并保存到etcd中,然后修改docker0啟動參數(shù),加上--bip=分配的私有網(wǎng)段。這樣docker0在給pod分配ip的時候就只會使用這個私網(wǎng)網(wǎng)段的ip,這樣ip就不會沖突了。到這里第一個工作就做完了。

相同節(jié)點下的pod通信,直接通過docker0進行通信。

不同節(jié)點下的pod通信,會通過docker0傳遞給flannel0,然后由flanneld封包,發(fā)送給宿主機網(wǎng)卡。并由其發(fā)送給接收方宿主機。然后傳遞給接收方宿主機flanneld,解包,通過flannel0經(jīng)由docker0傳給對端pod。

流程如下

pod1->docker0->flannel0(flanneld封包)->(發(fā)送方網(wǎng)卡)->(中間路由器)->(接收方網(wǎng)卡)->flannel0(flannel解包)->docker0->pod2

流程很復(fù)雜很長。而且由于flanneld是用戶進程,封包和解包需要上下文切換等操作。性能非常差。一般僅測試使用。

模式二:VxLan

VXLAN,即Virtual Extensible LAN(虛擬可擴展局域網(wǎng)),是Linux本身支持的一網(wǎng)種網(wǎng)絡(luò)虛擬化技術(shù)。VXLAN可以完全在內(nèi)核態(tài)實現(xiàn)封裝和解封裝工作,從而通過“隧道”機制,構(gòu)建出覆蓋網(wǎng)絡(luò)(Overlay Network)

為了能夠在二層網(wǎng)絡(luò)上打通“隧道”,VXLAN會在宿主機上設(shè)置一個特殊的網(wǎng)絡(luò)設(shè)備作為“隧道”的兩端,叫VTEP:VXLAN Tunnel End Point(虛擬隧道端點)

在該模式下,前面的ip分配工作不變(flannel0改成flannel.1),需要在發(fā)送方宿主機和接收方宿主機建立VXLAN隧道,即要創(chuàng)建VTEP。由其進行內(nèi)核態(tài)的封裝和解封裝操作,并且其是二層封裝,即封裝mac地址,而非udp的ip地址。

總結(jié)下:

docker0會將非本機的ip數(shù)據(jù)包發(fā)送給flannel.1,flannel.1找到目標主機的VTEP設(shè)備(通過本地緩存或者etcd查詢),設(shè)備信息由flanneld進程維護。找到設(shè)備信息后,封裝mac報文。然后發(fā)送給目標VTEP設(shè)備。目標VTEP設(shè)備收到后,進行拆包,然后經(jīng)由docker0發(fā)送給對端pod。

流程如下

pod1->docker0->flannel.1->VTEP1->(發(fā)送方網(wǎng)卡)->(中間路由器)->(接收方網(wǎng)卡)->VTEP2->flannel.1->docker0->pod2

流程還是很長,但是由于封包和解包操作由內(nèi)核執(zhí)行,所以效率相較udp更高。

模式三:host-GW

該模式下前面的ip分配和管理工作不變(不需要flannel0和flannel.1),還是由flanneld管理。其直接將etcd中保存的私網(wǎng)ip和宿主機ip信息轉(zhuǎn)化為路由信息下發(fā)給每個宿主機。將宿主機充當網(wǎng)關(guān)。flanneld只需要watch監(jiān)聽etcd中信息變化做對應(yīng)的修改。

流程如下

pod1->docker0->(發(fā)送方網(wǎng)卡)->(接收方網(wǎng)卡)->docker0->pod2

流程變短很多,但是由于需要將宿主機充當網(wǎng)關(guān)使用,所以要求,兩臺機器在同一個子網(wǎng)中。其效率也很高,但是當集群節(jié)點變多,路由信息不好維護。

Calico

Calico是采用三層的方案,其通過felix分配和管理ip,并通過bgp協(xié)議通告路由信息。

felix主要是負責網(wǎng)絡(luò)接口管理和監(jiān)聽、路由、ARP 管理、ACL 管理和同步、狀態(tài)上報等,可以類比成flanneld。由其來分配和管理ip,并且也是通過etcd進行持久化存儲。

通過bird進行bgp協(xié)議廣播。默認情況下兩兩節(jié)點需要互聯(lián),可以使用Route Reflector(RR)模式,選擇一個節(jié)點作為RR節(jié)點,其他節(jié)點與該節(jié)點互聯(lián),由RR節(jié)點同步其他節(jié)點的路由信息。

Calico兩種工作模式

IPIP模式

IPIP網(wǎng)絡(luò)就是將IP網(wǎng)絡(luò)封裝在IP網(wǎng)絡(luò)里。IPIP網(wǎng)絡(luò)的特點是所有pod的數(shù)據(jù)流量都從隧道tunl0發(fā)送,并且在tunl0這增加了一層傳輸層的封包。

類似flannel的vxlan模式,區(qū)別是ipip是三層,vxlan是二層隧道。

BGP模式

通過felix管理ip和路由,通過bird廣播bgp協(xié)議,通告路由信息。

類似flannel的host-Gw模式,區(qū)別是不需要在同一個子網(wǎng)中。


如果節(jié)點數(shù)量不多,那么flannel和calico都可以,如果節(jié)點數(shù)量較多,最好使用calico

除開Calico的bgp模式,理論上性能排序

flannel vxlan>calico ipip > flannel udp

理由是vxlan和ipip雖然都是內(nèi)核態(tài)封包和解包,但是vxlan是二層包,ipip是三層包,vxlan報文頭更短,一般來說層級更低,效率會更高。

至于ipip大于udp是因為一個是內(nèi)核態(tài)一個是用戶態(tài),當然內(nèi)核態(tài)性能更好。

以上個人屬于個人觀點,有不同意見歡迎交流


kubernetes網(wǎng)絡(luò)模型flannel和calico解析和對比的評論 (共 條)

分享到微博請遵守國家法律
银川市| 天峨县| 莫力| 三江| 定日县| 汉阴县| 桑日县| 瑞丽市| 盐津县| 合川市| 耒阳市| 含山县| 景宁| 石渠县| 治县。| 南靖县| 仪征市| 报价| 冀州市| 外汇| 兴宁市| 青田县| 井冈山市| 房产| 弋阳县| 柏乡县| 延津县| 祁东县| 开封县| 青阳县| 平原县| 乌兰察布市| 正宁县| 仙桃市| 江永县| 彭州市| 高陵县| 枣阳市| 石门县| 公主岭市| 军事|