docker網(wǎng)絡基礎(chǔ)

網(wǎng)絡的命名空間

linux在網(wǎng)絡棧中引入網(wǎng)絡命名空間,從而支持網(wǎng)絡協(xié)議棧的多個實例。這些獨立的協(xié)議棧被隔離到不同的命名空間。
Linux在網(wǎng)絡棧中引入網(wǎng)絡命名空間,將獨立的網(wǎng)絡協(xié)議棧隔離到不同的命令空間中,彼此間無法通信;docker利用這一特性,實現(xiàn)不容器間的網(wǎng)絡隔離。

Veth設(shè)備對

Veth設(shè)備對可以在不同的網(wǎng)絡命名空間之間進行通信,直連兩個網(wǎng)絡命名空間。
veth設(shè)備可以在不同網(wǎng)絡命名空間之間轉(zhuǎn)移的設(shè)備。

網(wǎng)橋

將多個不同網(wǎng)絡連接起來并實現(xiàn)多個網(wǎng)絡中主機的相互通信。
網(wǎng)橋是二層的虛擬網(wǎng)絡設(shè)備,把多個網(wǎng)絡接口“連接”起來,使得網(wǎng)口之間的報文能夠互相轉(zhuǎn)發(fā)。實現(xiàn)類似交換機的多對多通信。
docker0網(wǎng)橋的IP地址作為默認網(wǎng)關(guān)。

Iptables/Netfilter

自定義的數(shù)據(jù)包處理過程。
linux網(wǎng)絡協(xié)議棧中有一組回調(diào)函數(shù)掛接點,在這些掛接點掛接的鉤子函數(shù)可以在linux網(wǎng)絡棧處理數(shù)據(jù)包的過程中對數(shù)據(jù)包進行操作。
Netfilter是在內(nèi)核模式下,執(zhí)行掛接的規(guī)則;Iptables是在用戶模式下,協(xié)助維護內(nèi)核中Netfilter的規(guī)則表。通過二者共同實現(xiàn)linux網(wǎng)絡協(xié)議棧的數(shù)據(jù)包處理機制。

================= 上層協(xié)議處理=================
^ ||
||
INPUT OUTPUT
|| ||
路由 ======== > FORWARD ======== > ||
|| ||
PREROUTING POSTROUTING
================= 接口設(shè)備 =================

路由

路由功能由IP層的路由表來實現(xiàn)。
Linux系統(tǒng)包含一個完整的路由功能,當IP層在處理數(shù)據(jù)發(fā)送或轉(zhuǎn)發(fā)的時候,會使用路由表來決定發(fā)往哪里

在Kubernetes網(wǎng)絡中存在兩種IP(Pod IP和Service Cluster IP),Pod IP 地址是實際存在于某個網(wǎng)卡(可以是虛擬設(shè)備)上的,Service Cluster IP它是一個虛擬IP

是由kube-proxy使用Iptables/ipvs規(guī)則重新定向到其本地端口,再均衡到后端Pod的。

docker的網(wǎng)絡實現(xiàn)

docker支持四種網(wǎng)絡模式:host、container、none、bridge。
k8s只使用bridge模式。在bridge模式下,docker daemon在首次啟動時會創(chuàng)建虛擬網(wǎng)橋docker0。然后按照RPC1918的模型,在私有網(wǎng)絡空間中給網(wǎng)橋分配一個子網(wǎng)。后面由docker創(chuàng)建出來的容器,都會創(chuàng)建一個虛擬的以太網(wǎng)設(shè)備(Veth設(shè)備對),其中一端關(guān)聯(lián)到網(wǎng)橋上,另一端使用Linux的網(wǎng)絡命名空間技術(shù),映射到容器內(nèi)的eth0設(shè)備,然后從網(wǎng)橋的地址段內(nèi)給eth0接口分配一個IP地址。

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

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

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