Flannel跨主機互聯概述及容器網絡拓撲圖

當您將多臺服務器節點組成一個Docker集羣時,須要對集羣網絡進行設置,不然默認狀況下,沒法跨主機容器互聯,接下來咱們首先分析一下緣由。docker

跨主機容器互聯

下圖描述了一個簡單的集羣網絡,在該集羣內,有兩臺服務器甲和乙,每臺服務器上都有兩張網卡,分別鏈接公網和私網,兩臺服務器能夠經過私網互聯,在兩個服務器節點上分別安裝了Docker,而且運行了A/B/C/D 4個容器。服務器

每臺服務器節點上都有一個 docker0 網橋,這是docker啓動後初始化的虛擬設備,每一個容器都與docker0網橋鏈接,而且,容器的IP由docker自動分配。網絡

可是這個默認狀況下的網絡設置不支持跨主機的容器互聯,緣由有兩方面。性能

一,跨主機訪問容器,沒有有效路由阿里雲

好比,容器A要訪問容器D,請求的地址爲 192.168.1.4 ,可是主機甲並不知道該將這個IP發送到那個網絡設備上,主機甲也不知道主機乙內部有個容器D。spa

二,多個節點上的容器網段衝突code

默認狀況下,docker啓動後初始化 docker0 網橋時,會隨機分配一個IP段,那麼,若是不加以協調,多個節點內的容器網絡有可能會衝突,好比上圖中兩個網絡都採用了 192.168.1.1/24 網段,在這種狀況下,就會致使容器IP衝突,好比 B 和 C。blog

那麼,只須要解決這兩個問題,咱們就能夠實現跨主機的容器互聯。路由

脈衝雲集羣網絡設置

使用脈衝雲能夠很是輕易地完成集羣網絡設置。在增長集羣時,只須要將集羣的網絡類型設置爲Flannel便可。文檔

Flannel 是一個專門用於容器網絡互聯的軟件,脈衝雲會自動地在您的服務器節點上部署Flannel實現容器互聯。

設置Flannel時,能夠指定容器局域網段和子網掩碼,如上圖所示,若是選擇局域網段爲 172.16.0.0/12 子網掩碼爲 255.255.240.0 那麼,在整個集羣網絡中,就能夠分配256個子網,IP段分別爲172.16.0.0/20、 172.16.16.0/20、 172.16.32.0/20 等等,每一個子網中能夠再分配 4096 個IP。每一個節點的 docker0 網橋使用一個子網,每一個容器使用一個子網內的IP,那麼咱們就能夠組成下圖中所示網絡。

圖中,主機甲的docker被分配到了 172.16.0.1/20 子網,主機已的docker被分配到了172.16.16.1/20 子網,兩個子網都處在一個由Flannel管理的虛擬網絡 172.16.0.0/12 中,圖中以虛線表明。

到此,在Flannel的協調下,各個主機上的Docker子網IP就不會再衝突了,另外,Flannel會維護容器網絡的路由規則,容器A就能夠經過172.16.16.3訪問容器D了,也就實現了跨主機容器互聯。

Flannel維護的容器網絡是一個虛擬網絡,在圖中的虛線也是爲了抽象理解,若是你對Flannel的實現方式感興趣,能夠繼續查閱Flannel的官方文檔。

一些說明

  • 上文中爲了簡化方便理解,網橋IP和子網IP段沒有分開說明,在上圖中,主機甲所分配的子網網段是 172.16.0.0/20 ,網段中的第一個IP 172.16.0.1 ,用做網橋設備的IP。
  • 因爲一個網段中第一個IP用做網橋設備IP,最後一個IP用做廣播IP,因此在一個子網中,理論上能夠分配 4096 個IP,可是實際上只有 4094 個IP可用。
  • 在設置脈衝雲集羣網絡時,選擇的集羣網段請勿與已經存在的網絡衝突,好比目標集羣已經存在了 10.0.0.0/8 網絡,那麼請選擇 172.16.0.0/12 或 192.168.0.0/16 做爲容器網絡。

組網IP

在上文Flannel網絡的示意圖中,有三個網絡,公網 0.0.0.0/0 ,私網 10.0.0.0/8 和虛擬的容器網絡 172.16.0.0/12 ,強調容器網絡是虛擬網絡 緣由是,這個網絡上的數據必須以其餘網絡爲載體,這個網絡是一個二級網絡。

好比,主機甲上的容器A給主機乙上的容器D發送數據,數據會被路由到 docker0 網橋上,而後數據會被Flannel經過主機甲的真實網卡,發送到主機乙的網卡上,主機乙上運行的Flannel,繼續將數據轉發到主機乙的docker0 網橋上,最後到達容器D。

那麼若是主機有多張網卡,就像圖中那樣,有兩張網卡分別鏈接公網和私網,那麼咱們須要爲Flannel指定一個網卡/IP用以發送數據,這個IP,咱們稱爲 組網IP。即告訴主機甲上運行的Flannel,使用哪一個網卡/IP 去尋找主機乙。

使用脈衝雲組建的集羣,會默認使用節點的公網IP做爲組網IP。那麼,多個節點之間的數據通訊會被髮送到公網之上,除非是跨機房互聯,通常狀況下,咱們但願節點間經過內網傳輸數據,以提升性能,或下降費用。

將主機添加到集羣后,在主機設置頁面,選擇組網IP便可指定各個主機節點分別使用的組網IP。

NAT設備後的集羣

NAT,即網絡地址轉換,經常使用的路由器就是NAT設備,在有NAT設備的網絡拓撲中,局域網內的主機只有內網IP,沒有公網IP,網絡以下所示:

在這種網絡模型下,各個服務器節點主機都經過路由器 8.8.8.8 鏈接脈衝雲,因此脈衝雲只能獲取到各個服務器的公網IP爲 8.8.8.8 ,按上文所述,脈衝雲會默認使用公網IP 8.8.8.8 做爲Flannel的組網IP,在這種狀況下,會致使Flannel組網失敗,甚至Flannel會沒法啓動,由於主機上並不存在一個IP爲 8.8.8.8 的網卡。

爲解決這種問題,只須要手動設置每個節點的組網IP便可。

某些雲服務商的主機也是在NAT設備以後的,好比阿里雲服務器,若是使用了阿里雲的VPC網絡,即便給服務器綁定了公網IP 8.8.8.8,可是從主機上看,並無綁定公網IP的網卡設備,只有一個內網網卡,緣由就是有NAT設備存在。這種狀況下,也須要指定內網IP爲組網IP。

相關文章
相關標籤/搜索