網(wǎng)絡(luò)的命名空間
linux在網(wǎng)絡(luò)棧中引入網(wǎng)絡(luò)命名空間,從而支持網(wǎng)絡(luò)協(xié)議棧的多個(gè)實(shí)例。這些獨(dú)立的協(xié)議棧被隔離到不同的命名空間。
Linux在網(wǎng)絡(luò)棧中引入網(wǎng)絡(luò)命名空間右核,將獨(dú)立的網(wǎng)絡(luò)協(xié)議棧隔離到不同的命令空間中,彼此間無(wú)法通信渺绒;docker利用這一特性贺喝,實(shí)現(xiàn)不容器間的網(wǎng)絡(luò)隔離菱鸥。
Veth設(shè)備對(duì)
Veth設(shè)備對(duì)可以在不同的網(wǎng)絡(luò)命名空間之間進(jìn)行通信,直連兩個(gè)網(wǎng)絡(luò)命名空間躏鱼。
veth設(shè)備可以在不同網(wǎng)絡(luò)命名空間之間轉(zhuǎn)移的設(shè)備氮采。
網(wǎng)橋
將多個(gè)不同網(wǎng)絡(luò)連接起來(lái)并實(shí)現(xiàn)多個(gè)網(wǎng)絡(luò)中主機(jī)的相互通信。
網(wǎng)橋是二層的虛擬網(wǎng)絡(luò)設(shè)備染苛,把多個(gè)網(wǎng)絡(luò)接口“連接”起來(lái)鹊漠,使得網(wǎng)口之間的報(bào)文能夠互相轉(zhuǎn)發(fā)。實(shí)現(xiàn)類似交換機(jī)的多對(duì)多通信茶行。
docker0網(wǎng)橋的IP地址作為默認(rèn)網(wǎng)關(guān)躯概。
Iptables/Netfilter
自定義的數(shù)據(jù)包處理過(guò)程。
linux網(wǎng)絡(luò)協(xié)議棧中有一組回調(diào)函數(shù)掛接點(diǎn)畔师,在這些掛接點(diǎn)掛接的鉤子函數(shù)可以在linux網(wǎng)絡(luò)棧處理數(shù)據(jù)包的過(guò)程中對(duì)數(shù)據(jù)包進(jìn)行操作娶靡。
Netfilter是在內(nèi)核模式下,執(zhí)行掛接的規(guī)則看锉;Iptables是在用戶模式下姿锭,協(xié)助維護(hù)內(nèi)核中Netfilter的規(guī)則表。通過(guò)二者共同實(shí)現(xiàn)linux網(wǎng)絡(luò)協(xié)議棧的數(shù)據(jù)包處理機(jī)制伯铣。
================= 上層協(xié)議處理=================
^ ||
||
INPUT OUTPUT
|| ||
路由 ======== > FORWARD ======== > ||
|| ||
PREROUTING POSTROUTING
================= 接口設(shè)備 =================
路由
路由功能由IP層的路由表來(lái)實(shí)現(xiàn)呻此。
Linux系統(tǒng)包含一個(gè)完整的路由功能,當(dāng)IP層在處理數(shù)據(jù)發(fā)送或轉(zhuǎn)發(fā)的時(shí)候懂傀,會(huì)使用路由表來(lái)決定發(fā)往哪里
在Kubernetes網(wǎng)絡(luò)中存在兩種IP(Pod IP和Service Cluster IP)趾诗,Pod IP 地址是實(shí)際存在于某個(gè)網(wǎng)卡(可以是虛擬設(shè)備)上的,Service Cluster IP它是一個(gè)虛擬IP
是由kube-proxy使用Iptables/ipvs規(guī)則重新定向到其本地端口蹬蚁,再均衡到后端Pod的。
docker的網(wǎng)絡(luò)實(shí)現(xiàn)
docker支持四種網(wǎng)絡(luò)模式:host郑兴、container犀斋、none、bridge情连。
k8s只使用bridge模式叽粹。在bridge模式下,docker daemon在首次啟動(dòng)時(shí)會(huì)創(chuàng)建虛擬網(wǎng)橋docker0却舀。然后按照RPC1918的模型虫几,在私有網(wǎng)絡(luò)空間中給網(wǎng)橋分配一個(gè)子網(wǎng)。后面由docker創(chuàng)建出來(lái)的容器挽拔,都會(huì)創(chuàng)建一個(gè)虛擬的以太網(wǎng)設(shè)備(Veth設(shè)備對(duì))辆脸,其中一端關(guān)聯(lián)到網(wǎng)橋上,另一端使用Linux的網(wǎng)絡(luò)命名空間技術(shù)螃诅,映射到容器內(nèi)的eth0設(shè)備啡氢,然后從網(wǎng)橋的地址段內(nèi)給eth0接口分配一個(gè)IP地址状囱。