摘要:在上面這一大段話中,我們可以了解到是一個基于服務(wù)發(fā)現(xiàn)的系統(tǒng)。服務(wù)發(fā)現(xiàn)可理解為在一個集群內(nèi)記錄各信息的數(shù)據(jù)庫,其他可通過該數(shù)據(jù)庫獲取該集群內(nèi)各的信息。
概念
由我上篇博文Docker網(wǎng)絡(luò)解讀可知,flannel主要用來解決容器的跨主機通信問題,同時也是kubernetes主要實現(xiàn)網(wǎng)絡(luò)互通的方式,那么flannel是如何實現(xiàn)容器間跨主機通信的呢,下面我們引入flannel github上的一張原理圖來解讀:
要完整解讀此圖,在此之前,我們首先要了解下flannel關(guān)聯(lián)的一個重要組件"Etcd”的概念。
我們引用下Etcd的基本概念:etcd是一個高可用的鍵值存儲系統(tǒng),主要用于共享配置和服務(wù)發(fā)現(xiàn)。etcd是由CoreOS開發(fā)并維護的,靈感來自于 ZooKeeper 和 Doozer,它使用Go語言編寫,并通過Raft一致性算法處理日志復(fù)制以保證強一致性。Raft是一個來自Stanford的新的一致性算法,適用于分布式系統(tǒng)的日志復(fù)制,Raft通過選舉的方式來實現(xiàn)一致性,在Raft中,任何一個節(jié)點都可能成為Leader。Google的容器集群管理系統(tǒng)Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。
在上面這一大段話中,我們可以了解到etcd是一個基于服務(wù)發(fā)現(xiàn)的系統(tǒng)。服務(wù)發(fā)現(xiàn)可理解為在一個Cluster集群內(nèi)記錄各node信息的數(shù)據(jù)庫,其他node可通過該數(shù)據(jù)庫獲取該Cluster集群內(nèi)各node的信息。
Flannel實現(xiàn)原理了解了以上概念之后,我們就能說明flannel的實現(xiàn)原理了,為了解釋清楚,我們把實現(xiàn)原理分為以下幾個步驟:
數(shù)據(jù)從Web App Frontend1這個容器發(fā)出經(jīng)veth0網(wǎng)橋轉(zhuǎn)發(fā)到宿主機的docker0網(wǎng)橋上
docker0網(wǎng)橋根據(jù)數(shù)據(jù)包的目的地址進行轉(zhuǎn)發(fā),若為非本機容器地址則轉(zhuǎn)發(fā)給Flannel0網(wǎng)卡處理
Flannel0網(wǎng)卡交給flanneld這個進程處理,flanneld通過查詢etcd,找到目的容器地址,并進行轉(zhuǎn)發(fā)
數(shù)據(jù)包到達目的主機,經(jīng)flanneld解包,最后由docker0轉(zhuǎn)發(fā)到目的容器
這樣整個數(shù)據(jù)包發(fā)送過程就解釋完成了。
當(dāng)然僅僅是這樣還不夠,flannel為每個在它管理下的容器賦予了一個獨立的不會重復(fù)的ip地址,這樣跨主機容器的ip地址就不會重復(fù)了,在這個前提下才能實現(xiàn)以上步驟的精確轉(zhuǎn)發(fā)。
總結(jié)flannel為集群內(nèi)每個容器分配一個獨立的ip地址,通過etcd的服務(wù)發(fā)現(xiàn)功能存儲各node容器的ip信息,實現(xiàn)數(shù)據(jù)包的精確轉(zhuǎn)發(fā),解決了各容器間的跨主機通信問題。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27586.html
摘要:是一個專為定制的三層網(wǎng)絡(luò)解決方案,主要用于解決容器的跨主機通信問題。收到的數(shù)據(jù)包被轉(zhuǎn)發(fā)到進程。查詢路由表,解封包,并將數(shù)據(jù)包發(fā)送到。然后在網(wǎng)絡(luò)層的源和目的均是容器的,虛擬。默認(rèn)也是使用容器網(wǎng)絡(luò)方案,其官網(wǎng)也清晰的畫出了的。 前言 我們知道docker官方并沒有提供多主機的容器通信方案,單機網(wǎng)絡(luò)的模式主要有host,container,brige,none。none這種模式,顧名思義就是...
摘要:是一個專為定制的三層網(wǎng)絡(luò)解決方案,主要用于解決容器的跨主機通信問題。收到的數(shù)據(jù)包被轉(zhuǎn)發(fā)到進程。查詢路由表,解封包,并將數(shù)據(jù)包發(fā)送到。然后在網(wǎng)絡(luò)層的源和目的均是容器的,虛擬。默認(rèn)也是使用容器網(wǎng)絡(luò)方案,其官網(wǎng)也清晰的畫出了的。 前言 我們知道docker官方并沒有提供多主機的容器通信方案,單機網(wǎng)絡(luò)的模式主要有host,container,brige,none。none這種模式,顧名思義就是...
摘要:今天主要針對版本進行源碼分析。外部接口的定義如下創(chuàng)建子網(wǎng)管理器負責(zé)子網(wǎng)的創(chuàng)建更新添加刪除監(jiān)聽等,主要和打交道定義續(xù)約。在到期之前,子網(wǎng)管理器調(diào)用該方法進行續(xù)約。 前言 之前在k8s與網(wǎng)絡(luò)--Flannel解讀一文中,我們主要講了Flannel整體的工作原理。今天主要針對Flannel v0.10.0版本進行源碼分析。首先需要理解三個比較重要的概念: 網(wǎng)絡(luò)(Network):整個集群中...
摘要:今天主要針對版本進行源碼分析。外部接口的定義如下創(chuàng)建子網(wǎng)管理器負責(zé)子網(wǎng)的創(chuàng)建更新添加刪除監(jiān)聽等,主要和打交道定義續(xù)約。在到期之前,子網(wǎng)管理器調(diào)用該方法進行續(xù)約。 前言 之前在k8s與網(wǎng)絡(luò)--Flannel解讀一文中,我們主要講了Flannel整體的工作原理。今天主要針對Flannel v0.10.0版本進行源碼分析。首先需要理解三個比較重要的概念: 網(wǎng)絡(luò)(Network):整個集群中...
摘要:今天主要針對版本進行源碼分析。外部接口的定義如下創(chuàng)建子網(wǎng)管理器負責(zé)子網(wǎng)的創(chuàng)建更新添加刪除監(jiān)聽等,主要和打交道定義續(xù)約。在到期之前,子網(wǎng)管理器調(diào)用該方法進行續(xù)約。 前言 之前在k8s與網(wǎng)絡(luò)--Flannel解讀一文中,我們主要講了Flannel整體的工作原理。今天主要針對Flannel v0.10.0版本進行源碼分析。首先需要理解三個比較重要的概念: 網(wǎng)絡(luò)(Network):整個集群中...
閱讀 2324·2021-11-22 12:01
閱讀 2001·2021-11-12 10:34
閱讀 4526·2021-09-22 15:47
閱讀 2837·2019-08-30 15:56
閱讀 2870·2019-08-30 15:53
閱讀 2411·2019-08-30 13:53
閱讀 3387·2019-08-29 15:35
閱讀 3132·2019-08-29 12:27