openstack 网络调试笔记

openstack 网络调试笔记

环境

controller
192.168.100.x/24
172.17.0.1/24
内网docker源: docker run -d -name docker-registry2 -p 1000:5000 registry
openstack: docker 部署 keystone, nova,cinder, neutron, glance… 物理机部署nova-compute
compute_n
192.168.100.n/24
物理机部署nova-compute,docker 部署 neutron-linuxbridge-agent(hots模式)
neutron:
192.168.100.y/24
eth1,外网 flat 网卡,出网ip: 192.168.100.3
docker 部署 neutron-dhcp-agent,neutron-linuxbridge-cleanup,neutron-l3-agent, neutron-metadata-agent, neutron-linuxbridge-agent(hots模式)
问题: 某次创建在controller的实例无法docker pull,即无法访问1000端口,但可以访问80,8775等端口
开始调试:使用工具tcpdump,tracepath,brctl,ip,iptables
  • 使用ping,tracepath等发现网络正常,能ping通,路径正确
  • 在实例上使用wget 192.168.100.x:1000 和wget 192.168.100.x:5000, 可以正常访问5000,而不能访问1000
  • 在链路每个虚拟设备上使用tcpdump看到底在哪断了
    • neutron
      • brctl show: 前者为外部flat网络,后者为内部网络vxlan203
      • brclt show
      • ip netns
      • 在这里插入图片描述
      • ip netns exec qrouter-d58564d8-957d-4c71-b6a4-11caaf4f6d85 ip addr (可以看见出网ip:192.168.100.3)
      • 在这里插入图片描述
      • ip netns exec qrouter-d58564d8-957d-4c71-b6a4-11caaf4f6d85 tcpdump -i qg-3e80a095-5d host 192.168.100.x 去查看是否通路,发现访问1000时都没有收到消息
    • controller: 因为实例创建在controller的nova-compute 上,所以当发现访问1000的消息并没有发到neutron上,判断消息是在controller就被拦截了
      • brctl show
      • 在这里插入图片描述
      • 前者 为vxlan-203 网络,则tapa608243e-e6 为所实例绑定的虚拟网卡
      • 分别使用tcp监听 vxlan203,tapa608243e-e6, brqf46325b0-83, 发现发往1000的消息发出tap后并没有被发往vxlan-203和brqf46325b0-83
      • 找到消息中断的地方了,但是为什么会被拦截呢,
      • iptables_frame
      • 结合iptables转发消息的原理,怀疑消息在 prerouting 时被发往了input 而不是forward进行消息转发。
      • 查看nat 表:iptables -t nat -L -n
      • 在这里插入图片描述
      • 发现PREROUTING 新加了一个自定义链 DOCKER
      • 在这里插入图片描述
      • 在 DOCKER 链最后一条发现 发往1000端口的消息被做了dnat,目标地址直接发往目标容器了,但是源地址仍是实例的ip,所以返回消息找不到返回地址,从而造成tcp建立超时,syn发过去后从没有收到确认。

contronller 上不要运行nova-compute,compute和neutron节点保持iptables 纯净,尽量不部署其他服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值