摘要:每個節點的網橋使用一個子網,每個容器使用一個子網內的,那么我們就可以組成下圖中所示網絡。到此,在的協調下,各個主機上的子網就不會再沖突了,另外,會維護容器網絡的路由規則,容器就可以通過訪問容器了,也就實現了跨主機容器互聯。
當您將多臺服務器節點組成一個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和子網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 作為容器網絡。
在上文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。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97230.html
摘要:模式容器直接使用宿主機的網絡配置,包括網卡,路由等,這種方案下,從網絡層面來看,容器就不是容器了,只是一個宿主機上的進程端口而已。 注:本篇僅僅是對各個網絡方案的簡介和思考。需要深入學習如何部署和使用的同學請自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網易蜂巢,daocloud,時速云這類的已經成熟化的公有云服務,許多中小型企業內部也在試圖將docker...
摘要:模式容器直接使用宿主機的網絡配置,包括網卡,路由等,這種方案下,從網絡層面來看,容器就不是容器了,只是一個宿主機上的進程端口而已。 注:本篇僅僅是對各個網絡方案的簡介和思考。需要深入學習如何部署和使用的同學請自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網易蜂巢,daocloud,時速云這類的已經成熟化的公有云服務,許多中小型企業內部也在試圖將docker...
摘要:是一個專為定制的三層網絡解決方案,主要用于解決容器的跨主機通信問題。收到的數據包被轉發到進程。查詢路由表,解封包,并將數據包發送到。然后在網絡層的源和目的均是容器的,虛擬。默認也是使用容器網絡方案,其官網也清晰的畫出了的。 前言 我們知道docker官方并沒有提供多主機的容器通信方案,單機網絡的模式主要有host,container,brige,none。none這種模式,顧名思義就是...
摘要:是一個專為定制的三層網絡解決方案,主要用于解決容器的跨主機通信問題。收到的數據包被轉發到進程。查詢路由表,解封包,并將數據包發送到。然后在網絡層的源和目的均是容器的,虛擬。默認也是使用容器網絡方案,其官網也清晰的畫出了的。 前言 我們知道docker官方并沒有提供多主機的容器通信方案,單機網絡的模式主要有host,container,brige,none。none這種模式,顧名思義就是...
閱讀 517·2021-10-09 09:44
閱讀 2092·2021-09-02 15:41
閱讀 3555·2019-08-30 15:53
閱讀 1834·2019-08-30 15:44
閱讀 1291·2019-08-30 13:10
閱讀 1197·2019-08-30 11:25
閱讀 1467·2019-08-30 10:51
閱讀 3368·2019-08-30 10:49