您好,登錄后才能下訂單哦!
當您將多臺服務器節點組成一個Docker集群時,需要對集群網絡進行設置,否則默認情況下,無法跨主機容器互聯,接下來我們首先分析一下原因。
下圖描述了一個簡單的集群網絡,在該集群內,有兩臺服務器甲和乙,每臺服務器上都有兩張網卡,分別連接公網和私網,兩臺服務器可以通過私網互聯,在兩個服務器節點上分別安裝了Docker,并且運行了A/B/C/D 4個容器。
每臺服務器節點上都有一個
docker0
網橋,這是docker啟動后初始化的虛擬設備,每個容器都與
docker0
網橋連接,并且,容器的IP由docker自動分配。
但是這個默認情況下的網絡設置不支持跨主機的容器互聯,原因有兩方面。
比如,容器A要訪問容器D,請求的地址為
192.168.1.4
,但是主機甲并不知道該將這個IP發送到那個網絡設備上,主機甲也不知道主機乙內部有個容器D。
默認情況下,docker啟動后初始化
docker0
網橋時,會隨機分配一個IP段,那么,如果不加以協調,多個節點內的容器網絡有可能會沖突,比如上圖中兩個網絡都采用了
192.168.1.1/24
網段,在這種情況下,就會導致容器IP沖突,比如 B 和 C。
那么,只需要解決這兩個問題,我們就可以實現跨主機的容器互聯。
使用 脈沖云 可以非常輕易地完成集群網絡設置。在增加集群時,只需要將集群的網絡類型設置為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
,網段中的第一個IP172.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
作為容器網絡。
在上文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設備的網絡拓撲中,局域網內的主機只有內網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。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。