摘要:每個(gè)節(jié)點(diǎn)的網(wǎng)橋使用一個(gè)子網(wǎng),每個(gè)容器使用一個(gè)子網(wǎng)內(nèi)的,那么我們就可以組成下圖中所示網(wǎng)絡(luò)。到此,在的協(xié)調(diào)下,各個(gè)主機(jī)上的子網(wǎng)就不會(huì)再?zèng)_突了,另外,會(huì)維護(hù)容器網(wǎng)絡(luò)的路由規(guī)則,容器就可以通過訪問容器了,也就實(shí)現(xiàn)了跨主機(jī)容器互聯(lián)。
當(dāng)您將多臺(tái)服務(wù)器節(jié)點(diǎn)組成一個(gè)Docker集群時(shí),需要對(duì)集群網(wǎng)絡(luò)進(jìn)行設(shè)置,否則默認(rèn)情況下,無法跨主機(jī)容器互聯(lián),接下來我們首先分析一下原因。
跨主機(jī)容器互聯(lián)下圖描述了一個(gè)簡單的集群網(wǎng)絡(luò),在該集群內(nèi),有兩臺(tái)服務(wù)器甲和乙,每臺(tái)服務(wù)器上都有兩張網(wǎng)卡,分別連接公網(wǎng)和私網(wǎng),兩臺(tái)服務(wù)器可以通過私網(wǎng)互聯(lián),在兩個(gè)服務(wù)器節(jié)點(diǎn)上分別安裝了Docker,并且運(yùn)行了A/B/C/D 4個(gè)容器。
每臺(tái)服務(wù)器節(jié)點(diǎn)上都有一個(gè) docker0 網(wǎng)橋,這是docker啟動(dòng)后初始化的虛擬設(shè)備,每個(gè)容器都與docker0網(wǎng)橋連接,并且,容器的IP由docker自動(dòng)分配。
但是這個(gè)默認(rèn)情況下的網(wǎng)絡(luò)設(shè)置不支持跨主機(jī)的容器互聯(lián),原因有兩方面。
一,跨主機(jī)訪問容器,沒有有效路由比如,容器A要訪問容器D,請(qǐng)求的地址為 192.168.1.4 ,但是主機(jī)甲并不知道該將這個(gè)IP發(fā)送到那個(gè)網(wǎng)絡(luò)設(shè)備上,主機(jī)甲也不知道主機(jī)乙內(nèi)部有個(gè)容器D。
二,多個(gè)節(jié)點(diǎn)上的容器網(wǎng)段沖突默認(rèn)情況下,docker啟動(dòng)后初始化 docker0 網(wǎng)橋時(shí),會(huì)隨機(jī)分配一個(gè)IP段,那么,如果不加以協(xié)調(diào),多個(gè)節(jié)點(diǎn)內(nèi)的容器網(wǎng)絡(luò)有可能會(huì)沖突,比如上圖中兩個(gè)網(wǎng)絡(luò)都采用了 192.168.1.1/24 網(wǎng)段,在這種情況下,就會(huì)導(dǎo)致容器IP沖突,比如 B 和 C。
那么,只需要解決這兩個(gè)問題,我們就可以實(shí)現(xiàn)跨主機(jī)的容器互聯(lián)。
脈沖云集群網(wǎng)絡(luò)設(shè)置使用脈沖云可以非常輕易地完成集群網(wǎng)絡(luò)設(shè)置。在增加集群時(shí),只需要將集群的網(wǎng)絡(luò)類型設(shè)置為Flannel即可。
Flannel 是一個(gè)專門用于容器網(wǎng)絡(luò)互聯(lián)的軟件,脈沖云會(huì)自動(dòng)地在您的服務(wù)器節(jié)點(diǎn)上部署Flannel實(shí)現(xiàn)容器互聯(lián)。
設(shè)置Flannel時(shí),可以指定容器局域網(wǎng)段和子網(wǎng)掩碼,如上圖所示,如果選擇局域網(wǎng)段為 172.16.0.0/12 子網(wǎng)掩碼為 255.255.240.0 那么,在整個(gè)集群網(wǎng)絡(luò)中,就可以分配256個(gè)子網(wǎng),IP段分別為 172.16.0.0/20、 172.16.16.0/20、 172.16.32.0/20 等等,每個(gè)子網(wǎng)中可以再分配 4096 個(gè)IP。每個(gè)節(jié)點(diǎn)的 docker0 網(wǎng)橋使用一個(gè)子網(wǎng),每個(gè)容器使用一個(gè)子網(wǎng)內(nèi)的IP,那么我們就可以組成下圖中所示網(wǎng)絡(luò)。
圖中,主機(jī)甲的docker被分配到了 172.16.0.1/20 子網(wǎng),主機(jī)已的docker被分配到了172.16.16.1/20 子網(wǎng),兩個(gè)子網(wǎng)都處在一個(gè)由Flannel管理的虛擬網(wǎng)絡(luò) 172.16.0.0/12 中,圖中以虛線代表。
到此,在Flannel的協(xié)調(diào)下,各個(gè)主機(jī)上的Docker子網(wǎng)IP就不會(huì)再?zèng)_突了,另外,F(xiàn)lannel會(huì)維護(hù)容器網(wǎng)絡(luò)的路由規(guī)則,容器A就可以通過172.16.16.3訪問容器D了,也就實(shí)現(xiàn)了跨主機(jī)容器互聯(lián)。
Flannel維護(hù)的容器網(wǎng)絡(luò)是一個(gè)虛擬網(wǎng)絡(luò),在圖中的虛線也是為了抽象理解,如果你對(duì)Flannel的實(shí)現(xiàn)方式感興趣,可以繼續(xù)查閱Flannel的官方文檔。
一些說明組網(wǎng)IP· 上文中為了簡化方便理解,網(wǎng)橋IP和子網(wǎng)IP段沒有分開說明,在上圖中,主機(jī)甲所分配的子網(wǎng)網(wǎng)段是 172.16.0.0/20 ,網(wǎng)段中的第一個(gè)IP 172.16.0.1 ,用作網(wǎng)橋設(shè)備的IP。
· 由于一個(gè)網(wǎng)段中第一個(gè)IP用作網(wǎng)橋設(shè)備IP,最后一個(gè)IP用作廣播IP,所以在一個(gè)子網(wǎng)中,理論上可以分配 4096 個(gè)IP,但是實(shí)際上只有4094 個(gè)IP可用。
· 在設(shè)置脈沖云集群網(wǎng)絡(luò)時(shí),選擇的集群網(wǎng)段請(qǐng)勿與已經(jīng)存在的網(wǎng)絡(luò)沖突,比如目標(biāo)集群已經(jīng)存在了 10.0.0.0/8網(wǎng)絡(luò),那么請(qǐng)選擇 172.16.0.0/12 或 192.168.0.0/16 作為容器網(wǎng)絡(luò)。
在上文Flannel網(wǎng)絡(luò)的示意圖中,有三個(gè)網(wǎng)絡(luò),公網(wǎng) 0.0.0.0/0 ,私網(wǎng) 10.0.0.0/8 和虛擬的容器網(wǎng)絡(luò)172.16.0.0/12 ,強(qiáng)調(diào)容器網(wǎng)絡(luò)是虛擬網(wǎng)絡(luò) 原因是,這個(gè)網(wǎng)絡(luò)上的數(shù)據(jù)必須以其他網(wǎng)絡(luò)為載體,這個(gè)網(wǎng)絡(luò)是一個(gè)二級(jí)網(wǎng)絡(luò)。
比如,主機(jī)甲上的容器A給主機(jī)乙上的容器D發(fā)送數(shù)據(jù),數(shù)據(jù)會(huì)被路由到 docker0 網(wǎng)橋上,然后數(shù)據(jù)會(huì)被Flannel通過主機(jī)甲的真實(shí)網(wǎng)卡,發(fā)送到主機(jī)乙的網(wǎng)卡上,主機(jī)乙上運(yùn)行的Flannel,繼續(xù)將數(shù)據(jù)轉(zhuǎn)發(fā)到主機(jī)乙的docker0 網(wǎng)橋上,最后到達(dá)容器D。
那么如果主機(jī)有多張網(wǎng)卡,就像圖中那樣,有兩張網(wǎng)卡分別連接公網(wǎng)和私網(wǎng),那么我們需要為Flannel指定一個(gè)網(wǎng)卡/IP用以發(fā)送數(shù)據(jù),這個(gè)IP,我們稱為 組網(wǎng)IP。即告訴主機(jī)甲上運(yùn)行的Flannel,使用哪個(gè)網(wǎng)卡/IP 去尋找主機(jī)乙。
使用脈沖云組建的集群,會(huì)默認(rèn)使用節(jié)點(diǎn)的公網(wǎng)IP作為組網(wǎng)IP。那么,多個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)通信會(huì)被發(fā)送到公網(wǎng)之上,除非是跨機(jī)房互聯(lián),一般情況下,我們希望節(jié)點(diǎn)間通過內(nèi)網(wǎng)傳輸數(shù)據(jù),以提高性能,或降低費(fèi)用。
將主機(jī)添加到集群后,在主機(jī)設(shè)置頁面,選擇組網(wǎng)IP即可指定各個(gè)主機(jī)節(jié)點(diǎn)分別使用的組網(wǎng)IP。
NAT,即網(wǎng)絡(luò)地址轉(zhuǎn)換,常用的路由器就是NAT設(shè)備,在有NAT設(shè)備的網(wǎng)絡(luò)拓?fù)渲校钟蚓W(wǎng)內(nèi)的主機(jī)只有內(nèi)網(wǎng)IP,沒有公網(wǎng)IP,網(wǎng)絡(luò)如下所示:
在這種網(wǎng)絡(luò)模型下,各個(gè)服務(wù)器節(jié)點(diǎn)主機(jī)都通過路由器 8.8.8.8 連接脈沖云,所以脈沖云只能獲取到各個(gè)服務(wù)器的公網(wǎng)IP為 8.8.8.8 ,按上文所述,脈沖云會(huì)默認(rèn)使用公網(wǎng)IP 8.8.8.8 作為Flannel的組網(wǎng)IP,在這種情況下,會(huì)導(dǎo)致Flannel組網(wǎng)失敗,甚至Flannel會(huì)無法啟動(dòng),因?yàn)橹鳈C(jī)上并不存在一個(gè)IP為 8.8.8.8 的網(wǎng)卡。
為解決這種問題,只需要手動(dòng)設(shè)置每一個(gè)節(jié)點(diǎn)的組網(wǎng)IP即可。
某些云服務(wù)商的主機(jī)也是在NAT設(shè)備之后的,比如阿里云服務(wù)器,如果使用了阿里云的VPC網(wǎng)絡(luò),即使給服務(wù)器綁定了公網(wǎng)IP 8.8.8.8,但是從主機(jī)上看,并沒有綁定公網(wǎng)IP的網(wǎng)卡設(shè)備,只有一個(gè)內(nèi)網(wǎng)網(wǎng)卡,原因就是有NAT設(shè)備存在。這種情況下,也需要指定內(nèi)網(wǎng)IP為組網(wǎng)IP。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97230.html
摘要:模式容器直接使用宿主機(jī)的網(wǎng)絡(luò)配置,包括網(wǎng)卡,路由等,這種方案下,從網(wǎng)絡(luò)層面來看,容器就不是容器了,只是一個(gè)宿主機(jī)上的進(jìn)程端口而已。 注:本篇僅僅是對(duì)各個(gè)網(wǎng)絡(luò)方案的簡介和思考。需要深入學(xué)習(xí)如何部署和使用的同學(xué)請(qǐng)自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網(wǎng)易蜂巢,daocloud,時(shí)速云這類的已經(jīng)成熟化的公有云服務(wù),許多中小型企業(yè)內(nèi)部也在試圖將docker...
摘要:模式容器直接使用宿主機(jī)的網(wǎng)絡(luò)配置,包括網(wǎng)卡,路由等,這種方案下,從網(wǎng)絡(luò)層面來看,容器就不是容器了,只是一個(gè)宿主機(jī)上的進(jìn)程端口而已。 注:本篇僅僅是對(duì)各個(gè)網(wǎng)絡(luò)方案的簡介和思考。需要深入學(xué)習(xí)如何部署和使用的同學(xué)請(qǐng)自行度娘~ 中小docker用戶的苦惱 docker的使用者十分廣泛,不止有網(wǎng)易蜂巢,daocloud,時(shí)速云這類的已經(jīng)成熟化的公有云服務(wù),許多中小型企業(yè)內(nèi)部也在試圖將docker...
摘要:是一個(gè)專為定制的三層網(wǎng)絡(luò)解決方案,主要用于解決容器的跨主機(jī)通信問題。收到的數(shù)據(jù)包被轉(zhuǎn)發(fā)到進(jìn)程。查詢路由表,解封包,并將數(shù)據(jù)包發(fā)送到。然后在網(wǎng)絡(luò)層的源和目的均是容器的,虛擬。默認(rèn)也是使用容器網(wǎng)絡(luò)方案,其官網(wǎng)也清晰的畫出了的。 前言 我們知道docker官方并沒有提供多主機(jī)的容器通信方案,單機(jī)網(wǎng)絡(luò)的模式主要有host,container,brige,none。none這種模式,顧名思義就是...
摘要:是一個(gè)專為定制的三層網(wǎng)絡(luò)解決方案,主要用于解決容器的跨主機(jī)通信問題。收到的數(shù)據(jù)包被轉(zhuǎn)發(fā)到進(jìn)程。查詢路由表,解封包,并將數(shù)據(jù)包發(fā)送到。然后在網(wǎng)絡(luò)層的源和目的均是容器的,虛擬。默認(rèn)也是使用容器網(wǎng)絡(luò)方案,其官網(wǎng)也清晰的畫出了的。 前言 我們知道docker官方并沒有提供多主機(jī)的容器通信方案,單機(jī)網(wǎng)絡(luò)的模式主要有host,container,brige,none。none這種模式,顧名思義就是...
閱讀 510·2021-10-09 09:44
閱讀 2072·2021-09-02 15:41
閱讀 3549·2019-08-30 15:53
閱讀 1829·2019-08-30 15:44
閱讀 1283·2019-08-30 13:10
閱讀 1188·2019-08-30 11:25
閱讀 1457·2019-08-30 10:51
閱讀 3364·2019-08-30 10:49