行至水穷处 坐看“云”起时

☁️时代应用交付

F5 lbaas agent v1对vlan模式下始终配置为tagged vlan的问题解决-备忘

在配置文件里配置f5_external_physical_mappings = default:1.1:False 但是实际创建vlan还是用tagged方式 (F5 VE in openstack),是因为代码里对这个变量又设置了一遍缺省值default:1.1:True,导致外部配置实际没生效。 对于正常连OS外部F5的,一般都会用tagged方式,所以一般没什么问题(如果外部F5方式也要用非tagged vlan,则同样出问题)

 

解决方法:

  1. 最好不要直接修改代码里的缺省值,防止连接外部F5时候需要使用tagged。 所以如果环境不存在内外混合的情况,只需要简单的强行在l2.py 中 create vlan动作时候强制设置vlanid=0
  2. 如果环境存在混合,则按照以下方法:

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的修改一点代码去解决具体问题

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注