Friday, August 22, 2014

修改OpenStack中的vlan tag

在OpenStack中,用户网络的隔离可以用vlan、gre或者最新的vxlan来支持。
其中vlan模式目前是较为成熟和普遍的一种。
在vlan模式下,用户的vm流量在抵达openvswitch的时候,会被分配一个vlan id。相同vlan id的vm是互相可见的,不同的是彼此隔离的。
有时候,我们需要去手动修改这个vlan tag来完成一些诊断或测试工作。
首先,可以通过如下的命令来直接修改openvswitch端口上的vlan tag。
ovs-vsctl set port PORT_ID tag=xx
此时,查看端口的tag,确实已经被修改过了。
但是这样修改后,一旦发生流量,本地的ovs-agent会进行检查,发现不一致后会强行再同步回来。
因此,如果想要让修改能保持住,需要修改db中的记录信息。
在ovs_neutron表中,我们能看到有个ports子表,这张表记录了端口的信息,包括该端口上所应该对应的网络id。
如果想让某个端口的vlan tag跟另外一个端口的一致,只需要修改它的network_id为另外一个端口的network_id即可了。
那么,网络到vlan的tag的映射关系是存在哪里呢?
我们可以找到另外一个子表ovs_network_bindings,这里面记录了每个网络和所对应的分片信息。
vlan的tag,一般会跟segmentation_id保持一致。

最后,为了避免出现错误,最好还要更新subnets子表,这里面记录了每个subnet是属于那个network的。我们需要把自己端口所在的subnet更新到新的network上去。

注意,这样修改过之后,OpenStack会认为这个端口已经挂载到另外一个网络上了,在网络拓扑中会显示修改后的结果。

No comments:

Post a Comment