如何理解Kubernetes以及其網(wǎng)絡(luò)方案和對比-創(chuàng)新互聯(lián)

如何理解Kubernetes以及其網(wǎng)絡(luò)方案和對比,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

成都創(chuàng)新互聯(lián)作為成都網(wǎng)站建設(shè)公司,專注網(wǎng)站建設(shè)公司、網(wǎng)站設(shè)計(jì),有關(guān)成都定制網(wǎng)站方案、改版、費(fèi)用等問題,行業(yè)涉及成都陽臺(tái)護(hù)欄等多個(gè)領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。

Kubernetes無疑是當(dāng)前最火熱的容器編排工具,網(wǎng)絡(luò)是kubernetes中非常重要的一環(huán), 主要介紹一些相應(yīng)的網(wǎng)絡(luò)原理及術(shù)語,以及kubernetes中的網(wǎng)絡(luò)方案和對比。 Kubernetes本身并不提供網(wǎng)絡(luò)功能,只是把網(wǎng)絡(luò)接口開放出來,通過插件的形式實(shí)現(xiàn)。為了滿足不同的網(wǎng)絡(luò)功能及需求,使容器在創(chuàng)建或銷毀時(shí)能夠容易地配置容器網(wǎng)絡(luò),CNI(Container Network Interface)應(yīng)運(yùn)而生, CNI旨在定義運(yùn)行時(shí)和插件之間的接口,在kubernetes中,CNI連接kubelet和網(wǎng)絡(luò)插件來為容器配置對應(yīng)的網(wǎng)絡(luò)設(shè)置。

1 背景

容器網(wǎng)絡(luò)是容器選擇連接到其他容器、主機(jī)和外部網(wǎng)絡(luò)的機(jī)制。在kubernetes網(wǎng)絡(luò)模型設(shè)計(jì)中,往往需要每個(gè)Pod都擁有一個(gè)獨(dú)立的IP地址,而且假定所有的pod都在一個(gè)可以直接連通的、扁平的網(wǎng)絡(luò)空間中。用戶不需要額外考慮如何建立Pod之間的連接,也不需要考慮將容器端口映射到主機(jī)端口等問題。所有節(jié)點(diǎn)都可在不用NAT的方式下同所有容器通訊,容器的地址和別人看到的地址是同一個(gè)地址。

2 技術(shù)術(shù)語

IPAM:IP地址管理;這個(gè)IP地址管理并不是容器所特有的,傳統(tǒng)的網(wǎng)絡(luò)比如說DHCP其實(shí)也是一種IPAM,到了容器時(shí)代我們談IPAM,主流的兩種方法:基于CIDR的IP地址段分配地或者精確為每一個(gè)容器分配IP。但總之一旦形成一個(gè)容器主機(jī)集群之后,上面的容器都要給它分配一個(gè)全局唯一的IP地址,這就涉及到IPAM的話題。

Overlay:在現(xiàn)有二層或三層網(wǎng)絡(luò)之上再構(gòu)建起來一個(gè)獨(dú)立的網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)通常會(huì)有自己獨(dú)立的IP地址空間、交換或者路由的實(shí)現(xiàn)。

BGP:主干網(wǎng)自治網(wǎng)絡(luò)的路由協(xié)議,用于管理邊緣路由器之間數(shù)據(jù)包的路由方式。BGP通過考慮可用路徑,路由規(guī)則和特定網(wǎng)絡(luò)策略,幫助弄清楚如何將數(shù)據(jù)從一個(gè)網(wǎng)絡(luò)發(fā)送到另一個(gè)網(wǎng)絡(luò)。BGP有時(shí)被用作CNI插件中的路由機(jī)制,而不是封裝的覆蓋網(wǎng)絡(luò)。

封裝:封裝是指在附加層中封裝網(wǎng)絡(luò)數(shù)據(jù)包以提供其他上下文和信息的過程。在overlay網(wǎng)絡(luò)中,封裝被用于從虛擬網(wǎng)絡(luò)轉(zhuǎn)換到底層地址空間,從而能路由到不同的位置(數(shù)據(jù)包可以被解封裝,并繼續(xù)到其目的地)。

3 CNI

Container Network Interface (CNI) 最早是由CoreOS發(fā)起的容器網(wǎng)絡(luò)規(guī)范,是Kubernetes網(wǎng)絡(luò)插件的基礎(chǔ)。其基本思想為:Container Runtime在創(chuàng)建容器時(shí),先創(chuàng)建好network namespace,然后調(diào)用CNI插件為這個(gè)netns配置網(wǎng)絡(luò),其后再啟動(dòng)容器內(nèi)的進(jìn)程。

CNI Plugin負(fù)責(zé)給容器配置網(wǎng)絡(luò),必須實(shí)現(xiàn)為由容器管理系統(tǒng)(rkt或者kubernetes)調(diào)用的可執(zhí)行文件,包括兩個(gè)基本的接口來配置網(wǎng)絡(luò):

配置網(wǎng)絡(luò): AddNetwork(net NetworkConfig, rt RuntimeConf) (types.Result, error)

清理網(wǎng)絡(luò):DelNetwork(net NetworkConfig, rt RuntimeConf) error

