中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么進行kubernetes容器網絡接口midonet網絡插件的設計與實現

發布時間:2021-11-15 23:25:55 來源:億速云 閱讀:117 作者:柒染 欄目:云計算

這篇文章給大家介紹怎么進行kubernetes容器網絡接口midonet網絡插件的設計與實現,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

相關原理概述

先來講講什么是CNI?

CNI(容器網絡接口)是一種操作容器網絡規范,包含方法規范,參數規范等。 CNI只關心容器的網絡連接,在容器創建時分配網絡資源,并在刪除容器時刪除分配的資源。因為這個焦點,CNI有廣泛的支持,規格易于實現。CNI接口只需要實現兩個方法,一個創建容器時調用,一個刪除容器時調用。

怎么進行kubernetes容器網絡接口midonet網絡插件的設計與實現

Kubernetes如何支持和運行遵循CNI規范的插件

kubernetes首先以插件的形式完成(pod)容器的網絡資源設置。內置的插件包括:cni,kubenet,hostport等。這里簡單說說kubenet。這是一個簡單的網絡插件,每臺機器上創建一個br0網橋,根據PodCIDR為每個pod設置ip連接到br0網橋上。次方式可結合一些網絡路由工具完成一個小規模的集群網絡pod互聯。我們主要講CNI插件。kubernetes以cni插件來支持cni規范,調用其他廠商和個人開發的遵循cni規范的各種網絡插件,例如Calico,Flannel等。k8s默認情況下cni模式不支持端口映射等。k8s將容器網絡設置none,完全交給插件去管理容器網絡資源。 怎么進行kubernetes容器網絡接口midonet網絡插件的設計與實現

上文多次提到的網絡資源是什么?

容器網絡資源包括:虛擬網卡,IP地址,DNS,網絡路由等等。容器使用獨立的網絡命名空間,可以具有自己的網絡資源信息。這些信息數據由不同的CNI插件根據不同的SDN網絡的實現給容器配置。

MidoNet SDN網絡

MidoNet是由日本的SDN公司Midkura研發的一款網絡虛擬化軟件,其基于底層物理設施來實現網絡虛擬化,具有分布式、分散、多層次的特點,主要作為OpenStack中的默認網絡組件,可以讓虛擬網絡解決方案,特別是專為網絡基礎設施設計的方案,為云平臺如OpenStack服務,并且將其網絡存貯棧虛擬化。MidoNet為每個租戶分配一個邏輯router,租戶與租戶之間是相互隔離的,租戶內部之間是能夠相互通訊的,Midonet支持L2交換、L3路由、L4負載均衡

有狀態和無狀態NAT,邏輯和分布式防火墻,BGP與ECMP支持。其架構主要包含以下組件:

Midolman(Midonet Agent):Midonet

Agent安裝在各個計算節點,負責建立網絡流量控制和提供分布式Midonet網絡服務,路由,NAT等他把相關的虛擬網絡信息存放到NSDB。

Network State

Database(NSDB):存儲網絡配置和狀態,網絡拓撲,路由,Midonet不集中處理網絡功能,由Midonet Agent處理,Midonet Agent會跟NSDBs做實時同步當有變化時候會及時同步并且更新NSDB MidoNet支持大規模SDN集群,其架構理論上支持上萬節點。我們可以使用MidoNet完成k8s集群內租戶內Pod網絡互聯。

MidoNet多租戶下網絡結構模型

SDN(軟件定義網絡),Midonet軟件定義你所熟知的網絡組件。以下簡單介紹幾個核心的軟件定義概念:

  • Router(路由器)
    一個租戶對應一個Router,連接到同一個Router的Bridge網絡互通。Midonet會創建一個PrivierRouter,所有租戶Router連接到PrivierRouter與外網互通。等價于一個路由器內網互通,連接上級路由器接入公網。

  • Bridge(網橋)
    一個租戶下可以有多個Bridge,每個Bridge使用不同的網段。例如一個Bridge網段為192.168.0.0/24,最多可以有253個虛擬設備連接到本Bridge。

  • Port(設備通信端口)
    Router與Router之間,Router與Bridge之間的通信接口。

  • Route(路由)
    路由規則,給Router定義流量包轉發端口的規則。

  • Rule(過濾規則)
    定義包過濾條件。類似于iptables。

