flannel网络
由CoreOS开源的针对k8s的网络服务,其目的为解决kubernetes集群中各主机上的pod相互通信的问题,其借助于etcd维护网络IP地址分配,并为每一个node服务器分配一个不同的IP地址段
Flannel 网络模型 (后端模型)
Flannel目前有三种方式实现 UDP/VXLAN/host-gw:
UDP --废弃
早期版本的Flannel使用UDP封装完成报文的跨越主机转发,其安全性及性能略有不足。
VXLAN
Linux 内核在在2012年底的v3.7.0之后加入了VXLAN协议支持,因此新版本的Flannel也有UDP转换为VXLAN
VXLAN本质上是一种tunnel(隧道)协议,用来基于3层网络实现虚拟的2层网络
目前flannel 的网络模型已经是基于VXLAN的叠加(覆盖)网络,目前推荐使用vxlan作为其网络模型。
Host-gw
也就是Host GateWay,通过在node节点上创建到达各目标容器地址的路由表而完成报文的转发,因此这种方式要求各node节点本身必须处于同一个局域网(二层网络)中,因此不适用于网络变动频繁或比较大型的网络环境,但是其性能较好。
wireguard
flannel v0.20.0开始支持、可在实现跨网络通信的同时还能对报文进行加密,5.6及以下版本内核需要单独安装wireguard,如www.wireguard.com/
sudo apt install wireguard
Flannel 组件的解释
Cni0
网桥设备,每创建一个pod都会创建一对 veth pair,其中一端是pod中的eth0,另一端是Cni0网桥中的端口(网卡),Pod中从网卡eth0发出的流量都会发送到Cni0网桥设备的端口(网卡)上,Cni0 设备获得的ip地址是该节点分配到的网段的第一个地址。
Flannel.1
overlay网络的设备,用来进行vxlan报文的处理(封包和解包),不同node之间的pod数据流量都从overlay设备以隧道的形式发送到对端。