您好,登錄后才能下訂單哦!
這篇文章主要介紹了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
查看veth pair從設(shè)備:
在宿主機上運行如下命令,從這里面我們看到在host的default network namespace中確實有4個attach到上面docker0 linux bridge上的設(shè)備。
ip addr|grep docker0
查看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
進入容器的network namespace里:
這里我們在宿主機器上選擇一個container,用以前文章介紹的kube-debug進入容器內(nèi)部
kubectl get podsdocker pskubectl-debug deployment-nginx-app-69b6bbfd6d-8n69w --namespace default
查看容器內(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
查看容器內(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
根據(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í)!
免責(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)容。