Flannel網絡原理
overlay網絡簡介
overlay(又叫疊加網絡、覆寫網絡)簡單了解就是把一個邏輯網絡建立在一個實體網絡之上。就好比C/S架構是overlay internet、最開始網絡overlay 電話網絡、現在語音通信overlay ip 網絡。我們現在說的overlay是将二層資料包重新封裝在UDP中。比如IPsec over GRE就是一種嵌入式封裝。
覆寫網絡就是應用層網絡,它是面向應用層的,不考慮或很少考慮網絡層,實體層的問題。
詳細說來,覆寫網絡是指建立在另一個網絡上的網絡。該網絡中的結點可以看作通過虛拟或邏輯鍊路而連接配接起來的。雖然在底層有很多條實體鍊路,但是這些虛拟或邏輯鍊路都與路徑一一對應。例如:許多P2P網絡就是覆寫網絡,因為它運作在互連網的上層。覆寫網絡允許對沒有IP位址辨別的目的主機路由資訊,例如:Freenet 和DHT(分布式哈希表)可以路由資訊到一個存儲特定檔案的結點,而這個結點的IP位址事先并不知道。
覆寫網絡被認為是一條用來改善互連網路由的途徑,讓二層網絡在三層網絡中傳遞,既解決了二層的缺點,又解決了三層的不靈活!
Flannel的工作原理
Flannel實質上是一種“覆寫網絡(overlay network)”,也就是将TCP資料包裝在另一種網絡包裡面進行路由轉發和通信,目前已經支援UDP、VxLAN、AWS VPC和GCE路由等資料轉發方式。
預設的節點間資料通信方式是UDP轉發。

工作原理
資料從源容器中發出後,經由所在主機的docker0虛拟網卡轉發到flannel0虛拟網卡,這是個P2P的虛拟網卡,flanneld服務監聽在網卡的另外一端。
Flannel通過Etcd服務維護了一張節點間的路由表,詳細記錄了各節點子網網段 。
源主機的flanneld服務将原本的資料内容UDP封裝後根據自己的路由表投遞給目的節點的flanneld服務,資料到達以後被解包,然後直接進入目的節點的flannel0虛拟網卡,然後被轉發到目的主機的docker0虛拟網卡,最後就像本機容器通信一下的有docker0路由到達目标容器