溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

發(fā)布時間:2021-11-18 09:51:29 來源:億速云 閱讀:140 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要介紹了docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

查看docker0 linux bridge:

在宿主機上運行如下命令,從這里面我們看到docker在host上的linux bridge device,另外這個bridge上attach了4個從設(shè)備。當(dāng)然根據(jù)上一篇文章,這些從設(shè)備一定是veth pair device的一端,而另一端一定是在docker container的network namespace里。


brctl show

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

查看veth pair從設(shè)備:

在宿主機上運行如下命令,從這里面我們看到在host的default network namespace中確實有4個attach到上面docker0 linux bridge上的設(shè)備。


ip addr|grep docker0

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

查看docker容器:

在宿主機上運行如下命令,我們看到確實是有4個k8s pod容器在運行,根據(jù)上一篇文章,每個容器都有一個network namespace,所以也印證了上面命令中的docker0 bridge上attach的4個設(shè)備。這里有同學(xué)可能會有疑問,明明是8個容器,為什么說是4個呢?細心的同學(xué)應(yīng)該觀察出來了,另外4個都是同樣的image。沒錯,這是因為在k8s中,每個pod都需要有infrastructure image的(在以前文章安裝kubelet的時候我們通過啟動參數(shù)--pod-infra-container-image配置過這個基礎(chǔ)image),而k8s中這個基礎(chǔ)image的container和我們應(yīng)用程序的image的container是共用同一個network namespace的。所以在k8s的pod之中,infrastructure image產(chǎn)生的container和同一個pod中所有application image產(chǎn)生的container在同一個network namespace里,當(dāng)然這里就是4個network namespace了。


docker ps

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

進入容器的network namespace里:

這里我們在宿主機器上選擇一個container,用以前文章介紹的kube-debug進入容器內(nèi)部




kubectl get podsdocker pskubectl-debug deployment-nginx-app-69b6bbfd6d-8n69w --namespace default

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

查看容器內(nèi)的veth設(shè)備:

在容器中運行以下命令,我們可以看到容器內(nèi)確實有一個veth設(shè)備。根據(jù)以前文章,這個veth設(shè)備就是veth pair在容器的另一端,并且這一端的設(shè)備也是有ip地址的,ip地址就是container的ip地址。當(dāng)然它的另一端是attach在宿主default namesapce中的docker0 bridge device里了。


ip -d link show

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

查看容器內(nèi)的路由表:

在容器中運行以下命令,我們可以看到容器network namesapce中的路由表信息。

  • 默認網(wǎng)關(guān)為10.1.27.1/32,其實就是host network namespace中的docker0 bridge的ip地址。

  • 對于10.1.27.0/24網(wǎng)絡(luò)地址空間的訪問都是直連訪問,不需要下一跳ip地址。


route -n

docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的

根據(jù)以上信息總結(jié)docker宿主中的網(wǎng)絡(luò):

  • 宿主中容器的網(wǎng)絡(luò)地址空間一般為x.x.x.0/24,每一個container屬于一個獨立的network namespace。

  • 宿主的default network namespace中會有l(wèi)inux bridge,一般名字是docker0,其ip地址為x.x.x.1/32。

  • 每個container會有一個veth pair device對應(yīng),這個veth pair一端在container的network namespace中,有ip地址,并且這個ip地址就是容器的ip地址。veth pair的另一端attach到宿主network namespace中的linux bridge docker0上,以完成container network namespace和宿主network namespace之間的數(shù)據(jù)流動。

  • container的默認網(wǎng)關(guān)是x.x.x.1/32,也就是宿主network namespace中的linux bridge docker0的ip地址。

  • container到容器的網(wǎng)絡(luò)地址空間(x.x.x.0/24)的訪問方式為直連,不需要下一跳ip。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“docker宿主環(huán)境中容器網(wǎng)絡(luò)是怎么樣的”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI