1. 提出問題的目的
為什么k8s的pod需要基於一個overlay網絡,比如flannel呢?
提出這個問題的目的,是為了搞懂overlay網絡在k8s的必要性,並且可以理解overlay網絡在k8s網絡架構中的位置和作用
2. 假設沒有overlay網絡會怎樣
我們先從一個假設開始,如果k8s的pod網絡不是建立在一個大二層的overlay網絡之上,那么pod網絡應該如何設計(如何分配消息和如何通訊);
通過分析這個假設,來理解flannel的用處和必要性
官方的說法是,flannel提供pod跨節點(node)的通訊
我們先看看報文是如何跨節點通訊的
node1上:pod1->cni1->flannel1->node1的網卡
node2上: node2的網卡接收到數據-> flannel2->cni2->pod2

設想一下,如果沒有flannel構造的overlay網絡,cni使用的是underlay網絡的ip(就是node物理網卡所屬網絡的ip)
我們從分配ip階段和傳輸數據階段來分析無overlay網絡的情況下,如何設計
在分配pod id階段:
因為pod id是基於underlay網絡的,所以會預留underlay網絡的一部分ip網段用於分配給pod;
那么這樣就會遇到幾個問題
- ip資源少,比如underlay網絡若是192.168.0.0/24網段,那么其中能留給pod使用的ip個數就非常少了
- 如果underlay網絡是由兩個不同網段的網絡通過交換機或其它的隧道技術連接起來的,那么也會出現跨網段的pod ip(即有些pod ip是屬於網段1,有些pod ip屬於網段2),當然這不會影響pod間的通訊
- underlay網絡修改網段時,會導致pod ip同時變更
- 當pod進行跨網段遷移(遷移到不同的數據中心),pod ip必須要變化,包括相關的路由配置,service路由配置都要同步更新
在傳輸數據階段:
1. 兩個數據中心,也可能有相同ip的機器,這樣通訊就要通過代理、nat或端口映射技術才能通訊,而引用overlay網絡的目的就是希望pod之間能直接通訊
3. 總結
如果pod ip不是基於overlay網絡,而是基於underlay網絡,那么會遇到以下的問題
1. 可分配ip數目依賴於underlay網絡的網絡規划,有可能可用ip數目很少
2. 跨網段通訊需要nat或其它映射技術的支持
3. underlay網絡ip的變化有可能會導致pod ip的變化
因此, pod基於overlay網絡之上,是使用構造虛擬網絡來解耦真實網絡,
它帶來的好處就是官方所說的,如下:
1. pod之間通訊可直接通訊,而不需要nat等地址映射技術
2. overlay網絡與underlay網絡解耦
3. ip資源豐富,不依賴於underlay網絡的ip資源