OpenStack网络排查OVS

半兽人 发表于: 2025-09-18   最后更新时间: 2025-09-18 14:30:22  
{{totalSubscript}} 订阅, 26 游览

OpenStack Neutron 的 CLI(openstack network/subnet/port/router …)负责「逻辑层面的抽象」,真正落到宿主机上,都是通过 neutron-openvswitch-agent 把配置下发到 OVS 里的。

所以排查网络问题的时候,除了 openstack 命令,还必须配合 ovs-vsctl / ip netns / ip link / ip route 一起看。

以下是把 OpenStack CLI + OVS 命令整合成一条完整的排查链路。

逻辑层(OpenStack CLI)

  1. openstack server show <vm> → 确认 VM 的 IP 和网卡端口
  2. openstack port show <port-id> → 看绑定网络、子网、安全组
  3. openstack subnet show <subnet-id> → CIDR / gateway_ip
  4. openstack router port list <router-id> → router 接口
  5. openstack router show <router-id> → external_gateway_info
  6. openstack network list --external → 外部网络 / 网关

数据平面(宿主机上的实际情况)

1. 虚拟机接口(tap-XXX)

  • 确认 VM 的网卡是否已插到 br-int:
ovs-vsctl show | grep tap
  • 查看端口 VLAN tag 是否匹配:
ovs-vsctl list port tap-xxxx

2. br-int(租户网络交换机)

  • VM 的 tap 口、router 的 qr-XXX 都在这里。
  • 常用命令:
ovs-vsctl show
ovs-vsctl list-br
ovs-vsctl list-ports br-int

3. br-tun(VXLAN 隧道交换机)

  • 用来跨宿主机传 tenant 流量。
  • 常用命令:
ovs-vsctl list-ports br-tun
ovs-vsctl show | grep vxlan

确认 VXLAN peer(remote_ip)是否正确。

4. br-ex(外部网络交换机)

  • 负责连到物理外网(或你用 veth 模拟的外网)。
  • 常用命令:
ovs-vsctl list-ports br-ex
ip link show veth2

5. patch 口

  • br-int <-> br-ex 是通过 patch 口(int-br-ex <-> phy-br-ex)打通的。
  • 常用命令:
ovs-vsctl show | grep patch

6. qrouter namespace

  • 确认 router 内部的接口和路由:
ip netns list
ip netns exec qrouter-xxxx ip addr
ip netns exec qrouter-xxxx ip route

总结一句:

  • openstack CLI:看逻辑关系(网络/子网/端口/路由器/网关)。
  • ovs-vsctl:看 OVS 桥和端口,确认流量有没有被插进去、tag 对不对。
  • ip netns:看 namespace 内的路由器、DHCP agent。
  • ip link/route:看物理设备和内核路由。

逻辑层到 OVS 数据平面对应关系

从虚拟机发包 → 出到物理网卡 的流程图

VM 出口数据流向图(文字版)

[ VM 内部网卡 eth0 ]
        │
        ▼
[ tap-xxxx (qemu/kvm 虚拟接口) ]
        │
        ▼
[ br-int (OVS 集中交换机) ]
   ├─ 租户网卡 (tap-xxx)
   ├─ Router 内口 (qr-xxx)
   └─ Patch 口 (int-br-ex)
        │
        ▼
[ phy-br-ex (OVS patch 口) ]
        │
        ▼
[ br-ex (外部网桥) ]
   ├─ qg-xxx (Router 外口)
   └─ veth/物理网卡 (enoXXXX)
        │
        ▼
[ 物理网络 / 外部世界 ]

各层检查对应命令

  1. VM → tap-口

    openstack port show <vm-port-id>
    ovs-vsctl list-ports br-int | grep tap
    
  2. tap → br-int

    ovs-vsctl show
    ovs-vsctl list port tap-xxxx
    
  3. br-int → qrouter (qr-xxx)

    ip netns list
    ip netns exec qrouter-xxxx ip addr
    
  4. br-int → br-ex (patch 口)

    ovs-vsctl show | grep patch
    
  5. br-ex → qg-xxx

    ip netns exec qrouter-xxxx ip addr
    
  6. br-ex → 物理网卡 / veth

    ovs-vsctl list-ports br-ex
    ip link show veth2   # 或者宿主机物理口 enoXXXX
    
  7. 最终出宿主机

    ip route
    tcpdump -i veth2 -n icmp
    

简单对照关系

  • VM 网卡 eth0 → tap-xxx → br-int
  • Router 内口 → qr-xxx → br-int
  • Router 外口 → qg-xxx → br-ex
  • br-int ↔ br-ex → int-br-ex / phy-br-ex
  • 外网口 → veth2 / 物理网卡 enoXXXX
更新于 2025-09-18
在线,4小时前登录

查看OpenStack更多相关的文章或提一个关于OpenStack的问题,也可以与我们一起分享文章