這篇文章主要介紹kubernetes中網(wǎng)絡(luò)模型的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的尋甸網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Kubernetes從Docker默認(rèn)的網(wǎng)絡(luò)模型中獨(dú)立出來(lái)形成一套自己的網(wǎng)絡(luò)模型。模型的基礎(chǔ)原則是:每個(gè)Pod都擁有一個(gè)獨(dú)立的IP地址,而且假定所有Pod都在一個(gè)可以直接連通的,扁平的網(wǎng)絡(luò)空間中。同一個(gè)Pod內(nèi)的容器可以通過(guò)localhost來(lái)連接對(duì)方的端口。
Docker網(wǎng)絡(luò)模型
Docker使用Linux橋接,在宿主機(jī)上虛擬一個(gè)Docker網(wǎng)橋(docker0),Docker啟動(dòng)一個(gè)容器時(shí)會(huì)根據(jù)Docker網(wǎng)橋的網(wǎng)段分配容器的IP,同時(shí)Docker網(wǎng)橋是每個(gè)容器的默認(rèn)網(wǎng)關(guān)。因?yàn)樵谕粋€(gè)宿主機(jī)內(nèi)的容器都接入同一個(gè)網(wǎng)橋,這樣容器之間就能通過(guò)容器的IP直接通信。
1. 網(wǎng)絡(luò)命名空間
為了支持網(wǎng)絡(luò)協(xié)議棧的多個(gè)實(shí)例,Linux在網(wǎng)絡(luò)棧中引入了網(wǎng)絡(luò)命名空間。這些獨(dú)立的協(xié)議棧被隔離到不同的命名空間中。處于不同命名空間的網(wǎng)絡(luò)棧是完全隔離的。網(wǎng)絡(luò)命名空間內(nèi)可以有自己獨(dú)立的路由表及獨(dú)立的Iptables/Netfilter設(shè)置來(lái)提供包轉(zhuǎn)發(fā),NAT及IP包過(guò)濾等功能。
2. Veth
引入Veth設(shè)備對(duì)是為了在不同的網(wǎng)絡(luò)命名空間之間進(jìn)行通信,利用它可以直接將兩個(gè)網(wǎng)絡(luò)命名空間連接起來(lái)。
3. Iptables/Netfilter
Netfilter是Linux操作系統(tǒng)核心層內(nèi)部的一個(gè)數(shù)據(jù)包處理模塊. Iptables是應(yīng)用層的,其實(shí)質(zhì)是一個(gè)定義規(guī)則的配置工具,而核心的數(shù)據(jù)包攔截和轉(zhuǎn)發(fā)是Netfiler。
Netfilter作用于網(wǎng)絡(luò)層,數(shù)據(jù)包通過(guò)網(wǎng)絡(luò)層會(huì)經(jīng)過(guò)Netfilter的五個(gè)掛載點(diǎn)(Hook POINT):PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING 任何一個(gè)數(shù)據(jù)包,只要經(jīng)過(guò)本機(jī),必將經(jīng)過(guò)這五個(gè)掛載點(diǎn)的其中一個(gè)。
iptables的規(guī)則組成,又被稱為四表五鏈:
四張表:filter表(用于過(guò)濾)、nat表(用于地址轉(zhuǎn)換)、mangle表(修改數(shù)據(jù)包)、raw表(一般是為了不再讓iptables做數(shù)據(jù)包的鏈接跟蹤處理,跳過(guò)其他表,提高性能)
五個(gè)掛載點(diǎn):PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING
具體來(lái)說(shuō),就是iptables每一條允許/拒絕或轉(zhuǎn)發(fā)等規(guī)則必須選擇一個(gè)掛載點(diǎn),關(guān)聯(lián)一張表。
查看系統(tǒng)中已有的規(guī)則的方法如下:
iptables-save : 按照命令的方式打印Iptables的內(nèi)容。
Iptables-vnL : 以另一種格式顯示Netfilter表的內(nèi)容。
4. 網(wǎng)橋
網(wǎng)橋是一個(gè)二層網(wǎng)絡(luò)設(shè)備,可以解析收發(fā)的報(bào)文,讀取目標(biāo)MAC地址的信息,和自己記錄的MAC表結(jié)合來(lái)決策報(bào)文的轉(zhuǎn)發(fā)端口。
5. 路由
路由功能由IP層維護(hù)的一張路由表來(lái)實(shí)現(xiàn)。當(dāng)主機(jī)收到數(shù)據(jù)報(bào)文時(shí),它用此表來(lái)決策下來(lái)應(yīng)該做什么操作,當(dāng)從網(wǎng)絡(luò)側(cè)接收到數(shù)據(jù)報(bào)文時(shí),IP層首先會(huì)檢查報(bào)文的IP地址是否與主機(jī)自身的地址相同。如果不同,并且主機(jī)配置了路由功能,那么報(bào)文將被轉(zhuǎn)發(fā),否則,報(bào)文將被放棄。
查看LOCAL表的內(nèi)容:
ip route show table local type local
路由表查看:
Ip route list
6. 網(wǎng)關(guān)
網(wǎng)關(guān)(Gateway)就是一個(gè)網(wǎng)絡(luò)連接到另一個(gè)網(wǎng)絡(luò)的“關(guān)口”.按照不同的分類標(biāo)準(zhǔn),網(wǎng)關(guān)也有很多種。TCP/IP協(xié)議里的網(wǎng)關(guān)是最常用的.
網(wǎng)關(guān)實(shí)質(zhì)上是一個(gè)網(wǎng)絡(luò)通向其他網(wǎng)絡(luò)的IP地址。比如有網(wǎng)絡(luò)A和網(wǎng)絡(luò)B,網(wǎng)絡(luò)A的IP地址范圍為“192.168.1.1~192. 168.1.254”,子網(wǎng)掩碼為255.255.255.0;網(wǎng)絡(luò)B的IP地址范圍為“192.168.2.1~192.168.2.254”,子網(wǎng)掩碼為255.255.255.0。在沒(méi)有路由器的情況下,兩個(gè)網(wǎng)絡(luò)之間是不能進(jìn)行TCP/IP通信的,即使是兩個(gè)網(wǎng)絡(luò)連接在同一臺(tái)交換機(jī)(或集線器)上,TCP/IP協(xié)議也會(huì)根據(jù)子網(wǎng)掩碼(255.255.255.0)判定兩個(gè)網(wǎng)絡(luò)中的主機(jī)處在不同的網(wǎng)絡(luò)里。而要實(shí)現(xiàn)這兩個(gè)網(wǎng)絡(luò)之間的通信,則必須通過(guò)網(wǎng)關(guān)。
Docker網(wǎng)橋是宿主機(jī)虛擬出來(lái)的,并不是真實(shí)存在的網(wǎng)絡(luò)設(shè)備,外部網(wǎng)絡(luò)是無(wú)法尋址到的,這也意味著外部網(wǎng)絡(luò)無(wú)法直接訪問(wèn)到容器。如果容器希望能夠被外部網(wǎng)絡(luò)訪問(wèn)到,就需要通過(guò)映射容器端口到宿主機(jī)。 Docker run -p ****:****
實(shí)際上,端口映射通過(guò)在iptables的NAT表中添加相應(yīng)的規(guī)則,所以我們將端口映射的方式成為NAT方式。
三:Kubernetes網(wǎng)絡(luò)模型
1. 容器間通信
Pod是容器的集合,Pod包含的容器都運(yùn)行在同一個(gè)宿主機(jī)上,這些容器將擁有同樣的網(wǎng)絡(luò)空間,容器之間能夠互相通信,它們能夠在本地訪問(wèn)其它容器的端口。
2. Pod間通信
Kubernetes網(wǎng)絡(luò)模型是一個(gè)扁平化的網(wǎng)絡(luò)平面,在這個(gè)網(wǎng)絡(luò)平面內(nèi),Pod作為一個(gè)網(wǎng)絡(luò)單元同Kubernetes Node的網(wǎng)絡(luò)處于同一層級(jí)。
同一個(gè)Kubernetes Node上的Pod/容器原生能通信,但是Kubernetes Node之間的Pod/容器之間的通信,需要對(duì)Docker進(jìn)行增強(qiáng)。在容器集群中創(chuàng)建一個(gè)覆蓋網(wǎng)絡(luò),聯(lián)通各個(gè)節(jié)點(diǎn)。
3. Service到Pod的通信
Service 在Pod之間起到服務(wù)代理的作用,對(duì)外表現(xiàn)為一個(gè)單一訪問(wèn)接口,將請(qǐng)求轉(zhuǎn)發(fā)給Pod,Service的網(wǎng)絡(luò)轉(zhuǎn)發(fā)是Kubernetes實(shí)現(xiàn)服務(wù)編排的關(guān)鍵一環(huán)。
IP
是10.254.248.68,端口80/TCP對(duì)應(yīng)的Endpoints包含10.1.46.2:80,10.1.77.2:80;即當(dāng)請(qǐng)求10.254.248.68:80時(shí),會(huì)轉(zhuǎn)發(fā)到這些后端之一。
Kubernetes Proxy通過(guò)創(chuàng)建Iptables規(guī)則,直接重定向訪問(wèn)Service虛擬IP的請(qǐng)求到Endpoints.而當(dāng)Endpoints發(fā)生變化的時(shí)候,Kubernetes Proxy會(huì)刷新相關(guān)的Iptables規(guī)則。在Iptables模式下,Kubernetes Proxy只是負(fù)責(zé)監(jiān)控Service和Endpoints,更新Iptables規(guī)則,報(bào)文的轉(zhuǎn)發(fā)依賴于Linux內(nèi)核,默認(rèn)的負(fù)載均衡策略是隨機(jī)方式。
以上是“kubernetes中網(wǎng)絡(luò)模型的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!