searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Openstack neutron网络模型介绍

2024-01-02 09:04:51
109
0

很多朋友在刚开始接触openstack neutron的时候,会被其网络模型搞的晕头转向,总结来说,neutron支持创建5种类型的网络,它们分别是local,flat,vlan,vxlan和gre。本文接下来将一一介绍Neutron如何实现这5种类型的网络。

Neutron支持多种mechanism实现上述5种类型的网络,常见的是linux bridge和open vswitch。下文讨论的都是open vswitch的实现。

local

local的网络模型如图所示,先介绍一下图中的虚拟网络设备。vm要打通和宿主机的网络需要创建一个tapxxx设备,br-int是由ovs创建的网桥,本来只需要将vm的tapxxx设备接入br-int,就可以通过br-int实现vm之间的数据交换了。但是早期的ovs网桥不支持Security Group设置,于是在tapxxx和br-int之间增加了qbrxxx,qbrxxx是Linux内核的网桥,支持配置iptables来设置Security Group。为了连接qbrxxx和br-int,创建一对veth pair,veth pair的特点是数据包从一端流入,从另一端流出,像一根虚拟网线。qvbxxx和qvoxxx就是veth pair,qvbxxx接入qbrxxx,qvoxxx接入br-int,打通qbrxxx和br-int的网络。

 

local网络模式的特点是br-int没有与物理网络连接,也就是说local网络只能让处于同一个宿主机上vm之间互相通信。一般来说不会使用这种网络模式,通过介绍这种Neutron最简单的网络模型,让我们熟悉虚拟网络设备。

ovs经过迭代支持通过配置流表的方式设置Security Group,也就是说不再需要在tapxxx和br-int之间再加一个qbrxxx来设置Security Group了,这么做不但简化了网络的传输模型,而且提升了网络的转发性能。本文基于旧版的neutron做的讲解,依然保留着qbrxxx设备,下文都是按照这种模型作图。

flat

flat的网络模型如图所示。创建一个flat网络需要额外建立一个br-ethx网桥,并且将一块物理网卡ethx接入br-ehtx。vm还是先接入br-int,为了打通br-int和 br-eth1,图中多了int-br-eth1和phy-br-eth1这对虚拟网络设备,它是ovs提供的patch port设备,它只能连接ovs网桥,性能比veth pair更好。想要连接Linux网桥和ovs网桥,只能用veth pair。

flat网络是无tag的网络,可以这么理解,在虚拟网桥这一侧没有做隔离,想要做隔离,需要在物理网络eth1这一侧做隔离。比如基于eth0创建一个名为flat-eth0的flat网络,再基于eth1创建一个名为flat-eth1的flat网络,要让这两个网络隔离,可以配置eth0和eth1所处的这两个物理网络彼此隔离。一个flat网络和一个物理网络是一一映射的,创建一个flat网络就需要专门为它分配一个物理网卡,为物理网卡分配物理网络,想要做租户隔离,这种模式在公有云上也是不可取的。

 

vlan

与flat无tag网络对应的就是vlan有tag的网络。

vlan的网络模型如图所示,可以看到ovs将接入br-int的tapxxx设备打上tag,并且在流表中配置数据包只允许在tag相同的端口间转发,这样就在虚拟网桥这一层做到了网络隔离,图中vm1、vm2、vm3和vm4是隔离的。vm1和vm2处于同一个vlan,并且连接到同一个br-int,它们之间的数据包直接通过br-int转发。vm1要想与vm3通信,数据包会转发到int-br-eht1这个端口,这个端口可以将它理解为一个trunk,允许所有tag的数据包通过。数据包在br-eth1完成vlan id的转换,可以这么理解,br-int这一层的tag只有ovs认识,要想物理网络也认识vlan id,需要将ovs内部的tag映射到外部的vlan id。数据包经由物理网络转发到另一侧的br-eth1,又将vlan id映射回内部tag,将数据转发到br-int,根据流表的的配置最终转发到vm3。

 

vlan模式可以基于一个物理局域网,例如图中eth1所处的局域网,构建出多个彼此隔离的vlan,这也正是我们所预期的。但是上文说过vlan数量有限,只有4000多个,当租户很多时,无法满足需求。这时vxlan就派上用场了。

