零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)

《零入门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是隧道网络?或者 通过三层网络搭建虚拟的二层网络

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第1张图片

vxlan设备之间通信时,他们以为自己都是在同一个局域网内部通信呢,

其实,他们产生的数据包被Linux内核封装到UDP数据包里,通过本地的对外网卡eth0发送。

Vxlan设备产生的数据包的最外层是MAC层,即,二层。

这些数据包被作为原始数据,封装到了UDP里,即,二层数据包依赖的是三层网络进行通信的。

那么,vxlan设备之间的通信,其实就是一种建立在原网络之上的逻辑网络;

在原网络之上,专门建立的一种逻辑网络。

这种逻辑网络,没有具体实体的线路,完全是每次通信时,才建立起亮点之间的逻辑通道。

6、vxlan报文结构介绍?

6.1、vxlan的整体报文结构,如下

在这里插入图片描述

6.2、假设网络拓扑如下:

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第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报文结构,每一部分都是由谁产生的?

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第3张图片

6.5、解析vxlan设备产生的数据包结构

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第4张图片

注意,上面的IP头部,仅列出了主要属性。

实际IP头部占用的是20字节。

6.6、解析vxlan头部结构

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第5张图片

6.7、解析外层结构

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第6张图片

注意,上面的IP头部,仅列出了主要属性。
实际IP头部占用的是20字节。

7、解析一下vxlan报文结构中MTU为什么是1450?

通过命令创建vxlan设备时,如果没有显示的设置MTU的话,

默认MTU的值就是1450。

MTU就是在传输数据报文时,原始数据能够占用的最大字节数。

7.1、首先,看一下在vxlan数据报文中,MTU具体指的是那一部分

首先,看一下在vxlan数据报文中,MTU具体指的是那一部分。

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第7张图片

并且,看一下左侧的MAC层,IP层,UDP层,VXLAN头部占用的字节数

7.2、计算一下vxlan设备的MTU值?

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第8张图片

看一下,通过命令行方式创建的vxlan设备的MTU值?

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第9张图片

7.3、可以计算一下,实际用户能够发送的原始数据最大字节数(仅供参考)

零入门kubernetes网络实战-35->vxlan简介以及原理介绍(vxlan报文结构介绍)_第10张图片

8、vxlan设备,当前的使用场景?

可以在以下网络模型中,找到vxlan设备的身影

  • flannel
  • calico
  • opensstack
    等等



<<零入门kubernetes网络实战>>技术专栏之文章目录


你可能感兴趣的:(kubernetes,docker,kubernetes网络实战,容器,grpc-go)