在Kubernetes中,kubelet決定了容器應(yīng)該加入哪個(gè)網(wǎng)絡(luò)以及它需要調(diào)用哪個(gè)插件。然后插件會(huì)將接口添加到容器網(wǎng)絡(luò)命名空間中,作為一個(gè)veth對的一側(cè)。接著它會(huì)在主機(jī)上進(jìn)行更改,比如將veth的其他部分連接到網(wǎng)橋。再之后,它會(huì)通過調(diào)用單獨(dú)的IPAM(IP地址管理)插件來分配IP地址并設(shè)置路由。

4 IPAM

以上CNI插件解決了Pod內(nèi)網(wǎng)絡(luò)配置的問題,但是網(wǎng)絡(luò)還有一個(gè)問題要解決的便是IP管理,為了解耦網(wǎng)絡(luò)配置和ip管理, CNI定義了第二種類型的插件-ip地址管理插件(IPAM插件)。

與CNI插件一樣,IPAM插件通過運(yùn)行可執(zhí)行文件來調(diào)用。IPAM插件負(fù)責(zé)為接口配置和管理IP地址。

CNI插件在執(zhí)行時(shí)調(diào)用IPAM插件,IPAM插件來確定接口IP /子網(wǎng),網(wǎng)關(guān)和路由等信息,從而在容器啟動(dòng)時(shí)分配IP地址并配置網(wǎng)絡(luò),并將此信息返回給CNI插件,在刪除容器時(shí)再次調(diào)用它以清理這些資源。

IPAM插件可以通過協(xié)議(例如dhcp),存儲(chǔ)在本地文件系統(tǒng)上的數(shù)據(jù),網(wǎng)絡(luò)配置文件的“ipam”部分或上述各項(xiàng)的組合來獲取信息。

5 介紹兩種常見的k8s網(wǎng)絡(luò)方案

flannel

flannel是CoreOS團(tuán)隊(duì)設(shè)計(jì)的一個(gè)網(wǎng)絡(luò)方案,以etcd作為存儲(chǔ),給node上的每個(gè)容器分配全局唯一的IP地址, 容器間通過overlay網(wǎng)絡(luò)互相通信。

Pod間通信如下:

? Pod1和pod不在同一宿主機(jī)

數(shù)據(jù)從源容器中發(fā)出后,經(jīng)由所在主機(jī)的docker0虛擬網(wǎng)卡轉(zhuǎn)發(fā)到flannel0虛擬網(wǎng)卡(veth pair),flanneld服務(wù)監(jiān)聽在網(wǎng)卡的另外一端,F(xiàn)lannel通過Etcd服務(wù)維護(hù)了一張節(jié)點(diǎn)間的路由表,利用etcd來管理可分配的IP地址段資源,同時(shí)監(jiān)控etcd中每個(gè)Pod的實(shí)際地址,源主機(jī)的flanneld服務(wù)將原本的數(shù)據(jù)內(nèi)容UDP封裝后根據(jù)自己的路由表投遞給目的節(jié)點(diǎn)的flanneld服務(wù),數(shù)據(jù)到達(dá)以后被解包,然后直接進(jìn)入目的節(jié)點(diǎn)的flannel0虛擬網(wǎng)卡,然后被轉(zhuǎn)發(fā)到目的主機(jī)的docker0虛擬網(wǎng)卡,最后就像本機(jī)容器通信一下的有docker0路由到達(dá)目標(biāo)容器。

? Pod1和Pod2在同一臺(tái)宿主機(jī)

Pod1和Pod2在同一臺(tái)主機(jī)的話,由Docker0網(wǎng)橋直接轉(zhuǎn)發(fā)請求到Pod2,不經(jīng)過Flannel。

calico

Calico是一個(gè)純3層的數(shù)據(jù)中心網(wǎng)絡(luò)方案,而且無縫集成像OpenStack這種IaaS云架構(gòu),能夠提供可控的VM、容器、裸機(jī)之間的IP通信。

通過將整個(gè)互聯(lián)網(wǎng)的可擴(kuò)展IP網(wǎng)絡(luò)原則壓縮到數(shù)據(jù)中心級(jí)別,Calico在每一個(gè)計(jì)算節(jié)點(diǎn)利用Linux Kernel實(shí)現(xiàn)了一個(gè)高效的vRouter來負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā),而每個(gè)vRouter通過BGP協(xié)議負(fù)責(zé)把自己上運(yùn)行的workload的路由信息像整個(gè)Calico網(wǎng)絡(luò)內(nèi)傳播——小規(guī)模部署可以直接互聯(lián),大規(guī)模下可通過指定的BGP route reflector來完成。這樣保證最終所有的workload之間的數(shù)據(jù)流量都是通過IP路由的方式完成互聯(lián)的。

Calico節(jié)點(diǎn)組網(wǎng)可以直接利用數(shù)據(jù)中心的網(wǎng)絡(luò)結(jié)構(gòu)(無論是L2或者L3),不需要額外的NAT,隧道或者Overlay Network。

Calico還提供了豐富而靈活的網(wǎng)絡(luò)Policy,保證通過各個(gè)節(jié)點(diǎn)上的ACLs來提供Workload的多租戶隔離、安全組以及其他可達(dá)性限制等功能。

看完上述內(nèi)容,你們掌握如何理解Kubernetes以及其網(wǎng)絡(luò)方案和對比的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前標(biāo)題:如何理解Kubernetes以及其網(wǎng)絡(luò)方案和對比-創(chuàng)新互聯(lián)
地址分享:http://muchs.cn/article38/eeesp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)企業(yè)建站、網(wǎng)站導(dǎo)航響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化