vxlan

如图所示,vm1访问vm3,数据包会转发到br-tun,br-int会做tunnel号的匹配,选择一个vtep设备将报文封装成vxlan格式转发到对端。这里匹配到的是vxlanxxx1设备,它实际就是vtep设备,在这里它存了对端vtep vxlanxxx2的ip地址,就能进行封装了,最终报文是通过eth1转发出去的。

 

vxlan网络最大的的特点是允许网络地址堆叠,vxlan通过vni标识不同的租户,租户分配到一个vni,可以在vni的空间自由划分网段,而不必考虑物理网络。vxlan将vm之间通信的原始报文封装在eth1之间通信的报文里,也可以理解为vxlan将原有的eth1网络覆盖了,也因此vxlan网络被称为一种overlay网络。

 

接下来描述一下我理解的为什么vxlan允许地址堆叠?

 

 

如图所示,vm1和vm3属于一个虚拟私有网络,给它分配的vni为1,vm2和vm4属于vni为2的虚拟私有网络。vm3和vm4虽然有相同的ip,但是它们接入ovs网桥的端口有不同的tag,这里的tag就可以理解为vni。当vm1要访问vm3是,报文会转发到br-tun,这里会做一个tag到vni的转换,将报文封装为vxlan格式由vtep设备转发到对端,对端接收到报文,将报文解封获取vni,又做了vni到tag的转换,然后最终将报文转发到tag为1的端口,最终转发给vm3,而不是vm4。以上是我vxlan允许ip地址堆叠的理解。

gre

gre网络模型和vxlan网络模型是一致的,都是基于隧道技术实现的overlay网络,区别在隧道的封装协议不同。vxlan网络基于vxlan协议协议实现,gre网络基于gre协议实现。GRE收到需要进行封装和路由的某网络层协议(如IP)数据时,将首先对其加上GRE报文头,使之成为GRE报文,再将其封装在另一协议(如IP)中。这样,此报文的转发就可以完全由IP协议负责。报文格式如图所示。

0条评论
0 / 1000
张****剑
1文章数
0粉丝数
张****剑
1 文章 | 0 粉丝
张****剑
1文章数
0粉丝数
张****剑
1 文章 | 0 粉丝
原创

Openstack neutron网络模型介绍

2024-01-02 09:04:51
109
0

很多朋友在刚开始接触openstack neutron的时候,会被其网络模型搞的晕头转向,总结来说,neutron支持创建5种类型的网络,它们分别是local,flat,vlan,vxlan和gre。本文接下来将一一介绍Neutron如何实现这5种类型的网络。

Neutron支持多种mechanism实现上述5种类型的网络,常见的是linux bridge和open vswitch。下文讨论的都是open vswitch的实现。

local

local的网络模型如图所示,先介绍一下图中的虚拟网络设备。vm要打通和宿主机的网络需要创建一个tapxxx设备,br-int是由ovs创建的网桥,本来只需要将vm的tapxxx设备接入br-int,就可以通过br-int实现vm之间的数据交换了。但是早期的ovs网桥不支持Security Group设置,于是在tapxxx和br-int之间增加了qbrxxx,qbrxxx是Linux内核的网桥,支持配置iptables来设置Security Group。为了连接qbrxxx和br-int,创建一对veth pair,veth pair的特点是数据包从一端流入,从另一端流出,像一根虚拟网线。qvbxxx和qvoxxx就是veth pair,qvbxxx接入qbrxxx,qvoxxx接入br-int,打通qbrxxx和br-int的网络。

 

local网络模式的特点是br-int没有与物理网络连接,也就是说local网络只能让处于同一个宿主机上vm之间互相通信。一般来说不会使用这种网络模式,通过介绍这种Neutron最简单的网络模型,让我们熟悉虚拟网络设备。

ovs经过迭代支持通过配置流表的方式设置Security Group,也就是说不再需要在tapxxx和br-int之间再加一个qbrxxx来设置Security Group了,这么做不但简化了网络的传输模型,而且提升了网络的转发性能。本文基于旧版的neutron做的讲解,依然保留着qbrxxx设备,下文都是按照这种模型作图。

flat

