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