vxlan学习总结

vxlan学习总结

大纲

  • VXLAN 基础概念
  • VXLAN 报文结构
  • VXLAN 中的常见名词
  • Liunx上配置VXLAN
  • 点对点的VXLAN
  • 多播模式VXLAN
  • brigde + VXLAN
  • 参考资料

VXLAN 基础概念

VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网),是一种虚拟化隧道通信技术。它是一种 Overlay(覆盖网络)技术,通过三层的网络来搭建虚拟的二层网络

VXLAN 是在底层物理网络(underlay)之上使用隧道技术,借助UDP 层构建的 Overlay 的逻辑网络,使逻辑网络与物理网络解耦,实现灵活的组网需求。它对原有的网络架构几乎没有影响,不需要对原网络做任何改动,即可架设一层新的网络

VXLAN 不仅支持一对一,也支持一对多,一个 VXLAN 设备能通过像网桥一样的学习方式学习到其他对端的 IP 地址,还可以直接配置静态转发表。

  • Underlay 底层物理网络
  • Overlay 覆盖网络

VXLAN 是 k8s CNI规范的基础 flannel等都是基于VXLAN实现大二层网络

https://www.kernel.org/doc/html/latest/networking/vxlan.html

VXLAN的优势

可以创建更多的子网

VLAN tag 总共有 4 个字节,其中有 12 bit 用来标识不同的二层网络(即 LAN ID),故而最多只能支持 2^12,即 4096 个子网的划分
对于超大型云服务数据中心来说 子网段太少了

VXLAN 的报文 Header 预留了 24 bit 来标识不同的二层网络(即 VNI,VXLAN Network Identifier),即 3 个字节,可以支持 2 24 2^{24} 224 个子网。

减少MAC地址的膨胀

对于同网段主机的通信而言,报文到底交换机后都会查询 MAC 地址表进行二层转发,对于超大型云服务数据中心来说,MAC地址的增加对交换机的影响巨大(交换机的内存是有限的,因而 MAC 地址表也是有限的)

VXLAN使用 VTEP将二层以太网帧封装在 UDP 中,一个 VTEP 可以被一个物理机上的所有 VM(或容器)共用,一个物理机对应一个 VTEP。从交换机的角度来看,只是不同的 VTEP 之间在传递 UDP 数据,只需要记录与物理机数量相当的 MAC 地址表条目就可以了

动态迁移

