在配置文件里配置f5_external_physical_mappings = default:1.1:False 但是实际创建vlan还是用tagged方式 (F5 VE in openstack),是因为代码里对这个变量又设置了一遍缺省值default:1.1:True,导致外部配置实际没生效。 对于正常连OS外部F5的,一般都会用tagged方式,所以一般没什么问题(如果外部F5方式也要用非tagged vlan,则同样出问题)
解决方法:
- 最好不要直接修改代码里的缺省值,防止连接外部F5时候需要使用tagged。 所以如果环境不存在内外混合的情况,只需要简单的强行在l2.py 中 create vlan动作时候强制设置vlanid=0
- 如果环境存在混合,则按照以下方法:
STEP 1. LBAAS agent文件按格式 f5_external_physical_mappings = default:1.1:False,vlannet:1.1:False 来设置,注意default部分不能丢(因为一个代码bug)
STEP 2. 不需要tag的网络,需要在openstack里创建vlan的时候设置provider:physical_network 属性,这个字段好似不能直接update,必须在命令行创建网络时候就带上,语法类似
neutron net-create vlan-test --shared --provider:network_type vlan --provider:segmentation_id 888 --provider:physical_network vlannet
root@controller:/home/mycisco# neutron net-show vlan-test
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | cf40dcac-c52d-4cb6-a092-f85b2487bab1 |
| name | vlan-test |
| provider:network_type | vlan |
| provider:physical_network | vlannet |
| provider:segmentation_id | 888 |
| router:external | False |
| shared | True |
| status | ACTIVE |
| subnets | 6b2bc5e7-90b3-4b38-b914-e66fde765c5a |
| tenant_id | 97915b10260b4fac858e4467a73eff51 |
+---------------------------+--------------------------------------+
这个provider:physical_network 值不能乱写,需要等于ml2_conf.ini里的设置
[ml2_type_vlan]
# (ListOpt) List of <physical_network>[:<vlan_min>:<vlan_max>] tuples
# specifying physical_network names usable for VLAN provider and
# tenant networks, as well as ranges of VLAN tags on each
# physical_network available for allocation as tenant networks.
#
# network_vlan_ranges =
# Example: network_vlan_ranges = physnet1:1000:2999,physnet2
network_vlan_ranges = vlannet:888:888,vlanmgmt:999:9991
STEP 3. 修改又一处bug. 修改l2.py 。(特别老的agent版本,修改/usr/lib/python2.7/dist-packages/neutron/services/loadbalancer/drivers/f5/bigip/ icontrol_driver.py中的 if network['provider:network_type'] == 'vlan' 逻辑部分)
将文件里的 _assure_device_network_vlan 方法下的 if tagged: 改为 if tagged ==’True’
# change [if tagged] to if [tagged == 'True']:
if tagged == 'True':
但其实,对于通过层次化端口绑定(例如华为等的openstack),上述第2种方法,不太适用,它内部是vxlan。 所以这种环境的,根据具体情形,ugly的修改一点代码去解决具体问题
文章评论