作者:张华 发表于:2014-03-04
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
(http://blog.csdn.net/quqi99 )
在multi-host特性(https://wiki.openstack.org/wiki/Neutron/L3_High_Availability_VRRP)未进入社区前的拓扑设计, 直接上图,
Some important configurations
/etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = flat,vlan,vxlan
mechanism_drivers = openvswitch
[ml2_type_vlan]
network_vlan_ranges = physnet1:1000:2999
[ml2_type_flat]
flat_networks = *
[ml2_type_vxlan]
vni_ranges = 1000:2000
vxlan_group = 239.1.1.1
/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini
[OVS]
integration_bridge = br-int
bridge_mappings = physnet1:br-phy
tunnel_id_ranges = 1000:2000
enable_tunneling = True
tunnel_bridge = br-tun
local_ip = 9.123.136.115
[agent]
tunnel_types = vxlan
vxlan_udp_port = 8472
/etc/neutron/l3_agent.ini
use_namespaces = True
auth_url = http://9.123.136.113:5000/v2.0/
external_network_bridge = br-phy
20140401更新, 同事曾问到的三个问题:
1, 虚机网络与外部网络同子网使用外部dhcp服务器的问题, 前提是人工先将这些IP规划好
2, 能否跨三层路由器创建openstack环境的问题, 使用遂道的gre是可以的. flat, vlan因为一二层不通是不可以的, vxlan如果禁用广播的话理论上应该也是可行的
3, openstack生成的虚机上再创建分布式openstack环境的问题, 如果使用的是flat的话理论上不会有任何问题, 因为它们的二层都是通的. 若用的是gre或才vxlan, 参考上述第2条, 若使用vlan会造成二层不通,从虚机出来的vlan流量会在物理机中被drop掉,当然,在同一样物理机没事。
20140806更新,若允许一个l3-agent能处理多个公网段的话,
1, 需要在l3-agent.ini中将gateway_external_network_id与external_network_bridge设置成空
gateway_external_network_id =
external_network_bridge =
2, /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini
bridge_mappings = physnet1:br-eth0,physnet2:br-eth1
3, 创建两个router(l3-agent的_process_routers会周期性处理这两个router关联的网关),各关联一个外部网络
neutron net-create ext_net_1 -- --router:external=True --provider:network_type flat --provider:physical_network physnet1
neutron subnet-create --allocation-pool start=192.168.100.102,end=192.168.100.126 --gateway 192.168.100.1 ext_net_1 192.168.100.100/24 --enable_dhcp=False
neutron router-interface-add $ROUTER_ID_1 $SUBNET_ID_1
neutron router-gateway-set $ROUTER_ID_1 $EXT_NET_ID_1
neutron net-create ext_net_2 -- --router:external=True --provider:network_type flat --provider:physical_network physnet2
neutron subnet-create --allocation-pool start=192.168.101.102,end=192.168.101.126 --gateway 192.168.101.1 ext_net_2 192.168.100.101/24 --enable_dhcp=False
neutron router-interface-add $ROUTER_ID_2 $SUBNET_ID_2
neutron router-gateway-set $ROUTER_ID_2 $EXT_NET_ID_2
4, ovs-l2-agent会读出bridge_mappings配置调用setup_physical_bridges方法,在事先就存在的两个外部桥br-eth0与br-eth1上与br-int通过peer设备连起来.
然后ovs-l2-agent会周期性将bridge-mappings参数汇报给DB.
5, ovs-ml2-mechanism-driver会从DB中取出bridge-mapping参数通过创建网络时指定的--provider:physical_network将相应的vlan ID取出来判断是否是vlan然后做binding不同的信息传回给nova
6, 这里使用的是ml2 plugin, 所以tenant_network_types = flat,vlan,vxlan可以同时支持多种类型。如果是grizzly版本仍然使用老的ovs plugin的话只能用tenant_network_type = gre支持一种类型的,并且它还有一个bug不支持flat因为如下代码, ml2 plugin不存在这个问题:
ovs_neutron_plugin.py
self.tenant_network_type = cfg.CONF.OVS.tenant_network_type
if self.tenant_network_type not in [svc_constants.TYPE_LOCAL,
svc_constants.TYPE_VLAN,
svc_constants.TYPE_GRE,
svc_constants.TYPE_VXLAN,
svc_constants.TYPE_NONE]