近期公司的flannel網絡很不穩定,花時間研究了下並且保證雲端自動部署的網絡能夠正常work。
1.網絡拓撲
-
容器網卡通過docker0橋接到flannel0網卡,而每個host對應的flannel0網段為 10.1.x.[1-255]/24,而flannel所組成的一個跨host的網段為10.1.x.x/16,而flannel0則為flanneld 進程虛擬出來的網卡。
-
docker0的地址是由 /run/flannel/subnet.env 的 FLANNEL_SUBNET 參數決定的。
2.HostA的Container1和HostB的Container2如何通信
-
host A的container1請求host B的container2的的數據時,流程如下: 根據host A的路由規則 "10.1.15.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0“ 數據交給docker0處理。
-
docker0會收到數據,然後根據路由規則 ”10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 flannel0" 數據被交由給flannel0網卡處理。 flanneld會把數據封包然後送給eth0,用udp協議發送到對方host的eth0網卡。
-
host B的 eth0網卡收到後,根據路由規則 10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 flannel0" 則交給flannel0網卡處理。
-
flanneld會把數據解包,根據路由規則 “10.1.20.0 0.0.0.0 255.255.255.0 U 0 0 0 docker0" 交給docker0處理。
-
則host B的container 2 將會收到數據。
至此網路通信解釋完畢。
3.自動部署程序中添加物理機需要注意的地方
基於上,故而:
-
網卡docker0、flannel0網卡的正確建立。
-
路由被正確配置!10.1.x.[1-255]/24 和 10.1.x.x/16 兩個網段的正確路由配置。
-
我們的網絡環境檢查都基於此。通常情況下,以上兩者可以自動正確建立成功,但有時候會出現異常。
-
添加物理機時候檢查網絡環境 ifconfig docker0 和 flannel0並且需要正確配置路由規則。