​Flannel 同节点通信​

Flannel 同节点通信利用了 veth pair 对的形式,一端连接到 pod,一端连接到宿主机的网卡,同时作为宿主机 cni0 网卡的的接口,使得同节点的通信,直接是二层互通。 和 calico vxlan 不一样的是,pod 对应的网口并没有使用 proxy-arp 的特性,所以就和传统的二层交换,三层路由一样,理解起来更为简单。

Flannel 学习指南_cni


​Flannel Vxlan 跨节点通信​

和 calico vxlan 一样,跨节点通信,利用的是主机上的路由和 flannel.1 来实现的。 通过主机的路由表查看出接口的网关和对应的网卡,而网关的 MAC 地址是通过 节点维护的 fdb 表 获得的。

Flannel 学习指南_flannel_02


​Flannel HOST-GW 跨节点通信​

使用 host-gw 通过远程机器 IP 创建到子网的 IP 路由。需要运行 flannel 的主机之间的二层互联。 Host-gw 是通过二层互联,利用了linux kernel 的 FORWARD 特性,报文不经过额外的封装和 NAT,所以提供了良好的性能、很少的依赖关系和简单的设置。

Flannel 学习指南_kubernetes_03


​Flannel IPIP 跨节点通信​

IPIP 类型的隧道是最简单的一种。它的开销最低,但只能封装 ipv4 单播通信,因此无法设置 OSPF、 RIP 或任何其他基于多播的协议。

Flannel 学习指南_flannel_04