1. CNM模型
DOCKER公司提出,主要通過如下三個組件實現(xiàn):
1.1 Network Sandbox
- 作用: 容器內(nèi)部網(wǎng)絡棧,包括網(wǎng)絡接口、路由表、DNS等配置的管理。
- 實現(xiàn):可用 linux網(wǎng)絡命名空間、FreeBSD Jail等機制實現(xiàn)
- 說明:一個Sandbox可以包含多個Endpoint。
1.2 Endpoint
- 作用:用于將容器內(nèi)部Sandbox與外部網(wǎng)絡相連的網(wǎng)絡接口。
- 實現(xiàn):可用veth對、Open vSwitch內(nèi)部port等技術實現(xiàn)。
- 說明:一個Endpoint僅可加入一個Network
1.3 Network
- 作用:可以直接相互連接的Endpoint的集合。
- 實現(xiàn):可用linux網(wǎng)橋、VLAN等技術實現(xiàn)。
- 說明:一個Network包含多個Endpoint
2. CNI模型
由CoreOS公司提出的一種容器網(wǎng)絡規(guī)范。被kubernetes等項目采納。
其對容器網(wǎng)絡的設置和操作都通過插件完成,有如下兩種類型:
2.1 CNI Plugin
作用:負責為容器配置網(wǎng)絡資源。
包括如下3個基本接口的定義:
- ADD:將容器添加到某個網(wǎng)絡
- DELETE:容器銷毀時將容器從某個網(wǎng)絡中刪除
- CHECK:檢查容器網(wǎng)絡是否正確
- VERSION:查詢網(wǎng)絡插件支持的CNI規(guī)范版本號
2.2 IPAM Plugin
作用:負責對容器的IP地址進行分配和管理。如:為容器分配IP、網(wǎng)關、路由、DNS。
下邊介紹集中常用的網(wǎng)絡組件
3. Flannel
3.1 實現(xiàn)原理
1) 協(xié)助kubernetes,給每個node上的容器分配互不沖突的IP地址
2)建立一個覆蓋網(wǎng)絡(Overlay Network),通過該網(wǎng)絡將數(shù)據(jù)原封不動的傳給目標容器。
3.2 網(wǎng)絡架構(gòu)

flannel0的網(wǎng)橋一端諒解docker0,一端連接flanneld 服務進程
flanneld進程連接etcd
利用etcd管理可分配的IP地址網(wǎng)段資源
監(jiān)控etcd中每個Pod的實際地址,并在內(nèi)存中建立一個Pod節(jié)點的路由表flanneld進程下連docker0和物理網(wǎng)絡
使用內(nèi)存中的Pod路由表,將docker0發(fā)來的數(shù)據(jù)包包裝起來,利用物理網(wǎng)絡投遞到目標flanneld上。
目標flanneld解包,發(fā)送給docker0(因此daocker0得到的是原始數(shù)據(jù))
4. calico-BGP模式
4.1 實現(xiàn)原理
一個基于BGP的純?nèi)龑泳W(wǎng)絡方案
在每個計算節(jié)點上由一個vRouter 來負責轉(zhuǎn)發(fā),每個vRouter通過BGP1協(xié)議把本節(jié)點上運行的容器路由信息向整個Calico網(wǎng)絡廣播,并自動設置到達其他節(jié)點的路由轉(zhuǎn)發(fā)規(guī)則
4.2網(wǎng)絡架構(gòu)

4.3 calico 組件
Felix:
是一個Calico Agent,運行在每個node上,負責為容器設置網(wǎng)絡資源(如IP地址、路由規(guī)則、iptables規(guī)則等),保證跨主機容器網(wǎng)絡互通etcd:后端存儲
BGP Client
負責把Felix在各Node上設置的路由信息通過BGP協(xié)議廣播到Calico網(wǎng)絡Route Reflector:
通過一個或多個BGP Reflector 來完成大規(guī)模集群的分級路由分發(fā)CalicoCtl
Calico的命令行管理工具。
4.4 IP Pool 的兩種模式
-
IPIP模式
將各Node的路由之間做一個tunnel,再把兩個網(wǎng)絡連接起來。如圖所示:

BGP模式
直接使用物理機作為虛擬路由器(vRouter),不再創(chuàng)建額外的tunnel設置方法
calico-node的容器中變量設置為:
ipip模式:CALICO_IPV4POOL_IPIP="always"
BGP模式:CALICO_IPV4POOL_IPIP="off"
