Docker原生網(wǎng)絡和實現(xiàn)原理_第1頁
Docker原生網(wǎng)絡和實現(xiàn)原理_第2頁
Docker原生網(wǎng)絡和實現(xiàn)原理_第3頁
Docker原生網(wǎng)絡和實現(xiàn)原理_第4頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、 Docker原生網(wǎng)絡和實現(xiàn)原理 在云計算架構設計中,最復雜且最重要的組件就是網(wǎng)絡,Docker作為云計算追捧的新寵兒也不會例外,尤其是當使用Docker容器構建分布式服務時,通信和網(wǎng)絡變得非常重要。面向服務的架構嚴重依賴節(jié)點之間的網(wǎng)絡架構。接下來,我們將從Docker原生網(wǎng)絡架構出發(fā),討論目前活躍的多種針對Docker提出的網(wǎng)絡優(yōu)化方案。在一些簡單情況下,采用Docker原生解決方案就可以滿足要求,但針對更復雜的情況就需要考慮采用優(yōu)化方案。 Docker的網(wǎng)絡是基于Linux的網(wǎng)絡命名空間和虛擬網(wǎng)絡設備(特別是veth pair)來實現(xiàn)。在Docker中,網(wǎng)絡接口默認都是虛擬的接口,可以充分

2、發(fā)揮數(shù)據(jù)在不同Docker間或Docker與宿主機轉發(fā)效率。這是因為Linux通過在內(nèi)核中通過數(shù)據(jù)復制實現(xiàn)虛擬接口之間的數(shù)據(jù)轉發(fā),即發(fā)送接口的發(fā)送緩存中的數(shù)據(jù)包將被直接復制到接收接口的接收緩存中,而無需通過外部物理網(wǎng)絡設備進行交換。 Docker容器創(chuàng)建網(wǎng)絡時,會在本地主機和容器內(nèi)分別創(chuàng)建一個虛擬接口,并讓它們彼此連通,形成一對虛擬網(wǎng)絡接口,這樣的一對接口叫做veth pair。 當Docker進程啟動之后,它會配置一個叫docker0的虛擬網(wǎng)橋在宿主機上。這個網(wǎng)橋接口允許Docker去分配虛擬的子網(wǎng)給即將啟動的容器。這個網(wǎng)橋在容器內(nèi)的網(wǎng)絡和宿主機網(wǎng)絡之間將作為網(wǎng)絡接口的主節(jié)點呈現(xiàn)。 當Doc

3、ker容器啟動后,創(chuàng)建一對虛擬接口,分別放到本地主機和新容器的命名空間中。本地宿主機一端的虛擬接口連接到默認的docker0網(wǎng)橋或指定網(wǎng)橋上,并具有一個以veth開頭的唯一名字。容器一端的虛擬接口將放到新創(chuàng)建的容器中,并修改名字作為eth0,這個接口只在容器的命名空間可見。 從網(wǎng)橋可用地址段中,分配一個網(wǎng)橋子網(wǎng)內(nèi)的IP地址給容器的eth0。這個IP地址嵌在容器內(nèi)網(wǎng)絡中,用于提供容器網(wǎng)絡到宿主機docker0網(wǎng)橋上的一個通道。并配置默認路由網(wǎng)關為docker0網(wǎng)卡的內(nèi)部接口docker0的IP地址。Docker會自動配置iptables規(guī)則和配置NAT,便于連通宿主機上的docker0網(wǎng)橋。完成

4、這些操作之后,容器就可以使用它所能看到的eth0虛擬網(wǎng)卡,來連接其他容器和訪問外部網(wǎng)絡。 Docker提供了一種容器間通信機制叫做Docker links。如果一個新容器鏈接到一個已有容器,新容器將會通過環(huán)境變量獲得已有容器的鏈接信息。通過提供給信任容器有關已有容器的鏈接信息,實現(xiàn)容器間的通信。 同一宿主機上的容器可以相互通信并提供服務給相鄰容器,而不需要額外的配置(端口暴露或發(fā)布),宿主系統(tǒng)會簡單將路由請求從docker0傳到目的地。 容器可以暴露它們的端口給宿主機,用于接收外部請求流量。暴露出的端口可以通過特定端口或由Docker來隨機選擇一個高位空閑端口映射到宿主機上。暴露端口意味著Do

5、cker將呈現(xiàn)該端口是暴露容器所使用,這可以被用于服務發(fā)現(xiàn)和links(新容器將會設置環(huán)境變量來對應原容器暴露的端口)。 容器可以發(fā)布它們的端口給宿主機,端口發(fā)布將映射端口到宿主接口,使得它可以與外界交互。暴露出的端口可選擇映射宿主機上一個指定端口,或者Docker可以自動的隨機選擇一個高位空閑端口。 Libcontainer也需要重點關注下,它是Docker中用于容器管理模塊(創(chuàng)建容器、實現(xiàn)容器生命周期管理),它基于Go語言實現(xiàn),通過管理Namespaces、Cgroups以及文件系統(tǒng)來進行容器控制。在Docker中,對容器管理的模塊為Execdriver,目前Docker支持的容器管理方式有兩種,一種就是最初支持的LXC方式,另一種稱為Native的Libcontainer進行容器管理。 Docker起初是采用LXC的開源容器管理引擎。把LXC復雜的容器創(chuàng)建與使用方式簡化為Docker自己的一套命令體系。后來Docker將底層實現(xiàn)都抽象化到Libcontainer的接口。這樣可以實現(xiàn)跨平臺能力,無論是使用了Namespace、Cgroups技術或是使用Systemd等其他方案,只要實現(xiàn)了Libcontainer定義的一組標準接口,Docker都可以運行。 Docker原生網(wǎng)絡模型在保證端口映射、鏈接正確的情況下,可實現(xiàn)同一宿主機上容器間的通信和宿主機之間的通信。但是,針對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論