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