Neutron VXLAN/GRE模式中br-tun流表分析

127 篇文章 7 订阅
一.前言
1. Neutron 概述
Neutron 的设计目标是实现“网络即服务”,为了达到这一目标,在设计上遵循了基于“软件定义网络”实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。

理解了 Linux 系统上的这些概念将有利于快速理解 Neutron 的原理和实现。

neutron中主要有br-int、br-tun和br-phy几个bridge。br-int是所有vm连的bridge,br-tun在使用tunnel的时候会用到,br-phy在使用vlan模式的时候会用到。

OpenvSwitch中 bridge 有两种模式:“normal” 和 “flow”。“normal” 模式的 bridge 同普通的L2交换机数据转发模式一样,而 “flow” 模式的 bridge 是根据其流表(flow tables) 来进行转发的。

Neutron 使用了两种 OVS bridge:br-int 和 br-tun。其中,br-int 是一个 “normal” 模式的虚拟网桥,而 br-tun 是 “flow” 模式的,它比 br-int 复杂得多。

2. Neutron涉及的网络技术
  • bridge:网桥,Linux中用于表示一个能连接不同网络设备的虚拟设备,linux中传统实现的网桥类似一个hub设备,而ovs管理的网桥一般类似交换机。
  • br-int:综合网桥,常用于表示实现主要内部网络功能的网桥。
  • br-ex:外部网桥,通常表示负责跟外部网络通信的网桥。
  • GRE:一种通过封装来实现隧道的方式。在openstack中一般是基于L3的gre,即original pkt/GRE/IP/Ethernet
  • VETH:虚拟ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之间的通道。
  • qvb:neutron veth, Linux Bridge-side
  • qvo:neutron veth, OVS-side
  • TAP设备:模拟一个二层的网络设备,可以接受和发送二层网包。
  • TUN设备:模拟一个三层的网络设备,可以接受和发送三层网包。
  • iptables:Linux 上常见的实现安全策略的防火墙软件。
  • Vlan:虚拟 Lan,同一个物理 Lan 下用标签实现隔离,可用标号为1-4094。
  • VXLAN:一套利用 UDP 协议作为底层传输协议的 Overlay 实现。一般认为作为 VLan 技术的延伸或替代者。
  • namespace:用来实现隔离的一套机制,不同 namespace 中的资源之间彼此不可见。
这里我们通过分析br-tun通道网桥来分析整个数据流向,其核心是流表。同时,以6个实验来予以分析。

3.注意
这里,我并不会给出命令的具体输出信息,并加以分析讲解,请见谅。有句古语说得很好,授人以鱼,不如授人以渔。——你需要自己去实践,结合其他知识去分析理解(这里具体是OpenvSwitch、OpenFlow)。

二. 实验
1.实验一  环境准备及初始化
1)在没有任何租户网络的情况下,网络节点上执行
# ovs-ofctl show br-tun

# ovs-vsctl show

2)查看openflow规则
# ovs-ofctl dump-flows br-tun

2.实验二  创建租户网络环境
1)通过上面的分析发现,第一阶段所有的数据包都会被丢弃,因为系统中目前还没有任何租户网络。接下来创建外部网络和租户网络环境,接着,我们执行如下命令来分析。
# neutron router-list
# ip exec qrouterXXXXXX route n
# ip exec qrouterXXXXXX ifconfig

2)网络节点上
查看网络节点上的br-tun流表
# ovs-vsctl show
# ovs-ofctl show br-tun

3. 实验三  创建一个虚拟机
1)计算节点上,分析隧道端口(VTEP)
# ovs-vsctl show

# ovs-ofctl show br-tun

2)租户中的Linux network namespace,注意qrouter和qdhcp的MAC地址
# Neutron router-list
# ip netns
# ip netns exec qrouterXXXX ifconfig
# ip netns exec qdhcpXXXX ifconfig

3)当在计算节点上启动虚拟机时,流表情况如下
# ovs-ofctl dump-flows br-tun

4)当在计算节点上启动完虚拟机时,流表情况如下
# ovs-ofctl dump-flows br-tun

5)查看网络节点上面的流表情况
# ovs-ofctl dump-flows br-tun

6)从中,我们可以看到网络节点上同样也增加了同计算节点上类似的规则
# brctl show
# ifconfig qbrXXXXX
# ifconfig qvbXXXXX
这里,我们可以发现这些规则上的“dl_dst”目的 MAC地址是计算节点上qbr和qvb的MAC地址。

8)虚拟机启动完毕时,查看网络节点的流表情况
# ovs-ofctl dump-flows br-tun

4.实验四  虚拟机向外发送单播包
在虚拟机中,发送单播包,ping往qrouter的qg IP地址
4.1在网络节点上 
1)查看qrouter NameSpace中的qr、qg设备及其IP地址
# ip netns exec qrouterXXXXX ifconfig

2)ping 往qg的 IP地址
# ip netns exec qrouterXXXXX ssh vm_username@vm_ip
$ ifconfig a
$ ping qg_ip

3)   查看网络节点上的流表情况
# ovs-ofctl dump-flows br-tun

4)查看虚拟机所在的宿主机,即计算节点上的流表情况
# ovs-ofctl dump-flows br-tun

4.2 虚拟机中的单播包通往router的过程
第一阶段:在虚拟机的宿主计算节点上的处理过程
# brctl show

# ovs-ofctl show br-tun 

# ovs-vsctl show

第二阶段:在网络节点上的处理过程
# brctl show

# ovs-ofctl show br-tun

# ovs-vsctl show

注意:
经过一段时间后,网络节点和计算节点上面新增的br-tun流表table=20的规则会自动消失。


5.实验五  外部向虚拟机发送数据包

小实验(1)
在网络节点上,直接通过Linux network namespace 向虚拟机发送icmp包
# ip netns exec qrouter-XXXX ping VM_ip

再来查看网络节点和计算节点上面的br-tun流表,发现并没有任何变化,现在的状态与实验四的结果是一样的。

小实验(2)
为VM虚拟机分配一个floating ip,然后在另一个计算节点上面,通过floating ip向虚拟机发送icmp数据包。

小结
实验发现,无论在哪里直接ping 虚拟机的floating ip,其效果与上面的小实验(1)几乎完全相同,各物理节点上的br-tun流表并没有发生任何变化,详细过程表述如下。
第一阶段:网络节点上的处理过程
# ovs-ofctl show br-tun 

# ovs-vsctl show

# ovs-ofctl dump-flows br-tun

第二阶段:计算节点上的处理过程
# brctl show

# ovs-ofctl show br-tun

# ovs-vsctl show

# ovs-ofctl dump-flows br-tun

6. 实验六  虚拟机与虚拟机之间发送数据包
在另一个计算节点上,创建一个虚拟机。然后在两个虚拟机之间互相ping,观察br-tun 流表变化。

小结
至此,我们的整个基于GRE/VXLAN的Neutron隧道网络的VM数据流便分析完了。
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值