CNI介紹
CNI 容器網絡接口,設計用于任何的容器運行環境
CNI插件生態有兩種:overlay、underlay
-
overlay模式:
- 架構:在物理網絡上再架構一個虛擬網絡
- 傳輸:傳輸形式:就是用一種傳輸協議封裝另一種傳輸協議,將容器虛擬ip包作為數據,用宿主機ip進行再次封裝,在底層網絡傳輸(這種就是ip包再添加個ip頭,在物理網絡中傳輸)
- 常見的 Overlay 網絡插件有 Flannel(VXLAN 模式)、Calico(IPIP 模式)、Weave 等等
-
underlay模式 :要求容器的網絡接口能夠直接與底層網絡進行通信
- 架構形式:就是正常的物理網絡
- 傳輸形式:不需要再次封裝,每個節點上都維護了路由表信息或轉發表信息,
flannel(VXlan)介紹
flannel中有兩個組件:
- flannnel.1:新的虛擬網卡,封包解包
- flanneld:一個代理,它會為所在主機從集群的網絡地址空間中,獲取一個小的網段 Subnet,本主機內所有容器的 IP 地址都將從中分配。同時 flanneld 監聽 K8S 集群數據庫,為 Flannel.1 設備提供封裝數據時必要的 Mac,IP 等網絡數據信息。
flannel特性:
- 不同node中的pod都有全局唯一ip
- 建立了一個覆蓋網絡(overlay),通過這個覆蓋網絡,將數據包原封不動傳遞到目標容器
3.創建了新的虛擬網卡flannel.1 - etcd數據庫保證所有node上flanneld看到的配置是一致的,同時每個node上flanneld監聽etcd數據庫變化,事實感知集群中node變化
一個情景
假設node1中的pod1要和node2中的pod2通信(node1、2不跨網,pod1通過pod2的ip訪問pod2)
- pod1根據自己的路由表將包發給CNI0
- CNI0根據自己的路由表將包發給flannel.1
- flannel.1根據flanneld提供的IP、MAC信息進行內層封裝
- linux內核進行外層封裝
- 將包發給node2
- node2接受到包后,內核識別到這是一個vxlan,拆開后將包發給flannel.1設備
- flannel.1根據路由表將包發往CNI0
- CNI0根據ARP協議獲得目標MAC地址,將包發給pod2