openstack之网络分析2

neutron如何让tap和虚拟机建立联系?

这几天的收获是,看日志不仅要分析控制节点的日志,还要分析物理节点的日志。而且物理节点和虚拟机的相关性更大一点。从物理节点的neutron日志分析中可以得到更多答案。

 

这些是删除虚拟机时日志中出现的部分命令

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'iptables-save', '-c']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'iptables-restore', '-c']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ip6tables-save', '-c']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ip6tables-restore', '-c']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'conntrack', '-D', '-f', 'ipv4', '-d', '172.16.15.31', '-w', '11', '-s', '172.16.15.35']

conntrack -D -f ipv4 -d 172.16.15.31 -w 11 -s 172.16.15.35 (no filter matched)

Removing device (tap1965e495-8a) filter remove_port_filter /usr/lib/python2.7/site-packages/neutron/agent/linux/iptables_firewall.py:184

注意这个py文件

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'iptables-save', '-c']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'iptables-restore', '-c'] 

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ip6tables-save', '-c']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ip6tables-restore', '-c']

了解这些命令iptables-save -c,iptables-restore -c,ip6tables-save -c和ip6tables-restore -c

iptables-save  and  ip6tables-save are used to dump the contents of IP or IPv6 Table in easily parseable format to STDOUT. Use I/O-redirection provided by your shell to write to a file.

 iptables-restore and ip6tables-restore are used to restore IP and IPv6 Tables from data specified on STDIN. Use I/O redirection provided by your shell to read from a file

 

 

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-L']

 ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-D', 'FORWARD', '-i', 'tap1965e495-8a', '-j', 'neutronARP-tap1965e495-8a', '-p', 'ARP']

 

 ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-X', 'neutronARP-tap1965e495-8a']

 

 Agent loop found changes! {'current': set([]), 'removed': set(['tap9ab7d96e-55']), 'added': set([]), 'updated': set([])} daemon_loop /usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py:1104

 

 

 

接着分析添加虚拟机时的日志记录:

Agent loop found changes! {'current': set(['tapddb826cd-f2']), 'removed': set([]), 'added': set(['tapddb826cd-f2']), 'updated': set([])} daemon_loop /usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py:1104

【新设备应该就是从这开始创立的】

 Preparing filters for devices set(['tapddb826cd-f2'])

 Get security group information for devices via rpc ['tapddb826cd-f2'] security_group_info_for_devices /usr/lib/python2.7/site-packages/neutron/api/rpc/handlers/securitygroups_rpc.py:53

MSG_ID is 871c9377eaf346aa8aba1a22b72ecf35 _send /usr/lib/python2.7/site-packages/oslo_messaging/_drivers/amqpdriver.py:392

Preparing device (tapddb826cd-f2) filter prepare_port_filter /usr/lib/python2.7/site-packages/neutron/agent/linux/iptables_firewall.py:164

 Update security group information for ports [u'ddb826cd-f28b-4fc7-b548-9fcd19a6b782'] prepare_devices_filter /usr/lib/python2.7/site-packages/neutron/agent/securitygroups_rpc.py:165

 

 Update rules of security group (3e07d4ff-0fdd-4fe0-988f-016c42edb10d) update_security_group_rules /usr/lib/python2.7/site-packages/neutron/agent/linux/iptables_firewall.py:141

Update members of security group (3e07d4ff-0fdd-4fe0-988f-016c42edb10d) update_security_group_members /usr/lib/python2.7/site-packages/neutron/agent/linux/iptables_firewall.py:145

 

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ipset', 'create', '-exist', 'NIPv43e07d4ff-0fdd-4fe0-988f-', 'hash:net', 'family', 'inet']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ipset', 'swap', 'NIPv43e07d4ff-0fdd-4fe0-988f--n', 'NIPv43e07d4ff-0fdd-4fe0-988f-']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ipset', 'destroy', 'NIPv43e07d4ff-0fdd-4fe0-988f--n']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ipset', 'restore', '-exist']

['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ipset', 'swap', 'NIPv63e07d4ff-0fdd-4fe0-988f--n', 'NIPv63e07d4ff-0fdd-4fe0-988f-']

IPTablesManager.apply completed with success _apply_synchronized 

Releasing semaphore "iptables" 

MSG_ID is eb6d37801b08476385f697728fcd4df1

Port tapddb826cd-f2 added treat_devices_added_updated

Port tapddb826cd-f2 updated. Details: {u'profile': {}, u'network_qos_policy_id': None, u'qos_policy_id': None, u'allowed_address_pairs': [], u'admin_state_up': True, u'network_id': u'0a807a08-337e-4e61-bf42-c9cd7b4df1e4', u'segmentation_id': None, u'device_owner': u'compute:OA', u'physical_network': u'oa', u'mac_address': u'fa:16:3e:82:42:c9', u'device': u'tapddb826cd-f2', u'port_security_enabled': True, u'port_id': u'ddb826cd-f28b-4fc7-b548-9fcd19a6b782', u'fixed_ips': [{u'subnet_id': u'2445dd26-5275-492f-8d14-e13ecf876667', u'ip_address': u'172.16.15.21'}], u'network_type': u'flat', u'security_groups': [u'3e07d4ff-0fdd-4fe0-988f-016c42edb10d']}

 

Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-L']

