摘要:在之前的版本上,用戶時(shí)常抱怨的網(wǎng)絡(luò)只有,沒有其他選擇。而容器社區(qū)的發(fā)展是十分迅猛的,各種容器網(wǎng)絡(luò)插件風(fēng)起云涌,欲在江湖中一爭(zhēng)高下。同樣是基于,使用提供的,網(wǎng)絡(luò)配置信息以方式注入。
在之前的Rancher版本上,用戶時(shí)常抱怨Rancher的網(wǎng)絡(luò)只有IPsec,沒有其他選擇。而容器社區(qū)的發(fā)展是十分迅猛的,各種容器網(wǎng)絡(luò)插件風(fēng)起云涌,欲在江湖中一爭(zhēng)高下。Rancher v1.2版本中與時(shí)俱進(jìn),對(duì)之前的網(wǎng)絡(luò)實(shí)現(xiàn)進(jìn)行了改造,支持了CNI標(biāo)準(zhǔn),除IPsec之外又實(shí)現(xiàn)了呼聲比較高的VXLAN網(wǎng)絡(luò),同時(shí)增加了CNI插件管理機(jī)制,讓我們可以hacking接入其他第三方CNI插件。本文將和大家一起解讀一下Rancher v1.2中網(wǎng)絡(luò)的實(shí)現(xiàn)。
Rancher-net CNI化以最簡(jiǎn)單最快速方式部署Rancher并添加Host,以默認(rèn)的IPsec網(wǎng)絡(luò)部署一個(gè)簡(jiǎn)單的應(yīng)用后,進(jìn)入應(yīng)用容器內(nèi)部看一看網(wǎng)絡(luò)情況,對(duì)比一下之前的Rancher版本:
我們最直觀的感受便是,網(wǎng)卡名從eth0到eth0@if8有了變化,原先網(wǎng)卡多IP的實(shí)現(xiàn)也去掉了,變成了單純的IPsec網(wǎng)絡(luò)IP。這其實(shí)就引來(lái)了我們要探討的內(nèi)容,雖然網(wǎng)絡(luò)實(shí)現(xiàn)還是IPsec,但是rancher-net組件實(shí)際上是已經(jīng)基于CNI標(biāo)準(zhǔn)了。最直接的證明就是看一下,rancher-net鏡像的Dockerfile:
熟悉CNI規(guī)范的伙伴都知道/opt/cni/bin目錄是CNI的插件目錄,bridge和loopback也是CNI的默認(rèn)插件,這里的rancher-bridge實(shí)際上和CNI原生的bridge沒有太大差別,只是在冪等性健壯性上做了增強(qiáng)。而在IPAM也就是IP地址管理上,Rancher實(shí)現(xiàn)了一個(gè)自己的rancher-cni-ipam,它的實(shí)現(xiàn)非常簡(jiǎn)單,就是通過(guò)訪問rancher-metadata來(lái)獲取系統(tǒng)給容器分配的IP。Rancher實(shí)際上Fork了CNI的代碼并做了這些修改,https://github.com/rancher/cni。這樣看來(lái)實(shí)際上,rancher-net的IPsec和Vxlan網(wǎng)絡(luò)其實(shí)就是基于CNI的bridge基礎(chǔ)上實(shí)現(xiàn)的。
在解釋rancher-net怎么和CNI融合之前,我們需要了解一下CNI bridge模式是怎么工作的。舉個(gè)例子,假設(shè)有兩個(gè)容器nginx和mysql,每個(gè)容器都有自己的eth0,由于每個(gè)容器都是在各自的namespace里面,所以互相之間是無(wú)法通信的,這就需要在外部構(gòu)建一個(gè)bridge來(lái)做二層轉(zhuǎn)發(fā),容器內(nèi)的eth0和外部連接在容器上的虛擬網(wǎng)卡構(gòu)建成對(duì)的veth設(shè)備,這樣容器之間就可以通信了。其實(shí)無(wú)論是docker的bridge還是cni的bridge,這部分工作原理是差不多的,如圖所示:
那么我們都知道CNI網(wǎng)絡(luò)在創(chuàng)建時(shí)需要有一個(gè)配置,這個(gè)配置用來(lái)定義CNI網(wǎng)絡(luò)模式,讀取哪個(gè)CNI插件。在這個(gè)場(chǎng)景下也就是cni bridge的信息,這個(gè)信息rancher是通過(guò)rancher-compose傳入metadata來(lái)控制的。查看ipsec服務(wù)的rancher-compose.yml可以看到,type使用rancher-bridge,ipam使用rancher-cni-ipam,bridge網(wǎng)橋則復(fù)用了docker0,有了這個(gè)配置我們甚至可以隨意定義ipsec網(wǎng)絡(luò)的CIDR,如下圖所示:
ipsec服務(wù)實(shí)際上有兩個(gè)容器:一個(gè)是ipsec主容器,內(nèi)部包含rancher-net服務(wù)和ipsec需要的charon服務(wù);另一個(gè)sidekick容器是cni-driver,它來(lái)控制cni bridge的構(gòu)建。兩端主機(jī)通過(guò)IPsec隧道網(wǎng)絡(luò)通信時(shí),數(shù)據(jù)包到達(dá)物理網(wǎng)卡時(shí),需要通過(guò)Host內(nèi)的Iptables規(guī)則轉(zhuǎn)發(fā)到ipsec容器內(nèi),這個(gè)Iptables規(guī)則管理則是由network-manager組件來(lái)完成的,https://github.com/rancher/pl...。其原理如下圖所示(以IPsec為例):
整體上看cni ipsec的實(shí)現(xiàn)比之前的ipsec精進(jìn)了不少,而且也做了大量的解耦工作,不單純是走向社區(qū)的標(biāo)準(zhǔn),之前大量的Iptables規(guī)則也有了很大的減少,性能上其實(shí)也有了很大提升。
Rancher-net vxlan的實(shí)現(xiàn)那么rancher-net的另外一個(gè)backend vxlan又是如何實(shí)現(xiàn)的呢?我們需要?jiǎng)?chuàng)建一套VXLAN網(wǎng)絡(luò)環(huán)境來(lái)一探究竟,默認(rèn)的Cattle引擎網(wǎng)絡(luò)是IPsec,如果修改成VXLAN有很多種方式,可以參考我下面使用的方式。
首先,創(chuàng)建一個(gè)新的Environment Template,把Rancher IPsec禁用,同時(shí)開啟Rancher VXLAN,如下圖所示:
然后,我們創(chuàng)建一個(gè)新的ENV,并使用剛才創(chuàng)建的模版Cattle-VXLAN,創(chuàng)建完成后,添加Host即可使用。如下圖所示:
以分析IPsec網(wǎng)絡(luò)實(shí)現(xiàn)方式來(lái)分析VXLAN,基本上會(huì)發(fā)現(xiàn)其原理大致相同。同樣是基于CNI bridge,使用rancher提供的rancher-cni-bridge、rancher-cni-ipam,網(wǎng)絡(luò)配置信息以metadata方式注入。區(qū)別就在于rancher-net容器內(nèi)部,rancher-net激活的是vxlan driver,它會(huì)生成一個(gè)vtep1042設(shè)備,并開啟udp 4789端口,這個(gè)設(shè)備基于udp 4789構(gòu)建vxlan overlay的兩端通信,對(duì)于本機(jī)的容器通過(guò)eth0走bridge通信,對(duì)于其他Host的容器,則是通過(guò)路由規(guī)則轉(zhuǎn)發(fā)到vtep1042設(shè)備上,再通過(guò)overlay到對(duì)端主機(jī),由對(duì)端主機(jī)的bridge轉(zhuǎn)發(fā)到相應(yīng)的容器上。整個(gè)過(guò)程如圖所示:
總結(jié)容器網(wǎng)絡(luò)是容器云平臺(tái)中很重要的一環(huán),對(duì)于不同的規(guī)模、不同的安全要求,會(huì)有不同的選型。Rancher的默認(rèn)網(wǎng)絡(luò)改造成了CNI標(biāo)準(zhǔn),同時(shí)也會(huì)支持其他第三方CNI插件,結(jié)合Rancher獨(dú)有的Environment Template功能,用戶可以在一個(gè)大集群中的每個(gè)隔離環(huán)境內(nèi),創(chuàng)建不同的網(wǎng)絡(luò)模式,以滿足各種業(yè)務(wù)場(chǎng)景需求,這種管理的靈活性是其他平臺(tái)沒有的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/27975.html
摘要:在之前的版本上,用戶時(shí)常抱怨的網(wǎng)絡(luò)只有,沒有其他選擇。而容器社區(qū)的發(fā)展是十分迅猛的,各種容器網(wǎng)絡(luò)插件風(fēng)起云涌,欲在江湖中一爭(zhēng)高下。同樣是基于,使用提供的,網(wǎng)絡(luò)配置信息以方式注入。 在之前的Rancher版本上,用戶時(shí)常抱怨Rancher的網(wǎng)絡(luò)只有IPsec,沒有其他選擇。而容器社區(qū)的發(fā)展是十分迅猛的,各種容器網(wǎng)絡(luò)插件風(fēng)起云涌,欲在江湖中一爭(zhēng)高下。Rancher v1.2版本中與時(shí)俱進(jìn),...
摘要:官方于月日發(fā)布了其容器部署與管理平臺(tái)的最新版本,。架構(gòu)總覽在版本的整體架構(gòu)圖如下圖所示上,引擎向下深入演化成了基礎(chǔ)設(shè)施引擎,這一點(diǎn)上在時(shí)代也早有體現(xiàn)。基礎(chǔ)設(shè)施引擎初次安裝版本,會(huì)發(fā)現(xiàn)多了如下圖所示的明顯標(biāo)識(shí),默認(rèn)的引擎需要安裝等服務(wù)。 Rancher Labs官方于12月1日發(fā)布了其容器部署與管理平臺(tái)Rancher的最新版本,Rancher v1.2。Rancher v1.2可以說(shuō)是一...
摘要:官方于月日發(fā)布了其容器部署與管理平臺(tái)的最新版本,。架構(gòu)總覽在版本的整體架構(gòu)圖如下圖所示上,引擎向下深入演化成了基礎(chǔ)設(shè)施引擎,這一點(diǎn)上在時(shí)代也早有體現(xiàn)。基礎(chǔ)設(shè)施引擎初次安裝版本,會(huì)發(fā)現(xiàn)多了如下圖所示的明顯標(biāo)識(shí),默認(rèn)的引擎需要安裝等服務(wù)。 Rancher Labs官方于12月1日發(fā)布了其容器部署與管理平臺(tái)Rancher的最新版本,Rancher v1.2。Rancher v1.2可以說(shuō)是一...
摘要:年月初,當(dāng)我們發(fā)布時(shí),就定下了未來(lái)更頻繁的迭代的計(jì)劃。就在上周,正式發(fā)布啦除了對(duì)中一些的修復(fù)之外,它還有幾個(gè)新的功能用戶界面修復(fù)引擎的更改及其相關(guān)工具的改進(jìn)。并且,在可預(yù)見的未來(lái)之中,這一情況并不會(huì)改變。目前,僅支持在特定主機(jī)上創(chuàng)建容器。 2016年12月初,當(dāng)我們發(fā)布Rancher v1.2時(shí),就定下了未來(lái)「更頻繁的迭代」的計(jì)劃。就在上周,Rancher v1.3正式發(fā)布啦!除了對(duì)v...
閱讀 1225·2021-11-11 16:54
閱讀 1738·2021-10-13 09:40
閱讀 933·2021-10-08 10:05
閱讀 3498·2021-09-22 15:50
閱讀 3701·2021-09-22 15:41
閱讀 1782·2021-09-22 15:08
閱讀 2338·2021-09-07 10:24
閱讀 3571·2019-08-30 12:52