本文有些部分是我自己理解的,如果有异议希望大家指正出来。提前感谢大家了。
先脱离flannel,谈一下vxlan。我们先看一下vxlan的一些概念,先来一张图:

咱们再看一下vxlan的报文:

如上图看出,vxlan中是在一个原始报文上,又进行了一层封包。也就是增加了一个50字节的头部。所以配置MTU的时候要注意一下,内层数据包所在的网卡的最大MTU最大应该是1450字节,因为后面进行封包后正好不会超过1500字节,这样基本上不会有问题。
vxlan封包的时候的难点:
为啥其他的不会成为难点呢?
关于这两个方式,不多赘述,我们要介绍的flannel用的就是控制中心的方式。
flannel支持UDP、HOST-GW、Vxlan三种网络模式,而其中vxlan是最受欢迎的网络模式,因为其性能优于UDP,复杂度弱于HOST-GW。
下图展示了,flannel的vxlan在工作过程,需要的一些组件和数据的流向:

- # 在路由表中添加一个表项,
- ## 目的端是新增节点上,容器的网段
- ## via 设置为新增节点上VETP的地址
- ## 输出设备 本机的flannel.1
- ### 如下面举例, 其中172.17.2.0是完整地址是 172.17.2.0/32
-
- 172.17.2.0/24 via 172.17.2.0 dev flannel.1 onlink
-
- # 在arp缓存表中添加,172.17.2.0/32 的mac地址
- ### 如
- 172.17.2.0 dev flannel.1 lladdr 7a:2c:d0:7f:48:3f PERMANENT
-
-
- # 在FDB中添加, 上面的mac地址应该转发到那个机器上
- ## FDB可以理解为一个交换机,可以根据mac地址判断出,从那个口进行发出
- # 如
- 7a:2c:d0:7f:48:3f dev flannel.1 dst 192.168.1.3 self permanent
-
- # 原数据包中的,目的mac从arp中获取
- # 数据包的目的IP,从FDB中获取