楊鑫,吳之南,錢松榮
?
基于Macvlan的docker容器網絡架構
楊鑫,吳之南,錢松榮
摘 要:基于Mesos及docker的大數(shù)據平臺是構建私有云的主流方案之一。但是綁定到宿主機同一網絡端口的不同docker容器之間會產生端口沖突的問題。通過Macvlan給docker容器分配獨立的虛擬網卡,每個docker容器都能擁有自己的IP地址,從而解決端口沖突問題。經過實驗得出,基于Macvlan的docker網絡隔離技術不僅可以以相對便捷的方式解決 Mesos集群中docker網絡端口沖突問題,并且?guī)缀鯖]有網絡帶寬損耗。
關鍵詞:docker;Macvlan;Mesos;網絡命名空間;網絡隔離;端口沖突;
隨著互聯(lián)網數(shù)據規(guī)模與計算規(guī)模的不斷擴大,分布式系統(tǒng)的構建也在高速發(fā)展之中。目前主流的分布式資源調度管理系統(tǒng)為Hadoop Yarn和Mesos[1][2]。由于Mesos對于docker的良好支持,利用docker容器封裝服務并交由Mesos統(tǒng)一調度管理是構建基于Mesos的大數(shù)據服務的可靠解決方案[3]。但是當Mesos在集群的某一節(jié)點上部署多個對外提供網絡服務但網絡端口相同的docker容器時就會產生網絡端口沖突問題,導致無法提供正常的網絡服務。因此需要研究新的docker網絡構建方式來滿足基于Mesos的大數(shù)據服務。通過對docker及Macvlan網絡機制的研究,在構建基于Mesos 和docker的大數(shù)據平臺時,提供合理高效的docker網絡隔離方案。
docker讓應用程序布署在軟件容器下的工作可以自動化進行,借此在Linux操作系統(tǒng)上,提供一個額外的軟件抽象層,以及操作系統(tǒng)層虛擬化的自動管理機制。docker利用Linux核心(kernel)中的資源分離機制,例如cgroups,以及Linux核心命名空間(namespace),來建立獨立的軟件容器(containers)。
1.1 網絡命名空間
docker[4]利用了多種Linux內核特性,其中之一是命名空間。docker利用命名空間來提供獨立的工作空間即容器。當運行容器時,docker為容器創(chuàng)建一組命名空間。這提供了一層隔離:容器的每一部分都運行在其自己的命名空間中并且沒有權限離開自己的命名空間。docker用到的一些命名空間有進程(PID)命名空間,網絡(net)命名空間,進程間通信(ipc)命名空間,掛載(mnt)命名空間,分時系統(tǒng)(uts)命名空間等。針對docker網絡端口沖突問題,需要結合網絡命名空間來進一步研究解決。
1.2 默認網絡配置方式
docker啟動后會在宿主機上創(chuàng)建虛擬網卡docker0,并在宿主機上的私有地址中隨機選擇未使用的網絡地址和子網分配給docker0。docker0是一個虛擬以太網橋,自動在與其相連接的網卡間轉發(fā)數(shù)據包。這樣可以使docker容器與宿主機和其他容器通信。具體方式是當docker容器運行時會創(chuàng)建一對網卡,類似管道的兩端,發(fā)送到一端的數(shù)據包會在另一端被接收。一端會成為容器的默認網卡(eth0),另一端以唯一的名稱類似vethAQI2QT置于宿主機的網絡命名空間里。通過把所有位于宿主機網絡命名空間一端的網卡與docker0網橋綁定,docker可以創(chuàng)建一個用以在宿主機與所有docker間共享的虛擬子網。
所以當docker容器需要對外提供網絡服務時,需要把提供服務的網絡端口映射到宿主機的某一端口上。因此宿主機的某一端口不能同時被多個容器端口所映射。當多個docker容器需要向宿主機所在的局域網提供某一個相同端口的網絡服務時,就會產生網絡端口沖突的問題。
為了解決docker網絡端口沖突問題,本文提出了基于Macvlan的docker網絡隔離方案。
2.1 Macvlan簡介
傳統(tǒng)意義上,網卡是工作在數(shù)據鏈路層的網絡設備,由唯一的MAC地址標識。所以每塊網卡只能綁定一個MAC地址,但是可以分配多個網絡層的IP地址。而Macvlan[5]可以基于物理網卡創(chuàng)建多個虛擬網卡。和物理網卡相同,每個虛擬網卡都擁有唯一的MAC地址,并且可以分配多個IP地址。因此利用Macvlan,可以在單塊物理網卡的情況下,綁定多個MAC地址,針對每個MAC地址分配相應的IP地址。
2.2 網絡隔離原理
對于某一宿主機上的多個docker容器,可以通過Macvlan在docker容器各自的網絡命名空間中添加不同的虛擬網卡,由于容器間擁有各自獨立的網絡協(xié)議棧,所以可以在給虛擬網卡分配MAC地址之后分配屬于宿主機所在局域網的可用IP地址。通過這一方式,在網絡層上,每個docker容器和宿主機都成為局域網中可以互相訪問的對等網絡節(jié)點,擁有獨立的IP地址。所以宿主機上的不同docker容器可以提供相同網絡端口的網絡服務而不會互相沖突。
通過上文的原理分析,從理論上得出基于Macvlan的docekr網絡隔離方式可以有效的解決docker網絡端口沖突的問題。因此,需要進一步在基于Mesos及docker的大數(shù)據平臺上進行實驗測試,通過結果分析來驗可行性和性能。
3.1 測試環(huán)境
實驗的Mesos集群由3臺Mesos主節(jié)點(Mesos-master)和19臺Mesos從節(jié)點(Mesos-slave)組成。3臺主節(jié)點組成zookeeper,操作系統(tǒng)為CentOS7。Mesos集群中的docker 由Marathon框架部署。在部署時通過設定Marathon部署方式,使得docker鏡像均勻的分配到集群中的各個節(jié)點上。Mesos集群的局域網IP地址由DHCP服務器統(tǒng)一分配。每臺主機進行網絡性能測試的物理網卡帶寬為10GB。
本實驗使用Iperf測試網絡性能,Iperf在進行網絡測試時分為兩部分,分別為服務器端和客戶端。默認情況下客戶端連接到服務器端并通過記錄所發(fā)送數(shù)據包的傳輸速率來測定網絡性能,每一個客戶端只能連接到唯一的服務器端。
3.2 docker網絡設置方式
本實驗中基于Macvlan的docker容器網絡隔離配置流程如圖1所示:
當通過Mesos的資源調度在某一宿主機上啟動docker容器后,系統(tǒng)分別在宿主機和docker容器內啟動相關的程序完成網絡設置任務。
首先,會在宿主機中新建Macvlan虛擬網卡,并把該虛擬網卡添加到docker容器的網絡命名空間中。接著系統(tǒng)激活該虛擬網卡并給該虛擬網卡添加MAC地址。之后通過DHCP服務給該虛擬網卡添加IP地址。由于以上流程需要一定的時間,因此在最終虛擬網卡獲得IP地址之前,docker容器內部需要先啟動程序檢測網卡的狀態(tài)。以確保在網卡已經添加并擁有MAC地址和IP地址后才進行接下來的網絡性能測試。
3.3 網絡測試方案
上一節(jié)詳細敘述了docker網絡隔離的構建方式。在此基礎上需要對這一網絡隔離方式進行針對性的網絡性能測試。本實驗采用Iperf工具進行網絡性能測試。
在本實驗的測試方案如表1所示:
表1 網絡性能測試方案
共有3套測試方案。在方案一和方案二中,均只有一個Iperf服務器端,客戶端也都為N,即表示Iperf客戶端從1個到128個,共進行10次不同Iperf客戶端數(shù)量的網絡測試。而一、二兩個方案的差別僅在于測試類型上。測試類型分為UNIQUE和RANDOM兩種,UNIQUE表示Iperf服務器端與其相連接的Iperf客戶端不會在同一臺Mesos從節(jié)點上。RANDOM則表示不限制相連接的Iperf服務器端和Iperf客戶端是否在同一臺Mesos從節(jié)點上,由系統(tǒng)隨機分配。方案三表示在Iperf客戶端數(shù)量為128個的情況下,分別對Iperf服務器端數(shù)量為M,即從2個到64個共9中情況進行網絡性能測試。3種測試方案的架構模型如圖2-圖4所示:
圖2 方案一架構模型示例
圖3 方案二架構模型示例
圖4 方案三架構模型示例
3.4 結果分析
方案一用于測試基于Macvlan的docker網絡隔離方式對網絡帶寬的損耗情況,測試結果如圖5所示:
圖5 方案一測試結果
由于所有Iperf客戶端都連接到同一個且唯一一個Iperf服務器,并且為UNIQUE模式。所以在方案一中,對于不同n值的實驗,均有一臺Mesos-slave只運行唯一的Iperf服務器端,所有Iperf客戶端均運行在其他15臺Mesos-slave中。從Iperf網絡測試統(tǒng)計結果可以得出,隨著Iperf客戶端數(shù)量N的增加,基于Macvlan的docker網絡隔離方式不會對網絡帶寬產生明顯的損耗,無損的達到了原始帶寬的網絡性能。
方案二模擬單租戶情況下的實際網絡環(huán)境,測試結果如圖6所示:
圖6 方案一測試結果
Iperf客戶端和唯一的Iperf服務器端由marathon框架自動隨機部署到集群中。有測試結果可以看出,當N不大于16時,由于Mesos-slave總數(shù)為19臺,所以每個Iperf服務器端和客戶端能夠分配到單獨的一臺Mesos-slave,所以此時與方案一相同。當N超過Mesos-slave總數(shù)時,Iperf服務器端和客戶端會處于同一節(jié)點。所以該節(jié)點的Iperf客戶端不會通過外部網絡與Iperf服務器端通信,所以傳輸速率會遠高于網絡傳輸帶寬,從而達到更好的通信性能。
方案三模擬多租戶情況下網絡的最壞情況,測試結果如圖7所示:
圖7 方案一測試結果
即Iperf服務器端均不會和與其相連接的Iperf客戶端處于同一節(jié)點中,因此Iperf測試的流量均由網卡傳輸而不會直接通過本機傳輸影響網絡測試結果。在實驗一中得出基于Macvlan的docker網絡隔離方式能有效的利用物理網卡帶寬,達到近乎無損的網絡性能在實驗三中同樣得以體現(xiàn)。而多租戶情況下網絡的最壞情況也能充分利用物理網卡現(xiàn)有的網絡帶寬。
在構建基于Mesos的分布式私有云系統(tǒng)時,利用docker容器封裝云服務部署在集群中有著普遍的使用場景。但是同一宿主機上的docker容器間可能會發(fā)生網絡端口沖突的問題。本文提出了基于Macvlan的docekr網絡隔離方式。由于無需主動維護路由表等對各個集群節(jié)點的復雜配置方式,所以這一解決方案十分便捷。另一方面,由多個場景的實驗可以得出,本方案不會對網絡性能產生明顯的損耗,充分利用了物理網卡的網絡帶寬。因此,基于Macvlan的docker網絡隔離方式在解決了網絡端口沖突的問題同時,具有便捷、高效、穩(wěn)定的特性,是針對構建基于docker的Mesos私有云系統(tǒng)的理想解決方案。
參考文獻
[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
中圖分類號:TP393.1
文獻標志碼:A
文章編號:1007-757X(2016)05-0058-03
作者簡介:楊 鑫(1990-),男,浙江,復旦大學通信科學與工程系,碩士研究生,研究方向:網絡與數(shù)據通信;上海,200433吳之南(1991-),男,上海,復旦大學通信科學與工程系,碩士研究生,研究方向:網絡與數(shù)據通信;上海,200433錢松榮(1967-),男,上海,復旦大學通信科學與工程系,教授,研究方向:網絡與數(shù)據通信;上海,200433
收稿日期:(2015.11.16)