怎么進行kubernetes容器網絡接口midonet網絡插件的設計與實現

基于MidoNet的kubernetes CNI插件實現

Midonet數據交換工作在三層,但是其本身不提供IP地址管理(IPAM),因此基于Midonet的cni插件需要完成以下工作:IPAM,租戶Router、Bridge創建,容器網卡創建,以及所有端到端連接和路由過濾規則創建。

IPAM

需要完成兩個層面的IP管理,Router級別的地址管理,每一個Router具有一個IP地址,且全局唯一不沖突。每一個Bridge具有一個唯一網段,連接的虛擬網卡具有全局唯一IP 。
IPAM有很多實現方式,CNI插件是無狀態應用,或許你需要一個守護進程來完成IPAM工作。基于簡化架構的思路,我們使用ETCD來存儲IP數據,直接由插件來操作ETCD。完成IP的使用和釋放。

租戶網絡初始化

當新租戶第一次創建容器時進行租戶虛擬設備的初始化創建,上文我們已經介紹了一個租戶需要創建的虛擬設備有哪些,這里我講講細節。 Midonet提供了Rest-API來操作虛擬設備。這里注意,根據使用的不同版本的Midonet使用不同版本的API。 https://github.com/barnettZQG/golang-midonetclient
封裝了golang版的Midonet api操作方法,支持1.*和5.*API版本。 創建步驟如下:

  1. 創建租戶,調用Keystone API。

  2. 創建Router,并包含創建進出Chain。

  3. 創建PrivierRouter Port并賦IP,創建Router Port并賦IP。創建PortLink連接兩個Port。

  4. 為前面創建的Chain創建對應的路由規則

  5. 為前面創建的Port創建包過濾規則

  6. 創建一個默認的Bridge。并創建Port連上Router。

  7. 存儲以上創建的相關數據進ETCD.

容器網卡創建和網絡綁定

Virtual Ethernet Pair

簡稱veth pair,是一個成對的端口,所有從這對端口一 端進入的數據包都將從另一端出來,反之也是一樣.其兩端可存在于不同的網絡空間(Network Namespace)。容器創建成功后具有一個網絡空間,k8s此時調用CNI插件ADD方法進行網絡設置。插件首先創建一對Veth pair。將其一端置于宿主機網絡空間,調用Midonet 綁定API將其與Bridge一個Port綁定。另一端在容器內并賦予IP地址,根據當前使用的Bridge網段。 與Docker0網卡部分原理一致。

設置容器內路由規則

將默認路由設置到上文創建的網卡上。例如上文創建的網卡命名為eth0。

設置DNS

根據需要設置一些DNS信息。

怎么實現操作?

1.使用shell命令。

ip link *
ip netns *
ip address *
ip route *

以上命令詳細使用方法網上很多了,這里不再描述。

  1. golang netlink library

https://github.com/vishvananda/netlink 定義了關于網卡相關與linux內核通信的用戶空間的相關接口。

CNI插件實現的注意事項

  1. CNI插件的添加和刪除操作應該具有冪等性,即同樣的參數傳入不管調用多少次都應該有相同的效果。

  2. CNI插件應該支持并發性,主要是租戶相關組件的創建和IP地址分配的強一致性。

關于怎么進行kubernetes容器網絡接口midonet網絡插件的設計與實現就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌珠穆沁旗| 怀柔区| 高密市| 洛宁县| 大新县| 日土县| 西乌| 金阳县| 平塘县| 乳山市| 临海市| 泽州县| 郎溪县| 灵武市| 曲阜市| 晋中市| 凤冈县| 卓资县| 江油市| 黎城县| 威远县| 尖扎县| 都昌县| 海丰县| 华蓥市| 陕西省| 江城| 喀喇沁旗| 集安市| 锡林郭勒盟| 常熟市| 泰州市| 福安市| 汾阳市| 扎赉特旗| 沁阳市| 石狮市| 行唐县| 桑日县| 龙门县| 巴彦淖尔市|