天天看點

簡單聊聊Calico與Flannel

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

本人在接觸k8s的2年多過程中對于flannel和calico都使用過,也查閱資料了解過此兩種網絡的底層,今天簡單聊聊Calico與Flannel兩種網絡,如有錯誤之處歡迎指正。

容器虛拟化網絡方案,總體分為2種截然不同的發展路線:

  • 基于隧道
  • 基于路由

1、隧道方案最具普适性,在任何網絡環境下都可以正常工作,這與它的原理密不可分。

2、最常見的隧道方案是flannel vxlan模式,以及calico的ipip模式,其核心原理包含了2個部分。

配置設定網段

每台主控端上都有網絡插件的agent程序,它們連接配接到etcd集中式存儲,從虛拟IP池中申請一個IP段占位己有,主控端上每個容器則從IP段中配置設定得到1個虛拟IP。

封裝/解封

1)、當不同主控端上的容器互相通路時,資料包的源IP和目标IP都是容器IP。

2)、資料包經過主控端的agent程序進行封裝後,新資料包的源IP和目标IP則變成了兩端主控端的實體IP。

3)、資料包送到目标主控端後,經過agent解封後得到原始資料包,并将資料包送入容器中處理,這就給兩端容器營造了一種互通的感覺。

4)、因為實體IP屬于3層網絡,可以在網際網路中經過中間路由裝置互相送達,是以隧道方案對主控端之間的網絡環境沒有特殊要求,是以隧道方案具備普适性。

優勢/劣勢

優勢就是對實體網絡環境沒有特殊要求,隻要主控端IP層可以路由互通即可。

劣勢就是性能差,這需要從以下方面看:

  • 封包和解包耗費CPU性能;
  • 額外的封裝導緻帶寬浪費,大約有30%左右的帶寬損耗;

flannel vxlan和calico ipip模式都是隧道方案,但是calico的封裝協定IPIP的header更小,是以性能比flannel vxlan要好一點點。

1、路由方案性能最好,原因是該方案不需要封包和解包,是以沒有隧道方案的劣勢,網絡性能很好。

2、常見的路由方案包括了flannel的host-gw模式,以及calico的bgp模式。

下面以calico bpg模式為例,分析基于路由的方案原理,其包含了3個部分。

每台主控端也有agent,會從etcd中的虛拟IP池配置設定到一個IP子網段,主控端上每個容器則從該IP段中配置設定得到1個虛拟IP。

本地路由

1)、假設我們在主控端A上建立了一個容器,則該容器配置設定了一個虛拟IP,我們假設它是值是k。

2)、agent會在本機配置一條路由規則,即:如果資料包的目标位址等于k,那麼把資料包送到容器的虛拟網卡上。

3)、另外一台主控端B上的一個容器,其IP是m,向k容器發資料包,則資料包的目标位址是k,原位址是m。

4)、既然路由方案是不使用隧道封包為實體IP在網絡中流通的,那麼該資料包又該如何送達到虛拟IP k呢?

廣播路由

1)、路由方案會采用如下的手段,搞定m到k的虛拟IP互通問題。

2)、即主控端A會通過某種方式(比如BGP廣播協定)把自己的虛拟IP網段廣播給主控端B。

3)、在主控端B收到廣播後,會給本機配置一條路由規則:如果資料包的目标位址屬于主控端A的虛拟IP網段,則把該資料包發給主控端A的實體IP。

4)、這條路由規則相當于為主控端A的虛拟IP網段配置了轉發網關,而這個網關就是主控端A的實體IP。這就要求,主控端B和主控端A在2層網絡是互通的,也就是它們在一個交換機下面,可以基于MAC位址直接互通。

5)、一旦該資料包被送往主控端A的實體IP,則主控端A就可以應用剛才講過的”本地路由“規則了,即:資料包的目标IP是k,直接送給對應容器的虛拟網卡。

整個過程中從m發往k的資料包采用的都是虛拟容器IP,沒有經過任何封裝和解封,而僅僅是通過主控端B收到的廣播路由+主控端A的本地路由,就實作了在2層網絡互通環境下的高效通訊。

優勢就是沒有封包和解包過程,完全基于兩端主控端的路由表進行轉發。

劣勢包含2方面:

要求主控端處于同一個2層網絡下,也就是連在一台交換機上,這樣才能基于MAC通訊,而不需要在IP上動封包/解包的手腳。

路由表膨脹導緻性能降低,因為主控端上每個容器需要在本機添加一條路由規則,而不同主控端之間需要廣播自己的網段路由規則。

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/live

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-06-28

本文作者:小小程式員

本文來自:“

dockone

”,了解相關資訊可以關注“dockone”

繼續閱讀