武凌峰 楊磊 龍文君
摘要:互聯(lián)網(wǎng)企業(yè)內(nèi)部的數(shù)據(jù)規(guī)模正在經(jīng)歷爆炸式增長,由此帶來的高昂的軟硬件運(yùn)營,維護(hù)成本以及系統(tǒng)運(yùn)維難度的增加都促使企業(yè)對其數(shù)據(jù)中心的底層架構(gòu)進(jìn)行不斷的升級。隨著虛擬化技術(shù)的不斷發(fā)展,總體上經(jīng)歷了從裸機(jī)到虛擬機(jī),再到容器的架構(gòu)演進(jìn)。容器技術(shù)以其突出的優(yōu)勢強(qiáng)力地沖擊著傳統(tǒng)的虛擬化技術(shù)。本文重點介紹容器網(wǎng)絡(luò)中跨主機(jī)容器間的網(wǎng)絡(luò)通信問題。
關(guān)鍵詞:容器技術(shù);跨主機(jī)通信
中圖分類號:TP31 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2020)15-0265-02
1Docker(容器技術(shù))技術(shù)簡介
1.1概述
Docker是一種輕量級的操作系統(tǒng)虛擬化技術(shù),是使用Go語言實現(xiàn)的云開源項目,采用C/S架構(gòu)。ContmlGroups(Cgroup)和Namespace是實現(xiàn)容器的最重要的兩種技術(shù),通過ControlGroups(Cgroup)進(jìn)行資源控制,利用Namespace進(jìn)行資源隔離,減少了對內(nèi)存的占用,提升了資源利用率和10性能,推動了云計算的快速發(fā)展和應(yīng)用部署方式的變革。
1.2 Docker兩大組件
Docker主要包含兩大組件:Docker鏡像和Docker容器。鏡像是Docker容器的基石,容器是鏡像的運(yùn)行實例。
為了更好地資源共享,Docker鏡像和容器均采用分層的儲存結(jié)構(gòu),從圖1可以看出,對于Docker中新的鏡像,是從base鏡像一層一層疊加生成的,無論添加,刪除還是修改文件,所有對容器的改動都只會發(fā)生在容器層,而容器層下面的鏡像層都是只讀的。對于Docker容器,容器是動態(tài)的,可以隨時啟動、停止和移除。
1.3 Docker技術(shù)的優(yōu)勢
傳統(tǒng)的虛擬化技術(shù),如VMWare、KVM、Xen,是創(chuàng)建完整的虛擬機(jī)。為了運(yùn)行應(yīng)用,除了部署應(yīng)用本身及其依賴,還要安裝整個操作系統(tǒng)。
Docker在傳統(tǒng)的虛擬化技術(shù)上,創(chuàng)新性地引人了容器鏡像技術(shù),Docker容器技術(shù)具有如下優(yōu)勢:
(1)更快速,更簡單的交付和部署。
(2)更有效的虛擬化。
(3)更輕松的遷移和擴(kuò)展。
(4)更簡潔的管理。
(5)方便的鏡像倉庫。
2 Docker網(wǎng)絡(luò)
2.1Docker網(wǎng)絡(luò)的分類
Docker網(wǎng)絡(luò)可以根據(jù)覆蓋范圍分為單個host上的網(wǎng)絡(luò)和多個host的網(wǎng)絡(luò)。
前者主要包括:None網(wǎng)絡(luò)、host網(wǎng)絡(luò)、bridge網(wǎng)絡(luò)和user-de-fined網(wǎng)絡(luò)。
后者網(wǎng)絡(luò)方案主要包括:overlay和macvlan以及常用的第三方方案:flannel、weave和calico。而眾多的方案是通過libnet_work以及CNM與Docker集成在一起的。
2.2 libnetwork&CNM
Libnetwork是Docker容器網(wǎng)絡(luò)庫,其核心的即是Container Network Model(CNM),圖2是CNM的示例,該模型通過三部分組件抽象了容器網(wǎng)絡(luò):
(1)Sandbox
Sandbox是容器的網(wǎng)絡(luò)棧,包含容器的interface、路由表和DNS設(shè)置。Sandbox的標(biāo)準(zhǔn)實現(xiàn)是Linux Network Namespace。
(2)Endpoint
Sandbox是通過Endpoint接人Network。Endpoint的典型實現(xiàn)是veth pair一個Endpoint只能屬于一個網(wǎng)絡(luò),也只能屬于一個Sandbox。
通過圖4和圖5可以看出。hboxl可以ping通bboxl的IP,卻不能解析“bboxl”主機(jī)名,即docker沒有為macvlan提供DNS服務(wù)。
3 overlay和macvlan的比較
Docker起初只提供了簡單的single-host網(wǎng)絡(luò),并不利于Docker構(gòu)建容器集群并通過scale-out方式橫向擴(kuò)展到多個主機(jī)。在市場需求推動下,跨主機(jī)容器網(wǎng)絡(luò)技術(shù)快速發(fā)展。這里我們通過網(wǎng)絡(luò)模型,IPMA,連通與隔離,性能等方面比較over-lay和macvlan。
(1)網(wǎng)絡(luò)模型
Oveday網(wǎng)絡(luò),構(gòu)建主機(jī)間VxLAN隧道,初始數(shù)據(jù)包在發(fā)送之前被封裝成VxLAN數(shù)據(jù)包,到達(dá)目的后解包。Macvlan網(wǎng)絡(luò)在二層上通過VLAN連接容器,連接不同macvlan時則需要外部網(wǎng)關(guān)實現(xiàn)。數(shù)據(jù)包直接發(fā)送,不需要封裝。
(2)IPAM
Dockeroverlay網(wǎng)絡(luò)中所有主機(jī)共享一個subnet,容器啟動時會順序分配IP,同時也可以通過subnet定制空間IP,而Macv-lan則需要用戶自己管理subnet,為容器分配IP,不同subnet通信依賴外部網(wǎng)關(guān)。
(3)連通與隔離
同一Docker Oveday網(wǎng)絡(luò)中的容器可以通信,但不同網(wǎng)絡(luò)之間無法通信。Macvlan網(wǎng)絡(luò)的連通或隔離完全取決于二層VLAN和三層路由。
(4)性能
Oveday網(wǎng)絡(luò)由于涉及數(shù)據(jù)包的封裝和解封,存在額外的CPU和網(wǎng)絡(luò)開銷。雖然大部分Overlay網(wǎng)絡(luò)方案底層都采用Linux kernel的vxlan模塊,這樣可以盡量減少開銷,但這個開銷與Underlay網(wǎng)絡(luò)相比還是存在的。所以Macvlan的性能會優(yōu)于Docker overlay。
4總結(jié)
通過對跨主機(jī)容器間網(wǎng)絡(luò)方案介紹與實現(xiàn),不同的網(wǎng)絡(luò)方案有著特有的優(yōu)勢,相較于Docker的網(wǎng)絡(luò)提供的四種簡單的網(wǎng)絡(luò)模式,增加了多租戶網(wǎng)絡(luò)隔離、網(wǎng)絡(luò)Qos、服務(wù)發(fā)現(xiàn)等功能,滿足了生產(chǎn)環(huán)境下復(fù)雜的使用場景。彌補(bǔ)了Docker本身網(wǎng)絡(luò)的各種功能缺陷。