flat的网络模型如图所示。创建一个flat网络需要额外建立一个br-ethx网桥,并且将一块物理网卡ethx接入br-ehtx。vm还是先接入br-int,为了打通br-int和 br-eth1,图中多了int-br-eth1和phy-br-eth1这对虚拟网络设备,它是ovs提供的patch port设备,它只能连接ovs网桥,性能比veth pair更好。想要连接Linux网桥和ovs网桥,只能用veth pair。

flat网络是无tag的网络,可以这么理解,在虚拟网桥这一侧没有做隔离,想要做隔离,需要在物理网络eth1这一侧做隔离。比如基于eth0创建一个名为flat-eth0的flat网络,再基于eth1创建一个名为flat-eth1的flat网络,要让这两个网络隔离,可以配置eth0和eth1所处的这两个物理网络彼此隔离。一个flat网络和一个物理网络是一一映射的,创建一个flat网络就需要专门为它分配一个物理网卡,为物理网卡分配物理网络,想要做租户隔离,这种模式在公有云上也是不可取的。

 

vlan

与flat无tag网络对应的就是vlan有tag的网络。

vlan的网络模型如图所示,可以看到ovs将接入br-int的tapxxx设备打上tag,并且在流表中配置数据包只允许在tag相同的端口间转发,这样就在虚拟网桥这一层做到了网络隔离,图中vm1、vm2、vm3和vm4是隔离的。vm1和vm2处于同一个vlan,并且连接到同一个br-int,它们之间的数据包直接通过br-int转发。vm1要想与vm3通信,数据包会转发到int-br-eht1这个端口,这个端口可以将它理解为一个trunk,允许所有tag的数据包通过。数据包在br-eth1完成vlan id的转换,可以这么理解,br-int这一层的tag只有ovs认识,要想物理网络也认识vlan id,需要将ovs内部的tag映射到外部的vlan id。数据包经由物理网络转发到另一侧的br-eth1,又将vlan id映射回内部tag,将数据转发到br-int,根据流表的的配置最终转发到vm3。

 

vlan模式可以基于一个物理局域网,例如图中eth1所处的局域网,构建出多个彼此隔离的vlan,这也正是我们所预期的。但是上文说过vlan数量有限,只有4000多个,当租户很多时,无法满足需求。这时vxlan就派上用场了。

vxlan

如图所示,vm1访问vm3,数据包会转发到br-tun,br-int会做tunnel号的匹配,选择一个vtep设备将报文封装成vxlan格式转发到对端。这里匹配到的是vxlanxxx1设备,它实际就是vtep设备,在这里它存了对端vtep vxlanxxx2的ip地址,就能进行封装了,最终报文是通过eth1转发出去的。

 

vxlan网络最大的的特点是允许网络地址堆叠,vxlan通过vni标识不同的租户,租户分配到一个vni,可以在vni的空间自由划分网段,而不必考虑物理网络。vxlan将vm之间通信的原始报文封装在eth1之间通信的报文里,也可以理解为vxlan将原有的eth1网络覆盖了,也因此vxlan网络被称为一种overlay网络。

 

接下来描述一下我理解的为什么vxlan允许地址堆叠?

 

 

如图所示,vm1和vm3属于一个虚拟私有网络,给它分配的vni为1,vm2和vm4属于vni为2的虚拟私有网络。vm3和vm4虽然有相同的ip,但是它们接入ovs网桥的端口有不同的tag,这里的tag就可以理解为vni。当vm1要访问vm3是,报文会转发到br-tun,这里会做一个tag到vni的转换,将报文封装为vxlan格式由vtep设备转发到对端,对端接收到报文,将报文解封获取vni,又做了vni到tag的转换,然后最终将报文转发到tag为1的端口,最终转发给vm3,而不是vm4。以上是我vxlan允许ip地址堆叠的理解。

gre

gre网络模型和vxlan网络模型是一致的,都是基于隧道技术实现的overlay网络,区别在隧道的封装协议不同。vxlan网络基于vxlan协议协议实现,gre网络基于gre协议实现。GRE收到需要进行封装和路由的某网络层协议(如IP)数据时,将首先对其加上GRE报文头,使之成为GRE报文,再将其封装在另一协议(如IP)中。这样,此报文的转发就可以完全由IP协议负责。报文格式如图所示。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
2
0