在开始讲Neutron与Nova的网络关系前,先理解一下Openvswitch是两个模块组件中,特别重要的网络通讯模块了,而Openvswitch主要为管理Linux bridge及接口,了解Linux Bridge是学习Neutron很重要的一部份,下面我带着一个平台中的两个节点(Neutron和Nova)去理解Neutron和Nova的网络逻辑关系:
1.通过以下Vxlan的逻辑图,去理解每个节点中,到底存在些什么组件与接口
Nova与Neutron的接口架构图
2.通过以上图,先从计算节点(Nova)入手,通过使用相关命令去查询一些信息,操作如下:
[root@compute03 ~]# ip addr | grep q
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
5: br-int: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
13: br-tun: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
14: qbr7047c83a-64: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
15: qvo7047c83a-64: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP qlen 1000
16: qvb7047c83a-64: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbr7047c83a-64 state UP qlen 1000
108: qbrae27b327-c5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
109: qvoae27b327-c5: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP qlen 1000
110: qvbae27b327-c5: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbrae27b327-c5 state UP qlen 1000
111: tapae27b327-c5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbrae27b327-c5 state UNKNOWN qlen 500
112: qbr0945157b-02: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
113: qvo0945157b-02: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master ovs-system state UP qlen 1000
114: qvb0945157b-02: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbr0945157b-02 state UP qlen 1000
117: tap0945157b-02: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master qbr0945157b-02 state UNKNOWN qlen 500
可用作为参考查询命令(Openvswitch的命令)
[root@compute03 ~]# ovs-vsctl list-br ----查询网桥
br-int
br-tun
[root@compute03 qemu]# ovs-vsctl list Bridge ----查询网桥更详细信息
_uuid : c6b6e91b-ee62-4fe4-ae1a-b25a69c037b8
controller : []
datapath_id : "00001ae9b6c6e44f"
datapath_type : ""
external_ids : {}
fail_mode : secure
flood_vlans : []
flow_tables : {}
ipfix : []
mirrors : []
name : br-tun
netflow : []
other_config : {}
ports : [02c8f17f-5add-431f-8034-461a05ad3f17, 189c8849-fd29-4d11-9233-109ca963187f, 4c7e8b0b-ce3d-4ad8-97cc-13bdc709cd8d, 568b47a0-973b-4930-b8c7-26915dd97fc1, ff1e1f72-9cd5-4e8e-999f-7da4b6efa760]
protocols : []
sflow : []
status : {}
stp_enable : false
[root@controller02 ~]# ovs-vsctl list-portsbr-int
patch-tun
tap0a0688b4-f8 ---DHCP
tap3f46f81b-4f ---Router
tapeb25bcee-1b ---DHCP
tapf36b911d-fa ---DHCP
tapf733605f-e2 ---DHCP
tapfb9f4bc2-30 ---Router
从以上命令行中,我们可以看到,有两个Linux Bridge,还有大概11个接口,其中有一些接口可以跟逻辑图对上位。
3.继续使用命令查询OVS相关配置信息,如下操作命令
[root@compute03 ~]# ovs-vsctl show
f6df2d7f-497e-4f62-a346-ab096811d737
Bridge br-int ----linux bridge
fail_mode: secure
Port patch-tun -----在br-int桥上的接口 ,与br-tun桥相连接的接口
Interface patch-tun
type: patch
options: {peer=patch-int} ----linux bridge 的接口名称
Port br-int
Interface br-int
type: internal
Port "qvoae27b327-c5" -----在br-int桥上的接口
tag: 21
Interface "qvoae27b327-c5"
Port "qvo0945157b-02" -----在br-int桥上的接口
tag: 1
Interface "qvo0945157b-02"
Bridge br-tun ----linux bridge
fail_mode: secure
Port br-tun -----在br-tun桥上的接口 ,与br-int桥相连接的接口
Interface br-tun
type: internal
Port "vxlan-0af80901"
Interface "vxlan-0af80901" -----在br-tun桥上的接口
type: vxlan
options: {df_default="true", in_key=flow, local_ip="10.248.9.3", out_key=flow, remote_ip="10.248.9.1"}
Port "vxlan-0af80905"
Interface "vxlan-0af80905" -----在br-tun桥上的接口
type: vxlan
options: {df_default="true", in_key=flow, local_ip="10.248.9.3", out_key=flow, remote_ip="10.248.9.5"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port "vxlan-0af80902"
Interface "vxlan-0af80902" -----在br-tun桥上的接口
type: vxlan
options: {df_default="true", in_key=flow, local_ip="10.248.9.3", out_key=flow, remote_ip="10.248.9.2"}
可用作为参考查询命令(Openvswitch的命令)
[root@compute03 ~]# ovs-vsctl list-ports br-int
patch-tun
qvo0945157b-02
qvoae27b327-c5
[root@compute03 ~]# ovs-vsctl list-ports br-tun
patch-int
vxlan-0af80901
vxlan-0af80902
vxlan-0af80905
[root@compute03 ~]# ovs-vsctl list Port | more ----查询接口更详细的信息
_uuid : 568b47a0-973b-4930-b8c7-26915dd97fc1
bond_downdelay : 0
bond_fake_iface : false
bond_mode : []
bond_updelay : 0
external_ids : {}
fake_bridge : false
interfaces : [c417e672-4127-41c4-87da-b3f4a325a49d]
lacp : []
mac : []
name : patch-int
other_config : {}
qos : []
statistics : {}
status : {}
tag : []
trunks : []
vlan_mode : []
以上命令中,先与逻辑图和Ip addr 进行对位,从中我们可以知道原来Nova还存在很多接口,其中Vxlan属于隧道技术了,也就是点对点技术,在Options的配置中可以了解到,还有现在看到接口都是Linux bridge的接口了,那么在ip addr | grep q的命令行中,我们也看到了tap、qbr、qvb的接口,这个属于什么接口呢?
4.继续使用命令或配置文件,查询tap、qbr、qvb的接口信息,如下操作:
[root@compute03 qemu]# pwd
/etc/libvirt/qemu
[root@compute03 qemu]# cat instance-0000006d.xml | grep qbr
<source bridge='qbr0945157b-02'/>
[root@compute03 qemu]# cat instance-0000006d.xml | grep tap
<target dev='tap0945157b-02'/>
从4的配置文件与命令行中,可以看到tap属于VM的的虚拟主机网口,而qbr是另外一个网桥,直接与虚拟主机的网口进行对接的网桥,目前还有没看到qvb的接口属于什么接口,按照逻辑图应该属于qbr面对接br-int的接口。
5.继续使用命令查询qvb的接口相关信息,如下操作:
[root@computer03 qemu]# brctl show
bridge name bridge id STPenabled interfaces
qbr0945157b-02 8000.2afe03b868fd no qvb0945157b-02
tap0945157b-02
qbrae27b327-c5 8000.16b068a489a3 no qvbae27b327-c5
tapae27b327-c5
从5以上命令中,可以看到很详细信息,qvb属于qbr的接口,同时tap也是他的一个接口,只是两个接口作用完全不同,一个是对接br-int,一个是对接VM。
Nova节点的命令总结:
IP addr
ovs-vsctl(show/list/list-ports/list-br)
ovs-ofctl(show)
ovs-appctl(fdb/show)
brctl (show)
从以上逻辑图可以很清楚知道数据流量向,每个接口的关系与顺序,请关注“Neutron与Nova的网络逻辑关系---Neutron节点网络逻辑关系(二)”