OpenStack Neutron问题调试的一点点心得

在OpenStack方面也工作了一年多了,有一点点心得。终于有时间记录下来,希望对别人能有一点点帮助。不对的地方请赐教,我先谢了。


下面我简单介绍一下Neutron网络从虚机到默认网桥br-int的路径和涉及到的一些概念,这样有助于对Neutron安装中问题的调试。简单来说,虚机的网卡会连接到一个由Neutron创建的Linux Bridge上,然后通过一对veth pair连接到OpenVSwitch(ovs)的bridge(一般默认为br-int)上。根据您的配置,从br-int上又可以连接到外部网络或者其他OpenStack tenant network。为什么要用一个Linux Bridge,而不是ovs bridge,是因为Neutron的Security Group机制使用的iptables技术,它只能用在Linux Bridge上。




1. 找出虚机(demo9)的ID

[root@ip]# nova show demo9
+--------------------------------------+------------------------------------------------------------+
| Property                             | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host                 | x.x.x.x                        |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | x.x.x.x                        |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000009                                          |

2.用虚机的ID找出网卡的ID。虚机的网络配置可以从libvirt的配置中读到。

[root@ip]# cat /etc/libvirt/qemu/instance-00000009.xml|grep -b3 tap
2523-    <interface type='bridge'>
2553-      <mac address='fa:16:3e:37:c0:2b'/>
2594-      <source bridge='qbr6298f624-95'/>
2634:      <target dev='tap6298f624-95'/>
2671-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
2753-    </interface>
2770-    <serial type='file'>


3.从Linux Bridge的信息中可以看到网卡连接到了qbrxxx的网桥上,然后上面还有一个端口qvbxxx
[root@ip]# brctl show
bridge name     bridge id               STP enabled     interfaces
qbr6298f624-95          8000.aa9a367d02ec       no              qvb6298f624-95
                                                        tap6298f624-95

4.qvbxxx和qvoxxx形成了一个veth pair。veth pair是两个连接在一起的端口,就像一根铜线,从一个端口进入的数据,会从另外一端出来。

[root@ip]# ip -d link show|grep -b3 6298f624-95
1026-    link/ether d2:07:58:f8:11:3f brd ff:ff:ff:ff:ff:ff
1081-20: tep2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
1163-    link/ether c6:af:e2:f7:3f:da brd ff:ff:ff:ff:ff:ff
1218:23: qbr6298f624-95: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
1310-    link/ether aa:9a:36:7d:02:ec brd ff:ff:ff:ff:ff:ff
1365:24: qvo6298f624-95: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
1472-    link/ether 8a:5c:1c:6c:81:12 brd ff:ff:ff:ff:ff:ff
1527-    veth
1537:25: qvb6298f624-95: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
1644-    link/ether aa:9a:36:7d:02:ec brd ff:ff:ff:ff:ff:ff
1699-    veth
1709:26: tap6298f624-95: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
1812-    link/ether fe:16:3e:37:c0:2b brd ff:ff:ff:ff:ff:ff


如果不太清楚veth pair的配对,可以用ethtool找出另外一端的ID号(例如 25: qvb6298f624-95

[root@ip]# ethtool -S qvo6298f624-95
NIC statistics:
     peer_ifindex: 25


5.veth pair的一端最后接在了br-int上。

[root@ip]# ovs-vsctl show|grep -b3 6298f624-95
1001-        Port br-int
1021-            Interface br-int
1050-                type: internal
1081:        Port "qvo6298f624-95"
1111-            tag: 1
1130:            Interface "qvo6298f624-95"
1169-    Bridge br-tun
1187-        Port "gre0"
1207-            Interface "gre0"

了解了Neutron网络的路径,有利于我们排查网络路径上的问题。假定我们给虚机分配的IP为10.0.20.2/24。将一个不用的IP付给所在linux bridge即可ping通虚机。

[root@ip]# ifconfig qbr6298f624-95 10.0.20.100/24
[root@ip]# ping -c3 10.0.20.2
PING 10.0.20.2 (10.0.20.2) 56(84) bytes of data.
64 bytes from 10.0.20.2: icmp_seq=1 ttl=64 time=3.93 ms
64 bytes from 10.0.20.2: icmp_seq=2 ttl=64 time=0.572 ms
64 bytes from 10.0.20.2: icmp_seq=3 ttl=64 time=1.73 ms


另外利用Neutron提供的neutron-debug工具也可以检查tenant网络的连通性。neutron-debug可以在指定的网络中加入测试端口(probe),用来执行命令。probe创建后的ID可以从probe-list中得到。

[root@ip]# export NEUTRON_TEST_CONFIG_FILE=/etc/neutron/l3_agent.ini
[root@ip]#  neutron-debug probe-create 9f6b9038-6738-4222-ba2e-84304a182c38
[root@ip]# neutron-debug probe-exec e84d33b8-9230-485b-8988-cc8090173499 'ping -c3 10.0.10.2'
PING 10.0.10.2 (10.0.10.2) 56(84) bytes of data.
64 bytes from 10.0.10.2: icmp_seq=1 ttl=64 time=0.086 ms
64 bytes from 10.0.10.2: icmp_seq=2 ttl=64 time=0.069 ms
64 bytes from 10.0.10.2: icmp_seq=3 ttl=64 time=0.093 ms





参考文章

OpenStack Networking Troubleshooting

scottlowe blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值