前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >说说Flannel VXLAN

说说Flannel VXLAN

作者头像
shysh95
发布2023-08-23 09:56:35
1790
发布2023-08-23 09:56:35
举报
文章被收录于专栏:shysh95shysh95

什么是VXLAN?

VXLAN是Linux内核本身支持的一种网络虚拟化技术。

VXLAN的目的是?

VXLAN是为了在现有的三层网络之上,覆盖一层虚拟的由内核VXLAN模块负责维护的二层网络,使得连接在VXLAN之上的主机可以像在一个局域网里那样实现自由通信。

VTEP设备是什么?

为了实现VXLAN的目的,VXLAN会在宿主机上设置一个特殊的网络设备作为通信的两端,该设备就是VTEP设备。

VTEP设备既有IP地址也有MAC地址。

VTEP设备的作用是?

VTEP设备类似flanned进程,用来封装和解封二层数据帧,封装和解封的过程均在内核态完成。

当包含VTEP设备的宿主机并加入Flannel网络以后,会在其他的Flannel节点下添加路由规则,如下:

代码语言:javascript
复制
$ route -n
 


 
Kernel IP routing table
 
DestinationGatewayGenmaskFlagsMetricRefUseIface
 
...
 
10.1.16.010.1.16.0255.255.255.0   UG    000 flannel.1
 

该规则的含义是目的IP是10.1.16.0/24网段的IP数据包,都需要经过flannel.1设备发出,发往的网关地址是10.1.16.0,该网关地址也是目的主机上VTEP设备的IP地址。

VTEP设备的MAC地址如何获取?

为了让VTEP设备之间进行二层网络的通信,我们需要知道目的设备MAC地址,而MAC地址的学习正式ARP表的功能,在这里ARP记录,是新的Flannel节点加入时,自动在其他的Flannel节点上进行添加的,如下:

代码语言:javascript
复制
$ ip neigh show dev flannel.1
 


 
10.1.16.0 lladdr 5e:f8:4f:00:e3:37 PERMANENT
 

通过上述命令我们可以明确地知道IP地址为10.1.16.0 VTEP设备的MAC地址是5e:f8:4f:00:e3:37。

如何知道发给哪个宿主机?

上述过程我们都是VTEP设备的信息,但是VTEP设备所在的宿主机在哪我们还不清楚,为了知道宿主机在哪,flannel.1设备在这里还会扮演网桥的角色,在Linux内核中,网桥转发的依据需要查找一个FDB的转发数据库,flannel.1网桥对应的FDB信息也是由flanned进程进行维护,内容可以通过以下命令进行查看:

代码语言:javascript
复制
$ bridge fdb show flannel.1| grep 5e:f8:4f:00:e3:37
 


 
5e:f8:4f:00:e3:37 dev flannel.1 dst 10.168.0.3self permanent
 

dst 10.168.0.3即为我们发往的宿主机IP地址。

VXLAN通信过程

  1. 首先来自容器的包还是会先到达docker0网桥
  2. 到达网桥后,经由路由表判断,需要通过flannel.1设备发往10.1.16.0
  3. 在数据包到达flannel.1设备后,这里会查到目的端的VTEP设备的MAC地址,此时会进行第一次封包工作,在原始数据包上增加一个二层的数据头,如下图:

上述封装出来的数据帧并不能在我们的宿主机二层网络里面进行传输,因此Linux内核需要进一步进行封装,以便通过我们宿主机的eth0进行传输。

  1. 进一步封装二层数据帧,首先会增加一个VXLAN头,该头里面有一个重要的标志称之为VNI,在Flannel中VNI的默认值是1, Flannel默认的VETP设备都是flannel.1,它是VTEP设备识别该数据帧需不需要自己处理的重要标志.
  2. Linux接着会将数据帧封装成一个UDP包进行转发,因此会增加UDP的header
  3. UDP包是一个四层数据包,因此Linux内核会通过FDB表找到目的设备VTEP对应宿主机的IP,紧接着在IP包前面添加二层数据帧头,里面包含了目的宿主机的MAC地址(该MAC地址是由宿主机通过ARP自学习获取,和Flannel无关)

经过所有的封包,完整的二层数据帧封装完毕,经由宿主机的eth0网卡转发至目的宿主机,在目的宿主机上则是上述过程的逆向解封。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员修炼笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
专用宿主机
专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档