Docker學(xué)習(xí)六、docker網(wǎng)絡(luò)管理

一、Linux網(wǎng)絡(luò)設(shè)備的基本概念

在學(xué)習(xí)docker網(wǎng)絡(luò)管理之前先要了解一些Linux網(wǎng)絡(luò)設(shè)備的基本概念:

  • Linux Bridge,即Linux網(wǎng)橋設(shè)備,是Linux提供的一種虛擬網(wǎng)絡(luò)設(shè)備之一。其工作方式非常類似于物理的網(wǎng)絡(luò)交換機(jī)設(shè)備。Linux Bridge可以工作在二層,也可以工作在三層,默認(rèn)工作在二層。工作在二層時(shí),可以在同一網(wǎng)絡(luò)的不同主機(jī)間轉(zhuǎn)發(fā)以太網(wǎng)報(bào)文;一旦你給一個(gè)Linux Bridge分配了IP地址,也就開啟了該Bridge的三層工作模式。在Linux下,你可以用iproute2工具包或brctl命令對(duì)Linux bridge進(jìn)行管理。

  • VETH(Virtual Ethernet )是Linux提供的另外一種特殊的網(wǎng)絡(luò)設(shè)備,中文稱為虛擬網(wǎng)卡接口。它總是成對(duì)出現(xiàn),要?jiǎng)?chuàng)建就創(chuàng)建一個(gè)Pair。一個(gè)Pair中的veth就像一個(gè)網(wǎng)絡(luò)線纜的兩個(gè)端點(diǎn),數(shù)據(jù)從一個(gè)端點(diǎn)進(jìn)入,必然從另外一個(gè)端點(diǎn)流出。每個(gè)veth都可以被賦予IP地址,并參與三層網(wǎng)絡(luò)路由過程。

  • Network namespace,網(wǎng)絡(luò)名字空間,允許你在Linux創(chuàng)建相互隔離的網(wǎng)絡(luò)視圖,每個(gè)網(wǎng)絡(luò)名字空間都有獨(dú)立的網(wǎng)絡(luò)配置,比如:網(wǎng)絡(luò)設(shè)備、路由表等。新建的網(wǎng)絡(luò)名字空間與主機(jī)默認(rèn)網(wǎng)絡(luò)名字空間之間是隔離的。我們平時(shí)默認(rèn)操作的是主機(jī)的默認(rèn)網(wǎng)絡(luò)名字空間。

關(guān)于Linux Bridge和VETH的具體工作原理,可以參考IBM developerWorks上的這篇文章《Linux 上的基礎(chǔ)網(wǎng)絡(luò)設(shè)備詳解》。

關(guān)于namespace的知識(shí)補(bǔ)充:docker容器本質(zhì)上是宿主機(jī)的進(jìn)程,Docker通過namespace實(shí)現(xiàn)了資源隔離,通過cgroups實(shí)現(xiàn)了資源限制,通過寫時(shí)復(fù)制機(jī)制(copy-on-write)實(shí)現(xiàn)了高效的文件操作。namespace在linux中是實(shí)現(xiàn)資源隔離的一種手段,也是輕量級(jí)虛擬化的一種手段??梢詫?shí)現(xiàn)多個(gè)用戶,也可以實(shí)現(xiàn)多個(gè)網(wǎng)絡(luò)設(shè)備訪問(虛擬化網(wǎng)絡(luò)),但是實(shí)體網(wǎng)絡(luò)卻只有一個(gè)。資源隔離意味著比如不通PID命名空間看到的PID進(jìn)程是不一樣的,不通命名空間看到的IPC通信是不一樣的。命名空間分類:

圖片.png

二、Docker網(wǎng)絡(luò)拓?fù)鋱D

通常情況下,Docker使用網(wǎng)橋(bridge)和NAT的通信模式(還有其他模式,暫時(shí)只學(xué)習(xí)這一種),其網(wǎng)絡(luò)拓?fù)鋱D如下:

圖片.png
圖片.png

