《零入门kubernetes网络实战》视频专栏地址
https://www.ixigua.com/7193641905282875942
本篇文章视频地址(稍后上传)
本篇文章开始介绍vxlan虚拟设备。
主要介绍vxlan的协议报文结构,
1、总结 |
主要涉及到以下方面:
- overlay跟vxlan的关系
- 如何理解vxlan设备是一对一,一对多模型?
- 创建vxlan网络对底层网络的要求?
- vxlan设备的主要作用?
- vtep,vni, tunnel概念介绍
- 通过三层网络搭建虚拟的二层网络
- vxlan报文结构分析
- 解析vxlan报文结构中MTU为什么是1450?
2、Overlay? 与Vxlan的关系? |
在介绍vxlan之前,先介绍一下Overlay。
Overlay,简单的说,就是在原网络的基础上重新产生一个逻辑上的网络。
类似于官方用语:
在网络技术领域,指的是一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于 IP 的基础网络技术为主。
IETF 在 Overlay 技术领域提出 VXLAN、NVGRE、STT 三大技术方案。
Overlay跟Vxlan到底什么关系呢?
类似于Overlay代表的是容器,vxlan代表的是Docker。
Docker只是容器的一种实现方案而已。还有其他方案,如Podman。
vxlan也只是Overlay的一种实现方案而已,还有NVGRE,STT等。
Overlay 不再详细的列举了,感兴趣的同学可以自信百度。
总体比较,VLXAN 技术具有更大优势,而且当前 VLXAN 也得到了更多厂家和客户的支持,已经成为 Overlay 技术的主流标准。
3、vxlan简介? |
VXLAN ?
- 可以组建虚拟可扩展的局域网,
- 一种虚拟化隧道通信技术,
- 属于隧道网络
- 一种overlay(覆盖网络技术),
- 通过三层网络搭建虚拟的二层网络(稍后介绍)
- 支持一对一形式的通信(后续有案例介绍)
- 就是说在创建本地的vxlan设备时,已经明确的指明了通信目的的vxlan设备的信息。
- 比方说,用一根电话线链接的两端话筒,只能这两个话筒进行通信。
- 是一种专用网络
- 支持一对多形式的通信
- 就是说在创建本地的vxlan设备时,并没有明确的指明通信的目的vxlan设备的信息。
- 只有在真正通信的时候,通过某种方式,可以获取通信目的vxlan设备的信息,获取到对方的信息后,才能通信。
- 方式一:(后续有案例介绍)
- 比方说,在创建每一个vxlan设备的时候,将自己的vxlan设备信息,如IP,MAC,VNI以及所在宿主机节点的IP注册到存储里,如etcd里
- 当某一个vxlan想跟目的vxlan进行通信的时候,就可以去etcd里进行查询,查询到目的信息后,就可以建立通信了。
- flannel中的vxlan模式就是类似的原理
- 方式二:(后续有案例介绍)
- 比方说,在创建vxlan设备时,设置一个D类地址,如239.1.1.1
- 当本地vxlan设备想跟目的vxlan设备进行通信时,第一次通信时,需要向239.1.1.1发送数据包,此数据包的目的就是获取目的vxlan设备的具体信息,
- 239.1.1.1接收到数据包后,会通过多播的形式,发送数据包。
- 感觉有点像,通过喇叭的形式,对外喊,寻找目的vxlan设备,目的vxlan设备接收到数据包后,发现是寻找自己的,就进行反馈数据包,将自己的IP,MAC,以及所占用的宿主机的IP信息反馈过去。
VXLAN是在底层物理网络(underlay)之上使用隧道技术,依托UDP层构建的overlay的逻辑网络,使逻辑网络与物理网络解耦。
其实,vxlan设备有点像网桥一样,可以以学习的方式学习到其他对端的IP地址,也可以直接配置静态转发。
4、vxlan解决了什么问题?为什么会出现vxlan? |
VLAN技术的缺陷是VLAN header预留的长度只有12bit,故最多只能支持4096个子网的划分,无法满足云计算场景下主机数量。
VXLAN的报文头部有一个VXLAN标识(即VNI,VXLAN Network Identifier)有24bit,可以支持2的24次方个子网,
故可支持1600万个VXLAN的同时存在,远多于VLAN的4094个,因此可适应大规模租户的部署。
在创建vxlan时,会指定vni,一个vni可以认为是一个子网。
以VNI(virtual network identifier)区分不同子网,相当于VLAN ID;
也就是说,vxlan
主要解决了vlan
不能划分更多
子网的问题。
5、VXLAN 协议原理简介 |
比方说,有一个新的业务,需要一个单独的网络进行测试,如果当前存在的网络满足要求的话,可以使用
但是,如果不满足呢?或者说,需要迁移当前服务器,迁移后的服务器是否还满足测试要求呢?
那么,怎么解决这个问题呢?
能不能在当前网络的基础上,在创建一个逻辑上的网络,无论底层原网络如何迁移变化,都不影响逻辑上的网络,最好了。
有点类似于容器,容器内部的变化一般情况下不会影响到宿主机的变化。
5.1、创建vxlan网络时,对原网络(现有网络)的要求? |
- 只要是三层网络可达(能够通过IP互相通信)的网络就能部署VXLAN。
- 因为需要将vxlan产生的数据包封装到UDP数据包里,
- UDP数据包,依赖原网络进行传输的
- 创建UDP数据包时,需要设置网络层,即需要设置目的IP,源IP,因此,需要IP之间能够通信
- 创建VXLAN隧道网络相比改造传统的二层或三层网络,对原有的网络架构影响较小。
5.2、如何通过vxlan设备进行组网? |
- vxlan网络是依赖当前环境中的网络的
- 当前网络三层可达
- 在当前网络所在的服务器节点上安装VTEP设备,安装了vtep设备的服务器之间就可以组建成vxlan网络
- 没有安装vtep设备的服务器就不算vxlan网络
- 在同一个服务器上可以创建多个vxlan设备
- 同一个vxlan网络的vxlan设备的vni号是相同的
- 不同的vni号,代表不同的vxlan网络,网络隔离。
- 创建vxlan设备时,
- 需要设置vni号
- 静态方式获取目的vxlan设备的信息
- 可以直接指定目的vxlan设备的信息
- 动态方式获取目的vxlan设备的信息
- 方式一:可以设置D类地址,通过D类地址来获取目的vxlan设备的信息
- 方式二:每个vxlan设备创建时,将vxlan设备信息等注册到集中缓存,如etcd里,需要获取目的vxlan设备信息时,可以去etcd里查询
5.3、vxlan设备的作用? |
负责VXLAN协议报文的封包和解包,
注意,不负责UDP报文的创建。
物理网络上可以创建多个VXLAN网络,可将这些VXLAN网络看作一个隧道,不同节点上的虚拟机/容器能够通过隧道直连。
通过VNI标识不同的VXLAN网络,使不同的VXLAN可以互相隔离。
5.4、VETP、VNI、TUNNEL概念简介 |
- VTEP(VXLAN tunnel endpoints):
- VXLAN网络的边缘设备,用来进行VXLAN报文的封包与解包
- VTEP可以是网络设备(例如交换机),也可以是一台机器(例如虚拟化集群中的宿主机)。
- VNI(VXLAN network identifier):
- VNI是VXLAN的标识,是个24位整数,因此最大值是2的24次方,即16777216。
- 如果一个VNI对应一个租户,那么理论上VXLAN可以支持千万级别的租户。
- tunnel:
- 隧道是一个逻辑上的概念,
- 在VXLAN模型中并没有具体的物理实体相对应。
- 隧道可以看作一个虚拟通道,VXLAN通信双方都认为自己在直接通信,并不知道底层网络的存在。
- 从整体上看,每个VXLAN网络像是为通信的设备搭建了一个单独的通信通道,也就是隧道。
5.5、为什么说vxlan是隧道网络?或者 通过三层网络搭建虚拟的二层网络 |
vxlan设备之间通信时,他们以为自己都是在同一个局域网内部通信呢,
其实,他们产生的数据包被Linux内核封装到UDP数据包里,通过本地的对外网卡eth0发送。
Vxlan设备产生的数据包的最外层是MAC层,即,二层。
这些数据包被作为原始数据,封装到了UDP里,即,二层数据包依赖的是三层网络进行通信的。
那么,vxlan设备之间的通信,其实就是一种建立在原网络之上的逻辑网络;
在原网络之上,专门建立的一种逻辑网络。
这种逻辑网络,没有具体实体的线路,完全是每次通信时,才建立起亮点之间的逻辑通道。
6、vxlan报文结构介绍? |
6.1、vxlan的整体报文结构,如下 |
6.2、假设网络拓扑如下: |
V1_IP,表示Master节点上vxlan设备的的IP。
NS1_IP,表示ns1命名空间里veth1a设备的IP。
其他标识含义类似。
根据上面的网络拓扑,我们逐步解析vxlan的报文结构
6.3、vxlan报文结构,创建的先后顺序 |
如果你用代码进行解析时,
获取字节流后,先读取到的就是上图中最左侧的Ethernet头部,
即,
Ethernet头部—>读取IP头部—>读取UDP头部—>vxlan头部—>Ethernet头部—>读取IP头部—>原始数据
即,从左往右 依次解析。
6.4、vxlan报文结构,每一部分都是由谁产生的? |
6.5、解析vxlan设备产生的数据包结构 |
注意,上面的IP头部,仅列出了主要属性。
实际IP头部占用的是20字节。
6.6、解析vxlan头部结构 |
6.7、解析外层结构 |
注意,上面的IP头部,仅列出了主要属性。
实际IP头部占用的是20字节。
7、解析一下vxlan报文结构中MTU为什么是1450? |
通过命令创建vxlan设备时,如果没有显示的设置MTU的话,
默认MTU的值就是1450。
MTU就是在传输数据报文时,原始数据能够占用的最大字节数。
7.1、首先,看一下在vxlan数据报文中,MTU具体指的是那一部分 |
首先,看一下在vxlan数据报文中,MTU具体指的是那一部分。
并且,看一下左侧的MAC层,IP层,UDP层,VXLAN头部占用的字节数
7.2、计算一下vxlan设备的MTU值? |
看一下,通过命令行方式创建的vxlan设备的MTU值?
7.3、可以计算一下,实际用户能够发送的原始数据最大字节数(仅供参考) |
8、vxlan设备,当前的使用场景? |
可以在以下网络模型中,找到vxlan设备的身影
- flannel
- calico
- opensstack
等等
<<零入门kubernetes网络实战>>技术专栏之文章目录