flannel网络的VXLAN及host-gw

Flannel Network
实现原理
Flannel为每个主机提供独立的子网,整个集群的网络信息存储在etcd上。对于跨主机的转发,目标容器的IP地址,需要从etcd获取。
先上图,比较直观:

 

步骤:
(1)IP数据报被封装并通过容器的eth0发送。
(2)Container1的eth0通过veth对与Docker0交互并将数据包发送到Docker0。然后Docker0转发包。
(3)Docker0确定Container3的IP地址,通过查询本地路由表到外部容器,并将数据包发送到虚拟NIC Flannel0。
(4)Flannel0收到的数据包被转发到Flanneld进程。 Flanneld进程封装了数据包通过查询etcd维护的路由表并发送数据包通过主机的eth0。
(5)数据包确定网络中的目标主机主机。
(6)目的主机的Flanneld进程监听8285端口,负责解封包。
(7)解封装的数据包将转发到虚拟NICFlannel0。
(8)Flannel0查询路由表,解封包,并将数据包发送到Docker0。
(9)Docker0确定目标容器并发送包到目标容器。

在常用的vxlan模式中,涉及到上面步骤提到的封包和拆包,这也是Flannel网络传输效率相对低的原因。
图片描述

VXLAN是Linux内核本身支持的一种网络虚拟化技术,是内核的一个模块,在内核态实现封装解封装,构建出覆盖网络,其实就是一个由各宿主机上的Flannel.1设备组成的虚拟二层网络。

由于VXLAN由于额外的封包解包,导致其性能较差,所以Flannel就有了host-gw模式,即把宿主机当作网关,除了本地路由之外没有额外开销,性能和calico差不多,由于没有叠加来实现报文转发,这样会导致路由表庞大。因为一个节点对应一个网络,也就对应一条路由条目。 

下面重点说一下host-gw模式。
hostgw是最简单的backend,它的原理非常简单,直接添加路由,将目的主机当做网关,直接路由原始封包。

例如,我们从etcd中监听到一个EventAdded事件subnet为10.1.15.0/24被分配给主机Public IP 192.168.0.100,hostgw要做的工作就是在本主机上添加一条目的地址为10.1.15.0/24,网关地址为192.168.0.100,输出设备为上文中选择的集群间交互的网卡即可。对于EventRemoved事件,只需删除对应的路由。

因为没有了封包和拆包,host-gw的性能是最好的。

 

配置Host-gw:(在etcd集群中任意节点)

[root@node203 etcd]# ./etcdctl set /coreos.com/network/config '{"Network": "172.7.0.0/16", "Backend": {"Type": "host-gw"}}'

host-gw虽然VXLAN网络性能要强很多。,但是种方式有个缺陷:要求各宿主机node节点必须在同一个二层网络中。

物理节点必须在同一网段中。这样会使得一个网段中的主机量会非常多,万一发一个广播报文就会产生干扰。
在私有云场景下,宿主机不在同一网段是很常见的状态,所以就不能使用host-gw了。

 #https://www.cnblogs.com/liucx

Flnnel的VXLAN模式有两种:

VXLAN: 原生的VXLAN,即扩展的虚拟LAN
Directrouting:直接路由型

使用Vxlan模式flanneld创建了一个flannel.1接口,它是专门用来封装隧道协议的

 (1)配置Vxlan模式:

[root@node203 etcd]#./etcdctl set /coreos.com/network/config  '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN"}}'

修改后记得重启flanneld

route -n  是没有路由的,有一个flannel.1网卡,通过flannel.1建立虚拟隧道通信

 (2)配置Directrouting直接路由模式:((智能判定)推荐)

[root@node203 etcd]#../etcdctl set /coreos.com/network/config  '{"Network": "172.7.0.0/16", "Backend": {"Type": "VxLAN","Directrouting": true}}'

修改后记得重启flanneld

VXLAN支持host-gw,如果两个节点在同一网段时使用host-gw通信,如果不在同一网段中,即 当前pod所在节点与目标pod所在节点中间有路由器,就使用VXLAN这种方式,使用叠加网络。
结合了Host-gw和VXLAN,这就是VXLAN的Directrouting模式

posted @ 2020-06-04 17:24  liucx  阅读(1387)  评论(0编辑  收藏  举报