ebtables  is an application program used to set up and maintain the tables of rules (inside the Linux kernel) that inspect Ethernet frames.  It is analogous to the iptables appli-cation, but less complicated, due to the fact that the Ethernet protocol is much simpler than the IP protocol.

ebtables -L 列出所有规则

 

Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-N', 'neutronARP-tapddb826cd-f2', '-P', 'DROP']

ebtables -N 创建一条新链,默认策略是丢包

 

Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-F', 'neutronARP-tapddb826cd-f2']

刷新这个链

 

Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-A', 'neutronARP-tapddb826cd-f2', '-p', 'ARP', '--arp-ip-src', '172.16.15.21', '-j', 'ACCEPT']

添加一条规则到这条链上 -p ARP  是指ARP协议  .这里是指原地址规则,估计是设置ip地址。

The (R)ARP IP source address specification

 

 

Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ebtables', '-A', 'FORWARD', '-i', 'tapddb826cd-f2', '-j', 'neutronARP-tapddb826cd-f2', '-p', 'ARP']

转发链添加新建的过滤规则

 

Command: ['ip', '-o', 'link', 'show', 'tapddb826cd-f2']

【有没有这个o的区别就是会不会提前换行,如果有,意味着输出单线图,会把设备所有的信息在一行上输出,一行不够时自动跳到下一行。如果没有-o,可能没到行尾,就自动换行了】

Command: ['ip', 'addr', 'show', 'bond1', 'scope', 'global']

显示bond1的ip地址(去掉scope global)

Command: ['ip', 'route', 'list', 'dev', 'bond1', 'scope', 'global']

Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ip', 'link', 'set', 'brq0a807a08-33', 'up']

Command: ['ip', '-o', 'link', 'show', 'bond1']

Command: ['sudo', 'neutron-rootwrap', '/etc/neutron/rootwrap.conf', 'ip', 'link', 'set', 'tapddb826cd-f2', 'mtu', '1500']

Command: ['ip', '-o', 'link', 'show', 'brq0a807a08-33']

 

 

MTUMaximum Transmission Unit的缩写。 意思是网络上传送的最大数据包。 MTU的单位字节。 大部分网络设备的MTU1500

1byte=8bit 

 

日志看到这里,了解到系统对新建的虚拟设备增加了对应的过滤规则,但是没有看到对于虚拟设备和虚拟机是如何连接的介绍。

 

openstack是如何让物理节点和虚拟节点接力网络联系的?

当我在谷歌上搜索这个问题时,突然想起来我一直装虚拟机的经过。平时我在oa或者测试环境安装suse的虚拟机时,也需要配置网络。首先是虚拟机的安装,这是直接依赖于图形化界面安装好的,中间可以设备虚拟网卡的数量。之后安装系统时,就可以根据虚拟网卡配置ip地址。

我想我提出这个问题的原因是之前给docker容器配置网络就是用pipework,由此想到openstack是不是也是通过网络设置的。思维转过弯之后,我现在意思到,openstack给虚拟机分配网络应该和我手动创建虚拟机然后设置网络是一样的,只不过openstack完全实现了自动化。

现在再想想openstack是如何将tap和虚拟机建立联系的,显示是生成虚拟设备后,openstack需要做的只有两件事,一件是分配ip,另一件是就是制定iptables过滤规则(或者叫ebtables)。

还有前面我提到的vnet和vxlan,我想他们也不是openstack创建的,而是我们手工在这台物理机上创建虚拟机时创建的。这两个名字开头的虚拟网络设备和openstack压根没有半点关系。(不对,看了3号物理机和11号控制节点,即便vnet可能没有关系,但是vxlan一定是有关系的。)

【有一点可以确定了:vnet和openstack没有半点关系,他是我在手动创建虚拟机时生成的虚拟网卡设备,当我把这两个虚拟机停掉后,就看到vnet。】

 

现在可以想象一下openstack是如何给虚拟机分配网络的了:首先是创建虚拟机,然后某台物理节点检测到多了个虚拟网卡,这个虚拟网卡的名字已经生成,叫tap******之类,然后物理机给这台tap设置ebtables过滤规则。虚拟机的ip和路由应当是在虚拟机内部设置的。因此我在物理节点上看不到经过。

 

 

【默认安全组,oa环境无法创建虚拟机】

原因是protect安全组的入口规则有问题,修改之后就正常了。

【将dashboard上所有虚拟机终止后,为什么在物理机上还是能看到实例?难道openstack不止一个?】

 

新的疑问,tap虚拟设备和vxlan的关系是什么?vxlan是如何建立的和tap建立过程相同吗?或者和vlan建立过程相同吗?


补充:

1、初步确定vxlan和虚拟局域网有关,就是如果创建的虚拟机属于内网,那么就关联到vxlan。

2、在dashboard上大量新建局域网虚拟机发现,虚拟机并非只会建在含有vxlan设备的物理节点上。但是在含非vxlan物理节点上建立的虚拟机却没有启动成功。

3、可以确定只要虚拟机private环境,而且建在04没有vxlan的节点上,虚拟机就一定不能启动成功

【这说明,vxlan是和本地局域网有关的,也就是在内网才会有vxlan。那么为什么2,3,5,6都有vxlan链,但是4号节点却没有vxlan,这应该是和控制节点刚刚和物理节点建立联系时说起。同时表示,vxlan是在最开始物理机和控制节点建立联系时创建的,现在需要问的就是如何将控制节点和物理机关联起来,或者修改之间的关系】


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值