VXLAN 将二层以太网帧封装在 UDP 中(上面说过了),相当于在三层网络上构建了二层网络。这样不管你物理网络是二层还是三层,都不影响虚拟机(或容器)的网络通信,也就无所谓部署在哪台物理设备上了,可以随意迁移。(虚拟机迁移需要保证ip mac地址都不变

VXLAN 报文结构

将原始的ip包(注意是包含链路层数据的包)加入vxlan头后 作为UDP包的内容发送,由于vxlan是内核支持,所以数据的解析都在内核中处理了不会再到用户层

VXLAN Header :
在原始二层帧的前面增加 8 字节的 VXLAN 的头部,其中最主要的是 VNID,占用 3 个字节(即 24 bit),类似 VLAN ID,可以具有 2^24个网段。

UDP Header :
在 VXLAN 和原始二层帧的前面使用 8 字节 UDP 头部进行封装(MAC IN UDP),目的端口号缺省使用 4789,源端口按流随机分配(通过 MAC,IP,四层端口号进行 hash 操作), 这样可以更好的做 ECMP。

在上面添加的二层封装之后,再添加底层网络的 IP 头部(20 字节)和 MAC 头部(14 字节),这里的 IP 和 MAC 是宿主机的 IP 地址和 MAC 地址

这里需要注意 MTU 的问题,传统网络 MTU 一般为 1500,这里加上 VXLAN 的封装多出的(36+14/18,对于 14 的情况为 access 口,省去了 4 字节的 VLAN Tag)50 或 54 字节,需要调整 MTU 为 1550 或 1554,防止频繁分包。

VXLAN 中的常见名词

  • Underlay
底层物流网络
Underlay交换机(物理或虚拟)MTU 问题,传统网络 MTU 一般为 1500,这里加上 VXLAN 的封装多出的50 或 54 字节,需要调整 MTU 为 1550 或 1554,防止频繁分包。一般设置为1600+ 或者将物流网卡MTU设小与1500。
  • Overlay

VTEP(VXLAN Tunnel Endpoints,VXLAN VTEP隧道端点)

VXLAN 网络的边缘设备,用来进行 VXLAN 报文的处理(封包和解包)。VTEP 可以是网络设备(比如交换机),也可以是一台机器(比如虚拟化集群中的宿主机)。

VNI(VXLAN Network Identifier,VXLAN 网络标识符)

VNI 是每个 VXLAN 段的标识,是个 24 位整数,一共有 2^24 = 16777216(一千多万),一般每个 VNI 对应一个租户,也就是说使用
VNI是每个VXLAN的标识,占24 bits,所以是个24位整数,因此最大值是224=16777216

VXLAN 搭建的公有云可以理论上可以支撑千万级别的租户。

VNI 重要 用来识别不同的子网

Tunnel(VXLAN 隧道)

隧道是一个逻辑上的概念,在 VXLAN 模型中并没有具体的物理实体向对应。隧道可以看做是一种虚拟通道,VXLAN 通信双方认为自己是在直接通信,并不知道底层网络的存在。从整体来说,每个 VXLAN 网络像是为通信的虚拟机搭建了一个单独的通信通道,也就是隧道。

VXLAN 的工作模型,它创建在原来的 IP 网络(三层)上,只要是三层可达(能够通过 IP 相互通信)的网络就能部署 VXLAN
VXLAN 网络的每个端点都有一个 VTEP 设备,负责 VXLAN 协议报文的解包和封包,也就是在虚拟报文上封装 VTEP 通信的报文头部

Liunx上配置VXLAN

vxlan 出现在 kernel 3.7.0 以上版本

man ip-link 查看当前系统是否支持vxlan

在这里插入图片描述

点对点的VXLAN

在这里插入图片描述

配置流程

A主机上
ip link add vxlan0 type vxlan id 100 remote 192.168.0.54 local 192.168.0.7 dstport 4789 dev enp0s3
ip link set vxlan0 up
ip addr add local 172.17.0.32/24 dev vxlan0

B主机上
ip link add vxlan0 type vxlan id 100 remote 192.168.0.7 local 192.168.0.54 dstport 4789 dev enp0s3
ip link set vxlan0 up
ip addr add local 172.17.0.67/24 dev vxlan0

配置解析:

  • vxlan0 type vxlan: 表示创建名称为vxlan0的设备 及VXLAN中的VTEP
  • id 100:表示VNI的值 有效范围是 (1~16777216 )(id一样的才能视为一个网段 才能互通)
  • remote 为远端主机的 IP
  • local 为你本地主机的 IP
  • dstport 通信的端口,IANA 分配的端口是 4789。如果不指定,Linux 默认使用 8472
  • dev 代表 VXLAN 数据从哪个接口传输。这里是enp0s3

在 VXLAN 中,一般将 VXLAN 接口(本例中即 vxlan0)叫做 VTEP

在这里插入图片描述
在这里插入图片描述

一个 VXLAN 网络的 ping 报文要经历 ARP 寻址 + ICMP 响应 两个过程,一旦 VTEP 设备学习到了对方 ARP 地址,后续通信就可以免去 ARP 寻址的过程。

多播模式VXLAN

多播组主要通过 ARP 泛洪来学习 MAC 地址,即在 VXLAN 子网内广播 ARP 请求,然后对应节点进行响应。group 指定多播组的地址。

这样就不需要指定remote local 并且可以配置多个机器

在这里插入图片描述

配置流程

A主机上
ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev enp0s3
ip link set vxlan0 up
ip addr add local 172.17.0.32/24 dev vxlan0

B主机上
ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev enp0s3
ip link set vxlan0 up
ip addr add local 172.17.0.67/24 dev vxlan0

C主机上
ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev enp0s3
ip link set vxlan0 up
ip addr add local 172.17.0.11/24 dev vxlan0

brigde + VXLAN

使用linux 虚拟网桥 + VXLAN 实现多命名空间构建大二层网络

在这里插入图片描述

实现模拟在AB两个主机内创建多个网络命名空间 实现构建overlay网络环境

A主机上执行命令
#创建网桥br1并启动
brctl addbr br1  
ip link set br1 up 

# 创建vxlan VTEP隧道端点并启动
ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev enp0s3
ip link set vxlan0 up

# 将vxlan VTEP添加到网桥上 
brctl addif br1 vxlan0

# 创建一对虚拟网卡 用于连接命名空间和网桥
ip link add tap1 type veth peer name veth1
ip link add tap2 type veth peer name veth2

# 创建命名空间
ip netns add ns1
ip netns add ns2

# 将网卡一端放入命名空间 设置网卡ip 并启动网卡
ip link set tap1 netns ns1
ip link set tap2 netns ns2

ip netns exec ns1 ip addr add local 172.17.0.3/16 dev tap1
ip netns exec ns1 ip link set tap1 up

ip netns exec ns2 ip addr add local 172.17.0.11/16 dev tap2
ip netns exec ns2 ip link set tap2 up

# 将网卡另一端放入网桥 并启动网卡
ip link set veth1 up
brctl addif br1 veth1

ip link set veth2 up
brctl addif br1 veth2



B主机上执行命令
#创建网桥br1并启动
brctl addbr br1
ip link set br1 up

# 创建vxlan VTEP隧道端点并启动
ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev enp0s3
ip link set vxlan0 up

# 将vxlan VTEP添加到网桥上 
brctl addif br1 vxlan0

# 创建一对虚拟网卡 用于连接命名空间和网桥
ip link add tap3 type veth peer name veth3
ip link add tap4 type veth peer name veth4

# 创建命名空间
ip netns add ns3
ip netns add ns4

# 将网卡一端放入命名空间 设置网卡ip 并启动网卡
ip link set tap3 netns ns3
ip link set tap4 netns ns4

ip netns exec ns3 ip addr add local 172.17.0.15/16 dev tap3
ip netns exec ns3 ip link set tap3 up

ip netns exec ns4 ip addr add local 172.17.0.22/16 dev tap4
ip netns exec ns4 ip link set tap4 up

# 将网卡另一端放入网桥 并启动网卡
ip link set veth3 up
brctl addif br1 veth3

ip link set veth4 up
brctl addif br1 veth4

测试

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值