楊鑫,吳之南,錢松榮
?
基于Macvlan的docker容器網(wǎng)絡(luò)架構(gòu)
楊鑫,吳之南,錢松榮
摘 要:基于Mesos及docker的大數(shù)據(jù)平臺(tái)是構(gòu)建私有云的主流方案之一。但是綁定到宿主機(jī)同一網(wǎng)絡(luò)端口的不同docker容器之間會(huì)產(chǎn)生端口沖突的問(wèn)題。通過(guò)Macvlan給docker容器分配獨(dú)立的虛擬網(wǎng)卡,每個(gè)docker容器都能擁有自己的IP地址,從而解決端口沖突問(wèn)題。經(jīng)過(guò)實(shí)驗(yàn)得出,基于Macvlan的docker網(wǎng)絡(luò)隔離技術(shù)不僅可以以相對(duì)便捷的方式解決 Mesos集群中docker網(wǎng)絡(luò)端口沖突問(wèn)題,并且?guī)缀鯖](méi)有網(wǎng)絡(luò)帶寬損耗。
關(guān)鍵詞:docker;Macvlan;Mesos;網(wǎng)絡(luò)命名空間;網(wǎng)絡(luò)隔離;端口沖突;
隨著互聯(lián)網(wǎng)數(shù)據(jù)規(guī)模與計(jì)算規(guī)模的不斷擴(kuò)大,分布式系統(tǒng)的構(gòu)建也在高速發(fā)展之中。目前主流的分布式資源調(diào)度管理系統(tǒng)為Hadoop Yarn和Mesos[1][2]。由于Mesos對(duì)于docker的良好支持,利用docker容器封裝服務(wù)并交由Mesos統(tǒng)一調(diào)度管理是構(gòu)建基于Mesos的大數(shù)據(jù)服務(wù)的可靠解決方案[3]。但是當(dāng)Mesos在集群的某一節(jié)點(diǎn)上部署多個(gè)對(duì)外提供網(wǎng)絡(luò)服務(wù)但網(wǎng)絡(luò)端口相同的docker容器時(shí)就會(huì)產(chǎn)生網(wǎng)絡(luò)端口沖突問(wèn)題,導(dǎo)致無(wú)法提供正常的網(wǎng)絡(luò)服務(wù)。因此需要研究新的docker網(wǎng)絡(luò)構(gòu)建方式來(lái)滿足基于Mesos的大數(shù)據(jù)服務(wù)。通過(guò)對(duì)docker及Macvlan網(wǎng)絡(luò)機(jī)制的研究,在構(gòu)建基于Mesos 和docker的大數(shù)據(jù)平臺(tái)時(shí),提供合理高效的docker網(wǎng)絡(luò)隔離方案。
docker讓應(yīng)用程序布署在軟件容器下的工作可以自動(dòng)化進(jìn)行,借此在Linux操作系統(tǒng)上,提供一個(gè)額外的軟件抽象層,以及操作系統(tǒng)層虛擬化的自動(dòng)管理機(jī)制。docker利用Linux核心(kernel)中的資源分離機(jī)制,例如cgroups,以及Linux核心命名空間(namespace),來(lái)建立獨(dú)立的軟件容器(containers)。
1.1 網(wǎng)絡(luò)命名空間
docker[4]利用了多種Linux內(nèi)核特性,其中之一是命名空間。docker利用命名空間來(lái)提供獨(dú)立的工作空間即容器。當(dāng)運(yùn)行容器時(shí),docker為容器創(chuàng)建一組命名空間。這提供了一層隔離:容器的每一部分都運(yùn)行在其自己的命名空間中并且沒(méi)有權(quán)限離開(kāi)自己的命名空間。docker用到的一些命名空間有進(jìn)程(PID)命名空間,網(wǎng)絡(luò)(net)命名空間,進(jìn)程間通信(ipc)命名空間,掛載(mnt)命名空間,分時(shí)系統(tǒng)(uts)命名空間等。針對(duì)docker網(wǎng)絡(luò)端口沖突問(wèn)題,需要結(jié)合網(wǎng)絡(luò)命名空間來(lái)進(jìn)一步研究解決。
1.2 默認(rèn)網(wǎng)絡(luò)配置方式
docker啟動(dòng)后會(huì)在宿主機(jī)上創(chuàng)建虛擬網(wǎng)卡docker0,并在宿主機(jī)上的私有地址中隨機(jī)選擇未使用的網(wǎng)絡(luò)地址和子網(wǎng)分配給docker0。docker0是一個(gè)虛擬以太網(wǎng)橋,自動(dòng)在與其相連接的網(wǎng)卡間轉(zhuǎn)發(fā)數(shù)據(jù)包。這樣可以使docker容器與宿主機(jī)和其他容器通信。具體方式是當(dāng)docker容器運(yùn)行時(shí)會(huì)創(chuàng)建一對(duì)網(wǎng)卡,類似管道的兩端,發(fā)送到一端的數(shù)據(jù)包會(huì)在另一端被接收。一端會(huì)成為容器的默認(rèn)網(wǎng)卡(eth0),另一端以唯一的名稱類似vethAQI2QT置于宿主機(jī)的網(wǎng)絡(luò)命名空間里。通過(guò)把所有位于宿主機(jī)網(wǎng)絡(luò)命名空間一端的網(wǎng)卡與docker0網(wǎng)橋綁定,docker可以創(chuàng)建一個(gè)用以在宿主機(jī)與所有docker間共享的虛擬子網(wǎng)。
所以當(dāng)docker容器需要對(duì)外提供網(wǎng)絡(luò)服務(wù)時(shí),需要把提供服務(wù)的網(wǎng)絡(luò)端口映射到宿主機(jī)的某一端口上。因此宿主機(jī)的某一端口不能同時(shí)被多個(gè)容器端口所映射。當(dāng)多個(gè)docker容器需要向宿主機(jī)所在的局域網(wǎng)提供某一個(gè)相同端口的網(wǎng)絡(luò)服務(wù)時(shí),就會(huì)產(chǎn)生網(wǎng)絡(luò)端口沖突的問(wèn)題。
為了解決docker網(wǎng)絡(luò)端口沖突問(wèn)題,本文提出了基于Macvlan的docker網(wǎng)絡(luò)隔離方案。
2.1 Macvlan簡(jiǎn)介
傳統(tǒng)意義上,網(wǎng)卡是工作在數(shù)據(jù)鏈路層的網(wǎng)絡(luò)設(shè)備,由唯一的MAC地址標(biāo)識(shí)。所以每塊網(wǎng)卡只能綁定一個(gè)MAC地址,但是可以分配多個(gè)網(wǎng)絡(luò)層的IP地址。而Macvlan[5]可以基于物理網(wǎng)卡創(chuàng)建多個(gè)虛擬網(wǎng)卡。和物理網(wǎng)卡相同,每個(gè)虛擬網(wǎng)卡都擁有唯一的MAC地址,并且可以分配多個(gè)IP地址。因此利用Macvlan,可以在單塊物理網(wǎng)卡的情況下,綁定多個(gè)MAC地址,針對(duì)每個(gè)MAC地址分配相應(yīng)的IP地址。
2.2 網(wǎng)絡(luò)隔離原理
對(duì)于某一宿主機(jī)上的多個(gè)docker容器,可以通過(guò)Macvlan在docker容器各自的網(wǎng)絡(luò)命名空間中添加不同的虛擬網(wǎng)卡,由于容器間擁有各自獨(dú)立的網(wǎng)絡(luò)協(xié)議棧,所以可以在給虛擬網(wǎng)卡分配MAC地址之后分配屬于宿主機(jī)所在局域網(wǎng)的可用IP地址。通過(guò)這一方式,在網(wǎng)絡(luò)層上,每個(gè)docker容器和宿主機(jī)都成為局域網(wǎng)中可以互相訪問(wèn)的對(duì)等網(wǎng)絡(luò)節(jié)點(diǎn),擁有獨(dú)立的IP地址。所以宿主機(jī)上的不同docker容器可以提供相同網(wǎng)絡(luò)端口的網(wǎng)絡(luò)服務(wù)而不會(huì)互相沖突。
通過(guò)上文的原理分析,從理論上得出基于Macvlan的docekr網(wǎng)絡(luò)隔離方式可以有效的解決docker網(wǎng)絡(luò)端口沖突的問(wèn)題。因此,需要進(jìn)一步在基于Mesos及docker的大數(shù)據(jù)平臺(tái)上進(jìn)行實(shí)驗(yàn)測(cè)試,通過(guò)結(jié)果分析來(lái)驗(yàn)可行性和性能。
3.1 測(cè)試環(huán)境
實(shí)驗(yàn)的Mesos集群由3臺(tái)Mesos主節(jié)點(diǎn)(Mesos-master)和19臺(tái)Mesos從節(jié)點(diǎn)(Mesos-slave)組成。3臺(tái)主節(jié)點(diǎn)組成zookeeper,操作系統(tǒng)為CentOS7。Mesos集群中的docker 由Marathon框架部署。在部署時(shí)通過(guò)設(shè)定Marathon部署方式,使得docker鏡像均勻的分配到集群中的各個(gè)節(jié)點(diǎn)上。Mesos集群的局域網(wǎng)IP地址由DHCP服務(wù)器統(tǒng)一分配。每臺(tái)主機(jī)進(jìn)行網(wǎng)絡(luò)性能測(cè)試的物理網(wǎng)卡帶寬為10GB。
本實(shí)驗(yàn)使用Iperf測(cè)試網(wǎng)絡(luò)性能,Iperf在進(jìn)行網(wǎng)絡(luò)測(cè)試時(shí)分為兩部分,分別為服務(wù)器端和客戶端。默認(rèn)情況下客戶端連接到服務(wù)器端并通過(guò)記錄所發(fā)送數(shù)據(jù)包的傳輸速率來(lái)測(cè)定網(wǎng)絡(luò)性能,每一個(gè)客戶端只能連接到唯一的服務(wù)器端。
3.2 docker網(wǎng)絡(luò)設(shè)置方式
本實(shí)驗(yàn)中基于Macvlan的docker容器網(wǎng)絡(luò)隔離配置流程如圖1所示:
當(dāng)通過(guò)Mesos的資源調(diào)度在某一宿主機(jī)上啟動(dòng)docker容器后,系統(tǒng)分別在宿主機(jī)和docker容器內(nèi)啟動(dòng)相關(guān)的程序完成網(wǎng)絡(luò)設(shè)置任務(wù)。
首先,會(huì)在宿主機(jī)中新建Macvlan虛擬網(wǎng)卡,并把該虛擬網(wǎng)卡添加到docker容器的網(wǎng)絡(luò)命名空間中。接著系統(tǒng)激活該虛擬網(wǎng)卡并給該虛擬網(wǎng)卡添加MAC地址。之后通過(guò)DHCP服務(wù)給該虛擬網(wǎng)卡添加IP地址。由于以上流程需要一定的時(shí)間,因此在最終虛擬網(wǎng)卡獲得IP地址之前,docker容器內(nèi)部需要先啟動(dòng)程序檢測(cè)網(wǎng)卡的狀態(tài)。以確保在網(wǎng)卡已經(jīng)添加并擁有MAC地址和IP地址后才進(jìn)行接下來(lái)的網(wǎng)絡(luò)性能測(cè)試。
3.3 網(wǎng)絡(luò)測(cè)試方案
上一節(jié)詳細(xì)敘述了docker網(wǎng)絡(luò)隔離的構(gòu)建方式。在此基礎(chǔ)上需要對(duì)這一網(wǎng)絡(luò)隔離方式進(jìn)行針對(duì)性的網(wǎng)絡(luò)性能測(cè)試。本實(shí)驗(yàn)采用Iperf工具進(jìn)行網(wǎng)絡(luò)性能測(cè)試。
在本實(shí)驗(yàn)的測(cè)試方案如表1所示:
表1 網(wǎng)絡(luò)性能測(cè)試方案
共有3套測(cè)試方案。在方案一和方案二中,均只有一個(gè)Iperf服務(wù)器端,客戶端也都為N,即表示Iperf客戶端從1個(gè)到128個(gè),共進(jìn)行10次不同Iperf客戶端數(shù)量的網(wǎng)絡(luò)測(cè)試。而一、二兩個(gè)方案的差別僅在于測(cè)試類型上。測(cè)試類型分為UNIQUE和RANDOM兩種,UNIQUE表示Iperf服務(wù)器端與其相連接的Iperf客戶端不會(huì)在同一臺(tái)Mesos從節(jié)點(diǎn)上。RANDOM則表示不限制相連接的Iperf服務(wù)器端和Iperf客戶端是否在同一臺(tái)Mesos從節(jié)點(diǎn)上,由系統(tǒng)隨機(jī)分配。方案三表示在Iperf客戶端數(shù)量為128個(gè)的情況下,分別對(duì)Iperf服務(wù)器端數(shù)量為M,即從2個(gè)到64個(gè)共9中情況進(jìn)行網(wǎng)絡(luò)性能測(cè)試。3種測(cè)試方案的架構(gòu)模型如圖2-圖4所示:
圖2 方案一架構(gòu)模型示例
圖3 方案二架構(gòu)模型示例
圖4 方案三架構(gòu)模型示例
3.4 結(jié)果分析
方案一用于測(cè)試基于Macvlan的docker網(wǎng)絡(luò)隔離方式對(duì)網(wǎng)絡(luò)帶寬的損耗情況,測(cè)試結(jié)果如圖5所示:
圖5 方案一測(cè)試結(jié)果
由于所有Iperf客戶端都連接到同一個(gè)且唯一一個(gè)Iperf服務(wù)器,并且為UNIQUE模式。所以在方案一中,對(duì)于不同n值的實(shí)驗(yàn),均有一臺(tái)Mesos-slave只運(yùn)行唯一的Iperf服務(wù)器端,所有Iperf客戶端均運(yùn)行在其他15臺(tái)Mesos-slave中。從Iperf網(wǎng)絡(luò)測(cè)試統(tǒng)計(jì)結(jié)果可以得出,隨著Iperf客戶端數(shù)量N的增加,基于Macvlan的docker網(wǎng)絡(luò)隔離方式不會(huì)對(duì)網(wǎng)絡(luò)帶寬產(chǎn)生明顯的損耗,無(wú)損的達(dá)到了原始帶寬的網(wǎng)絡(luò)性能。
方案二模擬單租戶情況下的實(shí)際網(wǎng)絡(luò)環(huán)境,測(cè)試結(jié)果如圖6所示:
圖6 方案一測(cè)試結(jié)果
Iperf客戶端和唯一的Iperf服務(wù)器端由marathon框架自動(dòng)隨機(jī)部署到集群中。有測(cè)試結(jié)果可以看出,當(dāng)N不大于16時(shí),由于Mesos-slave總數(shù)為19臺(tái),所以每個(gè)Iperf服務(wù)器端和客戶端能夠分配到單獨(dú)的一臺(tái)Mesos-slave,所以此時(shí)與方案一相同。當(dāng)N超過(guò)Mesos-slave總數(shù)時(shí),Iperf服務(wù)器端和客戶端會(huì)處于同一節(jié)點(diǎn)。所以該節(jié)點(diǎn)的Iperf客戶端不會(huì)通過(guò)外部網(wǎng)絡(luò)與Iperf服務(wù)器端通信,所以傳輸速率會(huì)遠(yuǎn)高于網(wǎng)絡(luò)傳輸帶寬,從而達(dá)到更好的通信性能。
方案三模擬多租戶情況下網(wǎng)絡(luò)的最壞情況,測(cè)試結(jié)果如圖7所示:
圖7 方案一測(cè)試結(jié)果
即Iperf服務(wù)器端均不會(huì)和與其相連接的Iperf客戶端處于同一節(jié)點(diǎn)中,因此Iperf測(cè)試的流量均由網(wǎng)卡傳輸而不會(huì)直接通過(guò)本機(jī)傳輸影響網(wǎng)絡(luò)測(cè)試結(jié)果。在實(shí)驗(yàn)一中得出基于Macvlan的docker網(wǎng)絡(luò)隔離方式能有效的利用物理網(wǎng)卡帶寬,達(dá)到近乎無(wú)損的網(wǎng)絡(luò)性能在實(shí)驗(yàn)三中同樣得以體現(xiàn)。而多租戶情況下網(wǎng)絡(luò)的最壞情況也能充分利用物理網(wǎng)卡現(xiàn)有的網(wǎng)絡(luò)帶寬。
在構(gòu)建基于Mesos的分布式私有云系統(tǒng)時(shí),利用docker容器封裝云服務(wù)部署在集群中有著普遍的使用場(chǎng)景。但是同一宿主機(jī)上的docker容器間可能會(huì)發(fā)生網(wǎng)絡(luò)端口沖突的問(wèn)題。本文提出了基于Macvlan的docekr網(wǎng)絡(luò)隔離方式。由于無(wú)需主動(dòng)維護(hù)路由表等對(duì)各個(gè)集群節(jié)點(diǎn)的復(fù)雜配置方式,所以這一解決方案十分便捷。另一方面,由多個(gè)場(chǎng)景的實(shí)驗(yàn)可以得出,本方案不會(huì)對(duì)網(wǎng)絡(luò)性能產(chǎn)生明顯的損耗,充分利用了物理網(wǎng)卡的網(wǎng)絡(luò)帶寬。因此,基于Macvlan的docker網(wǎng)絡(luò)隔離方式在解決了網(wǎng)絡(luò)端口沖突的問(wèn)題同時(shí),具有便捷、高效、穩(wěn)定的特性,是針對(duì)構(gòu)建基于docker的Mesos私有云系統(tǒng)的理想解決方案。
參考文獻(xiàn)
[1] Vavilapalli V K, Murthy A C, Douglas C, et al. Apache hadoop yarn: Yet another resource negotiator[C]//Procee -dings of the 4th annual Symposium on Cloud Computing. ACM, 2013: 5.
[2] Tabaa Y, Medouri A, Tetouan M. Towards a next generation of scientific computing in the cloud[J]. International Journal of Computer Science, 2012, 9(6): 177-183.
[3] .Stubbs J, Moreira W, Dooley R. Distributed Systems of M icroservices Using Docker and Serfnode[C]//Science Gateways (IWSG), 2015 7th International Workshop on. IEEE, 2015: 34-39.
[4] Bernstein D. Containers and cloud: From lxc to docker to kubernetes[J]. IEEE Cloud Computing, 2014 (3): 81-84.
[5] .Jeffree A, Congdon P, Haddock S. Media Access Control (MAC) Bridges and Virtual Bridge Local Area Networks[J]. The Institute of Electrical and Electronics Engineers, Inc., ISBN, 978-0.
Docker Container Network Architecture Base on M acvlan
Yang Xin, Wu Zhinan, Qian Songrong
(College of Information Science and Engineering, Fudan University, Shanghai 200433, China)
Abstract:Big data platform based on Mesos and docker is one of the popular scheme to construct private cloud. But network port conflict exists among ports of different docker containers, which are all binding to the same network port on the same host. But this problem can be solved by Macvlan, Macvlan can allocate each Docker container one unique virtual network interface, so that each container w ill own one unique IP address that is diffdrent from others. And investigating through this experiment, this network isolation technology of docker based on Macvlan can solve the problem of docker network port conflict in Mesos cluster conveniently and fast, w ith nearly no lost of network bandw idth.
Key words:Docker; Macvlan; Mesos; Network Namespace; Network Isolation; Network Port Conflict
中圖分類號(hào):TP393.1
文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1007-757X(2016)05-0058-03
作者簡(jiǎn)介:楊 鑫(1990-),男,浙江,復(fù)旦大學(xué)通信科學(xué)與工程系,碩士研究生,研究方向:網(wǎng)絡(luò)與數(shù)據(jù)通信;上海,200433吳之南(1991-),男,上海,復(fù)旦大學(xué)通信科學(xué)與工程系,碩士研究生,研究方向:網(wǎng)絡(luò)與數(shù)據(jù)通信;上海,200433錢松榮(1967-),男,上海,復(fù)旦大學(xué)通信科學(xué)與工程系,教授,研究方向:網(wǎng)絡(luò)與數(shù)據(jù)通信;上海,200433
收稿日期:(2015.11.16)