对于使用linux-bridge来实现网络虚拟化的情况:
如果需要使用vlan来作为provider,则,配置基本如下:
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
1 2 |
[linux_bridge] physical_interface_mappings = provider:eth0 |
/etc/neutron/plugin.ini
1 2 |
[ml2_type_vlan] network_vlan_ranges =provider:3000:3001 |
注意: network_vlan_ranges 是需要配置的, 这样在重启neutron服务的时候,会在neutron数据库中创建:
1 2 3 4 5 6 7 |
# mysql -uroot -pxxxx neutron -e 'select * from ml2_vlan_allocations;' +------------------+---------+-----------+ | physical_network | vlan_id | allocated | +------------------+---------+-----------+ | provider | 3000 | 0 | | provider | 3001 | 0 | +------------------+---------+-----------+ |
network_vlan_ranges 配置从注释来看,似乎可以不写vlan范围,其实不行,因为需要在表中创建条目,如果指定range大小会1000,则会一次产生1000个数据库记录;
另外,当我们从配置文件中把 provider 删除(或重命名)时,数据库中的条目并不被删除,而且会导致neutron服务启动失败,这时候,可以手动删除上述条目
当我们在provider上创建一个vlan id为3000的vlan provider时,会自动创建eth0.3000, 假如compute节点上部署openstack-controller(确切说,应该是neutron)虚拟机,由于该虚拟机也需要类似eth0.3000的接口,然而,宿主机只有一个网卡的情况下,如果虚拟机桥接的也是eth0的话,宿主机上创建了eth0.3000后,虚拟机将不再能收到vlan3000的流量了(被截流了),所以就比较麻烦,所以,建议neutron虚拟机不要部署在计算节点上;也或者还有其它的不愉快。
当然,如果确实没有其它的机器安装neutron虚拟机呢?其实办法还是有的:
openstack 中配置给provider的物理网卡使用veth1 就行, 这样的话,vm-neutron也能看到vlan3000的数据包了
问: openstack 中配置给provider的物理网卡使用veth0 行不?
根据veth对儿实现原理,veth0接收到的数据如果不是从veth1来的,肯定发送给veth1,否则发送给br0;假如,配置为veth0,则vm的数据发送给veth0.3000后,经过veth0会被发送给veth1,而不是br0,这不是我们想要的