摘要:相關(guān)原理概述先來講講什么是容器網(wǎng)絡(luò)接口是一種操作容器網(wǎng)絡(luò)規(guī)范,包含方法規(guī)范,參數(shù)規(guī)范等。只關(guān)心容器的網(wǎng)絡(luò)連接,在容器創(chuàng)建時分配網(wǎng)絡(luò)資源,并在刪除容器時刪除分配的資源。容器創(chuàng)建成功后具有一個網(wǎng)絡(luò)空間,此時調(diào)用插件方法進行網(wǎng)絡(luò)設(shè)置。
相關(guān)原理概述 先來講講什么是CNI?
CNI(容器網(wǎng)絡(luò)接口)是一種操作容器網(wǎng)絡(luò)規(guī)范,包含方法規(guī)范,參數(shù)規(guī)范等。
CNI只關(guān)心容器的網(wǎng)絡(luò)連接,在容器創(chuàng)建時分配網(wǎng)絡(luò)資源,并在刪除容器時刪除分配的資源。因為這個焦點,CNI有廣泛的支持,規(guī)格易于實現(xiàn)。CNI接口只需要實現(xiàn)兩個方法,一個創(chuàng)建容器時調(diào)用,一個刪除容器時調(diào)用。
kubernetes首先以插件的形式完成(pod)容器的網(wǎng)絡(luò)資源設(shè)置。內(nèi)置的插件包括:cni,kubenet,hostport等。這里簡單說說kubenet。這是一個簡單的網(wǎng)絡(luò)插件,每臺機器上創(chuàng)建一個br0網(wǎng)橋,根據(jù)PodCIDR為每個pod設(shè)置ip連接到br0網(wǎng)橋上。次方式可結(jié)合一些網(wǎng)絡(luò)路由工具完成一個小規(guī)模的集群網(wǎng)絡(luò)pod互聯(lián)。我們主要講CNI插件。kubernetes以cni插件來支持cni規(guī)范,調(diào)用其他廠商和個人開發(fā)的遵循cni規(guī)范的各種網(wǎng)絡(luò)插件,例如Calico,Flannel等。k8s默認情況下cni模式不支持端口映射等。k8s將容器網(wǎng)絡(luò)設(shè)置none,完全交給插件去管理容器網(wǎng)絡(luò)資源。
容器網(wǎng)絡(luò)資源包括:虛擬網(wǎng)卡,IP地址,DNS,網(wǎng)絡(luò)路由等等。容器使用獨立的網(wǎng)絡(luò)命名空間,可以具有自己的網(wǎng)絡(luò)資源信息。這些信息數(shù)據(jù)由不同的CNI插件根據(jù)不同的SDN網(wǎng)絡(luò)的實現(xiàn)給容器配置。
MidoNet SDN網(wǎng)絡(luò)MidoNet是由日本的SDN公司Midkura研發(fā)的一款網(wǎng)絡(luò)虛擬化軟件,其基于底層物理設(shè)施來實現(xiàn)網(wǎng)絡(luò)虛擬化,具有分布式、分散、多層次的特點,主要作為OpenStack中的默認網(wǎng)絡(luò)組件,可以讓虛擬網(wǎng)絡(luò)解決方案,特別是專為網(wǎng)絡(luò)基礎(chǔ)設(shè)施設(shè)計的方案,為云平臺如OpenStack服務(wù),并且將其網(wǎng)絡(luò)存貯棧虛擬化。MidoNet為每個租戶分配一個邏輯router,租戶與租戶之間是相互隔離的,租戶內(nèi)部之間是能夠相互通訊的,Midonet支持L2交換、L3路由、L4負載均衡
有狀態(tài)和無狀態(tài)NAT,邏輯和分布式防火墻,BGP與ECMP支持。其架構(gòu)主要包含以下組件:
Midolman(Midonet Agent):MidonetAgent安裝在各個計算節(jié)點,負責建立網(wǎng)絡(luò)流量控制和提供分布式Midonet網(wǎng)絡(luò)服務(wù),路由,NAT等他把相關(guān)的虛擬網(wǎng)絡(luò)信息存放到NSDB。
Network StateDatabase(NSDB):存儲網(wǎng)絡(luò)配置和狀態(tài),網(wǎng)絡(luò)拓撲,路由,Midonet不集中處理網(wǎng)絡(luò)功能,由Midonet Agent處理,Midonet Agent會跟NSDBs做實時同步當有變化時候會及時同步并且更新NSDB
MidoNet支持大規(guī)模SDN集群,其架構(gòu)理論上支持上萬節(jié)點。我們可以使用MidoNet完成k8s集群內(nèi)租戶內(nèi)Pod網(wǎng)絡(luò)互聯(lián)。
SDN(軟件定義網(wǎng)絡(luò)),Midonet軟件定義你所熟知的網(wǎng)絡(luò)組件。以下簡單介紹幾個核心的軟件定義概念:
Router(路由器)
一個租戶對應(yīng)一個Router,連接到同一個Router的Bridge網(wǎng)絡(luò)互通。Midonet會創(chuàng)建一個PrivierRouter,所有租戶Router連接到PrivierRouter與外網(wǎng)互通。等價于一個路由器內(nèi)網(wǎng)互通,連接上級路由器接入公網(wǎng)。
Bridge(網(wǎng)橋)
一個租戶下可以有多個Bridge,每個Bridge使用不同的網(wǎng)段。例如一個Bridge網(wǎng)段為192.168.0.0/24,最多可以有253個虛擬設(shè)備連接到本Bridge。
Port(設(shè)備通信端口)
Router與Router之間,Router與Bridge之間的通信接口。
Route(路由)
路由規(guī)則,給Router定義流量包轉(zhuǎn)發(fā)端口的規(guī)則。
Rule(過濾規(guī)則)
定義包過濾條件。類似于iptables。
Midonet數(shù)據(jù)交換工作在三層,但是其本身不提供IP地址管理(IPAM),因此基于Midonet的cni插件需要完成以下工作:IPAM,租戶Router、Bridge創(chuàng)建,容器網(wǎng)卡創(chuàng)建,以及所有端到端連接和路由過濾規(guī)則創(chuàng)建。
IPAM需要完成兩個層面的IP管理,Router級別的地址管理,每一個Router具有一個IP地址,且全局唯一不沖突。每一個Bridge具有一個唯一網(wǎng)段,連接的虛擬網(wǎng)卡具有全局唯一IP 。
IPAM有很多實現(xiàn)方式,CNI插件是無狀態(tài)應(yīng)用,或許你需要一個守護進程來完成IPAM工作。基于簡化架構(gòu)的思路,我們使用ETCD來存儲IP數(shù)據(jù),直接由插件來操作ETCD。完成IP的使用和釋放。
當新租戶第一次創(chuàng)建容器時進行租戶虛擬設(shè)備的初始化創(chuàng)建,上文我們已經(jīng)介紹了一個租戶需要創(chuàng)建的虛擬設(shè)備有哪些,這里我講講細節(jié)。
Midonet提供了Rest-API來操作虛擬設(shè)備。這里注意,根據(jù)使用的不同版本的Midonet使用不同版本的API。
https://github.com/barnettZQG/golang-midonetclient
封裝了golang版的Midonet api操作方法,支持1.和5.API版本。
創(chuàng)建步驟如下:
創(chuàng)建租戶,調(diào)用Keystone API。
創(chuàng)建Router,并包含創(chuàng)建進出Chain。
創(chuàng)建PrivierRouter Port并賦IP,創(chuàng)建Router Port并賦IP。創(chuàng)建PortLink連接兩個Port。
為前面創(chuàng)建的Chain創(chuàng)建對應(yīng)的路由規(guī)則
為前面創(chuàng)建的Port創(chuàng)建包過濾規(guī)則
創(chuàng)建一個默認的Bridge。并創(chuàng)建Port連上Router。
存儲以上創(chuàng)建的相關(guān)數(shù)據(jù)進ETCD.
容器網(wǎng)卡創(chuàng)建和網(wǎng)絡(luò)綁定 Virtual Ethernet Pair簡稱veth pair,是一個成對的端口,所有從這對端口一 端進入的數(shù)據(jù)包都將從另一端出來,反之也是一樣.其兩端可存在于不同的網(wǎng)絡(luò)空間(Network Namespace)。容器創(chuàng)建成功后具有一個網(wǎng)絡(luò)空間,k8s此時調(diào)用CNI插件ADD方法進行網(wǎng)絡(luò)設(shè)置。插件首先創(chuàng)建一對Veth pair。將其一端置于宿主機網(wǎng)絡(luò)空間,調(diào)用Midonet 綁定API將其與Bridge一個Port綁定。另一端在容器內(nèi)并賦予IP地址,根據(jù)當前使用的Bridge網(wǎng)段。
與Docker0網(wǎng)卡部分原理一致。
將默認路由設(shè)置到上文創(chuàng)建的網(wǎng)卡上。例如上文創(chuàng)建的網(wǎng)卡命名為eth0。
設(shè)置DNS根據(jù)需要設(shè)置一些DNS信息。
怎么實現(xiàn)操作?1.使用shell命令。
ip link * ip netns * ip address * ip route *
以上命令詳細使用方法網(wǎng)上很多了,這里不再描述。
golang netlink library
https://github.com/vishvananda/netlink
定義了關(guān)于網(wǎng)卡相關(guān)與linux內(nèi)核通信的用戶空間的相關(guān)接口。
CNI插件的添加和刪除操作應(yīng)該具有冪等性,即同樣的參數(shù)傳入不管調(diào)用多少次都應(yīng)該有相同的效果。
CNI插件應(yīng)該支持并發(fā)性,主要是租戶相關(guān)組件的創(chuàng)建和IP地址分配的強一致性。
CNI插件有一定的規(guī)范,請參考:https://github.com/containernetworking/cni
好雨云Midonet cni插件開源好雨云開源基于ETCD版的的midonet cni插件具有上文提到的所有功能和特性。
github:https://github.com/goodrain/midonet-cni
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/32553.html
摘要:本月產(chǎn)品層面的升級主要集中在語言源碼構(gòu)建方面,全面支持和并兼容開發(fā)框架。研發(fā)團隊在這一個月中對底層組件進行了升級與調(diào)整,修復了個中等級別以上的。因為這個焦點,有廣泛的支持,規(guī)格易于實現(xiàn)。 全面支持一條命令安裝云幫平臺、調(diào)整SDN網(wǎng)絡(luò)組件、8 個中等級別以上的bug修復、云幫社區(qū)版 迎來2017年3月升級版本,本次升級主要集中在平臺底層服務(wù),以及云幫的私有化安裝部署的流程上,針對SDN網(wǎng)...
摘要:第層網(wǎng)絡(luò)的一個值得注意的示例是以太網(wǎng),其中表示為子層。與其他方案相比,相對容易安裝和配置。與不同,不使用網(wǎng)絡(luò)。網(wǎng)絡(luò)策略是其最受追捧的功能之一。 本文將在介紹技術(shù)原理和相應(yīng)術(shù)語的基礎(chǔ)上,再集中探索與詳細對比目前最流行的CNI插件:Flannel、Calico、Weave和Canal,對比介紹它們的原理、使用方法、適用場景和優(yōu)缺點等。 showImg(https://segmentfaul...
摘要:第層網(wǎng)絡(luò)的一個值得注意的示例是以太網(wǎng),其中表示為子層。與其他方案相比,相對容易安裝和配置。與不同,不使用網(wǎng)絡(luò)。網(wǎng)絡(luò)策略是其最受追捧的功能之一。 本文將在介紹技術(shù)原理和相應(yīng)術(shù)語的基礎(chǔ)上,再集中探索與詳細對比目前最流行的CNI插件:Flannel、Calico、Weave和Canal,對比介紹它們的原理、使用方法、適用場景和優(yōu)缺點等。 showImg(https://segmentfaul...
摘要:即配置網(wǎng)絡(luò)和解除網(wǎng)絡(luò)配置。類類型的插件,在執(zhí)行命令時會分配一個給調(diào)用者。執(zhí)行命令時會將調(diào)用者指定的放回池。向刪除時,同樣通過請求,解除該的租約。組件通常在組件執(zhí)行完畢后執(zhí)行 目前不論是個人還是企業(yè),在使用k8s時,都會采用CNI作為集群網(wǎng)絡(luò)方案實現(xiàn)的規(guī)范。 在早先的k8s版本中,kubelet代碼里提供了networkPlugin,networkPlugin是一組接口,實現(xiàn)了pod的網(wǎng)...
閱讀 2409·2021-11-19 09:40
閱讀 3574·2021-10-12 10:12
閱讀 1883·2021-09-22 15:04
閱讀 2897·2021-09-02 09:53
閱讀 761·2019-08-29 11:03
閱讀 1122·2019-08-28 18:11
閱讀 1723·2019-08-23 15:28
閱讀 3579·2019-08-23 15:05