flannel--容器跨主機網絡通信方案

相關概念:

#udp工作模式用到的

TUN設備:是一種工作在三層(網絡層)的虛擬網絡設備;主要作用是,在內核和應用程序間傳遞IP包

flannel0:是由flanneld創建的TUN設備;

#vxlan工作模式用到的

VTEP設備:它是在二層進行封裝和解封裝操作

flannel.1:是由flanneld創建的VTEP設備,.1(VNI)的作用是讓VTEP設備識別數據幀是不是由自己處理的標識

#flannel進程

subnet:子網(flannel會爲每個節點分配一個子網,保存在etcd中)

flanneld:負責子網的路由信息,在每臺node上生成路由信息

flannel的工作模式:overlay(疊加)網絡

1.UDP(最早出現的工作模式,效率最低的一種)

2.VxLAN(Virtual Extensible LAN,虛擬可擴展局域網,Linux內核本身支持的網絡虛擬化技術)

3.host-gw(效率最高,不能跨網段)

flannel工作示例:以下2個container需要跨主機通信

  • Node1的容器container-1的IP:100.96.1.2

  • Node2的容器container-2的IP:100.96.2.3

UDP工作模式:需要在用戶態和內核態之間切換

查看node1上的路由;

# 在 Node 1 上
$ ip route
default via 10.168.0.1 dev eth0
100.96.0.0/16 dev flannel0  proto kernel  scope link  src 100.96.1.0
100.96.1.0/24 dev docker0  proto kernel  scope link  src 100.96.1.1
10.168.0.0/24 dev eth0  proto kernel  scope link  src 10.168.0.2

可以看到container-1需要訪問container-2時,需要通過第一條路由規則(通過flannel0),然後交給flanneld處理;

數據包在經過flanneld處理完成之後,交由第三條路由規則(通過eth0)發出;

數據包走向過程:可以看到有3次的用戶態和內核態的數據拷貝

    84caa6dc3f9dcdf8b88b56bd2e22138d.png

  • 第一次:用戶態的容器進程發出的 IP 包經過 docker0 網橋進入內核態;

  • 第二次:IP 包根據路由表進入 TUN(flannel0)設備,從而回到用戶態的 flanneld 進程;

  • 第三次:flanneld 進行 UDP 封包之後重新進入內核態,將 UDP 包通過宿主機的 eth0 發出去。

  注:由於多次發生了用戶態到內核態的切換,這是造成效率低的原因,也是優化的重點

VxLAN工作模式:直接在內核態完成數據包的封裝

注:當新node加入flannel網絡後,會在已有的node上增加一條路由(從已有node的VTEP設備到新加入node的VTEP設備的路由

在vxlan模式下,會創建一個名字爲flannel.1的VTEP設備;

此設備的作用是在內核中將收到的IP包進行封裝,發送給目的VTEP設備;

問:要發送給目的VTEP設備就需要知道目的VTEP設備的MAC地址,如何知道呢?

答:在新node上,當flanneld啓動時,會自動通過ARP在已有的node上記錄新node的flannel.1的MAC地址(通過ip neigh查看)

flannel.1知道了目的VTEP設備的路由和MAC地址,就可以在內核態進行封包工作了

問:知道了目的VTEP設備的MAC後,數據包最終要發給哪臺物理機呢?

答:flannel.1轉發的依據,來自於一個叫作FDB的轉發數據庫(由flanneld進程維護),可以通過bridge fdb命令查看;

       此轉換數據庫記錄了要訪問目標VTEP設備的MAC地址,需要轉發到的真實IP的機器

在目標node收到數據包解封后,根據VNI=1的值,來決定是不是由flannel.1進行處理(拆包操作),並最終交由docker0處理;

特別注意:docker0網橋的地址範圍必須是Flannel爲宿主機分配的子網;這樣在通過flannel0或者flannel.1設備後,纔會交給docker0處理;


總結:

1.vxlan模式通過創建的flannel.1設備,在內核態完成數據封裝和解封,提高轉發效率;

2.新節點加入flannel網絡時,會在老的flannel節點增加到新節點的flannel.1設備的路由信息、mac地址信息、所在物理節點的ip(由flanneld進程維護)

3.通過知道路由信息、mac地址信息、物理ip(通過bridge fdb查看)後就可以開始數據包的封裝操作;

host-gw工作模式:無需要封包、解包操作,效率最高

host-gw原理:其實就是將每個flannel的子網的下一跳,設置成該子網對應的宿主機的IP地址(路由規則,route -n查看);

host-gw通過host-gw的方式,實現了將數據包通過路由規則直接轉發,而無須進行封包、解包;

host-gw的核心:在於IP包在封裝成幀發送出去的時候,會使用路由表的“下一跳”來設置目的MAC地址;由於通過二層網絡到達目的宿主機

所以:host-gw模式必須要求集羣宿主機之間是二層連通的

通過路由規則進行轉發示意圖:

    824da616633528ad503bcdaa57e67222.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章