51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1370|回复: 0
打印 上一主题 下一主题

OpenStack L版本network troubleshooting

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2017-9-17 12:17:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    目前已经有很多介绍OpenStack新特性以及OpenStack网络详解等文章,但是对于Liberty的Network_Troubleshooting的文章还是很少。虽然L版本使用的plugin已经不是OpenvSwitch了,改成了Linuxbridge,性能并没有提高很多,rackspace提供理由如下Looking for reliability and stability,Less moving parts,Easier to troubleshoot这样已经使得Troubleshooting变得容易很多,但是网络部分仍然是最容易出错的部分。这篇文章是以真实的环境一步一步Troubleshooting的,几乎能解决所有的的常规网络问题。
    我使用的网络架构如下图,但是我把controller和network节点放在一台机器上,compute节点单独一台机器(官网文档也是这么做的),一张管理+内部网络,一张外网网络。


    注意点:如果你把一个网卡作为vxlan的end point,那么就不能作为一个外网的出口,因为加入到网桥的接口是作为二层接口来看待的,因此没有IP地址,也就是说网络节点没有了IP地址了,成为了为一台二层设备了,不能进行任何的三层(IP网络)操作了。
    If eth1 is used for the vxlan tunnel end points, it can't also be used in a bridge ala provider_bridge_mappings. You should have a dedicated interface or a vlan interface off eth1 (i.e. Eth1.20) that is dedicated to the overlay traffic. Move the local_ip address to that interface on respective nodes. Verify that you can ping between nodes at each address. If this doesn't work, the Neutron pieces won't work. 下面是network节点的详细组件图,接下去的debug都是基于这些tap,port,linuxbridge进行的。提供了4张图,可以对应起来看。





    安装完成之后,我们先看compute节点,出现了virbr0,这个是libvirt networking,为了debug方便可以disable libvirt networks,这对OpenStack网络没有影响。


    操作之前确定服务是否正常启动
    启动一个实例。绑定floating ip一直ping 8.8.8.8,但是我的floating ip状态不对,开始debug


    在compute节点上运行brctl show,可以看到vxlan的id是63,一个tap是连接qdhcp的,一个是连接controller节点的。
    Shell
    tcpdump -'icmp' -i 'tapa50629db-ac'
    可以看到有ping包从vxlan出去,进入controller节点,在controller的linuxbridge tap上也看到了ping包,那么说明ping包从compute节点到了controller节点。
    在controller节点上sudo ip netns list,我们现在要去qrouter这个namespace上进行debug
    可以看到出现qrouter这个namespace
    Shell
    sudo ip netns exec qrouter-ef746aab-677b-4868-92a9-b27962ffd7c0 ip a


    可以看到这个qrouter的三个接口,可以对照上文的架构图分析,我对其中的一个接口进行tcpdump
    Shell
    sudo ip netns exec qrouter-ef746aab-677b-4868-92a9-b27962ffd7c0 tcpdump -i 'qr-df35811b-2c'
    可以看到有instance发出的ping包,那么这个compute1的ping包确实到达了controller的qrouter的namespace里面,但是出不去,那么看一下qrouter的路由表
    Shell
    sudo ip netns exec qrouter-ef746aab-677b-4868-92a9-b27962ffd7c0 route -n
    路由表正常,应该从qg这个接口出外网,继续tcpdump qg接口
    Shell
    sudo ip netns exec qrouter-ef746aab-677b-4868-92a9-b27962ffd7c0 tcpdump -i 'qg-49d398e7-c5'



    ping也ping不通,那么instance过来的流量当然出不去
    发现找不到192.168.51.97这个网关 那么我看一下linuxbridge的接口,brctl show,发现没有出去的接口


    那么我需要手动加上外网接口 brctl addif brq494427aa-2d eth1(官网没有提到,可能是个bug)
    那么我现在qrouter可以ping通外网了
    加上这个接口eth1
    Instance也ping通了


    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 18:06 , Processed in 0.090898 second(s), 33 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表