如圖所示:

  • 默認(rèn)情況下,我們?cè)谒拗鳈C(jī)上看到的都是default network namespace的視圖,Docker在安裝完以后,Docker Daemon會(huì)在default network namespace創(chuàng)建一個(gè)名字為docker0的虛擬網(wǎng)橋,其IP默認(rèn)為172.17.0.1/16,負(fù)責(zé)容器與容器之間(網(wǎng)橋)、容器訪問外部網(wǎng)絡(luò)(SNAT轉(zhuǎn)換)、外部網(wǎng)絡(luò)訪問容器(DNAT轉(zhuǎn)換)的通信,同時(shí)也會(huì)創(chuàng)建一個(gè)新的network namespace。
  • 每當(dāng)運(yùn)行一個(gè)容器,Docker就會(huì)將容器放入新建的network namespace中,同時(shí)會(huì)創(chuàng)建一個(gè)虛擬網(wǎng)卡接口(VETH),一端連接在網(wǎng)橋docker0上面,另一端插在容器上充當(dāng)eth0,用于連接兩個(gè)不同的network namespace。

三、Docker網(wǎng)絡(luò)模式的修改

3-1、Docker進(jìn)程網(wǎng)絡(luò)修改

圖片.png

3-2、Docker容器網(wǎng)絡(luò)修改

圖片.png

3-3、暴露端口修改

圖片.png

3-4、docker0網(wǎng)橋網(wǎng)絡(luò)修改

圖片.png

3-5、docker設(shè)置遠(yuǎn)程訪問

圖片.png

四、網(wǎng)絡(luò)隔離

創(chuàng)建一個(gè)容器時(shí),會(huì)默認(rèn)放在一個(gè)網(wǎng)絡(luò)命名空間內(nèi),所以可以互相訪問。為了安全起見可以將不同的容器放入不同的網(wǎng)絡(luò)命名空間中相互隔離。

4-1、常見隔離

隔離容器與容器之間的訪問

圖片.png

創(chuàng)建不同的網(wǎng)橋(不同的網(wǎng)絡(luò)命名空間)

圖片.png

創(chuàng)建容器時(shí)將不同容器放入不同的網(wǎng)橋(其實(shí)是放入不同的網(wǎng)絡(luò)命名空間)

圖片.png

4-2、連接不同宿主機(jī)上面的docker容器

創(chuàng)建網(wǎng)橋

圖片.png

修改網(wǎng)卡以及網(wǎng)橋配置

圖片.png

下載安裝pipework工具

圖片.png

使用pipework工具修改容器的IP

圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker容器技術(shù)已經(jīng)發(fā)展了好些年,在很多項(xiàng)目都有應(yīng)用,線上運(yùn)行也很穩(wěn)定。整理了部分Docker的學(xué)習(xí)筆記以及新...
    __七把刀__閱讀 11,626評(píng)論 0 58
  • 寫這個(gè)系列文章主要是對(duì)之前做項(xiàng)目用到的docker相關(guān)技術(shù)做一些總結(jié),包括docker基礎(chǔ)技術(shù)Linux命名空間,...
    __七把刀__閱讀 5,924評(píng)論 0 16
  • 概述 自從docker容器出現(xiàn)以來,容器的網(wǎng)絡(luò)通信就一直是大家關(guān)注的焦點(diǎn),也是生產(chǎn)環(huán)境的迫切需求。而容器的網(wǎng)絡(luò)通信...
    糙老爺們兒吃什么櫻桃閱讀 3,722評(píng)論 1 5
  • 1.收聽晨間導(dǎo)讀。船長(zhǎng)的那句“新的認(rèn)知一定要建立在新的認(rèn)知基礎(chǔ)上,事情可以用新的,脫離你熟悉的方式解決,大破大立”...
    YY的世界閱讀 229評(píng)論 0 0
  • 別再喊我玻璃佬 文/黃影 你是廣東佬 你才總喊 牛肉佬豬肉佬 你一喊 路人都能聞到 牛的味道 豬的味...
    黃影詩(shī)風(fēng)閱讀 407評(píng)論 0 5

友情鏈接更多精彩內(nèi)容