Openstack安全组与conntrack简介(2)

1.     优化zone的设置

[1]中最后部分介绍到为了实现租户的conntrack隔离,neutron对conntrack entry管理时增加了一个zone属性,zone的值设置为虚拟机localvlan tag。相同网络的两个虚拟机如果被创建在同一计算节点,则这两个虚拟机使用的port vlan tag相同。同一个计算节点上运行的不同网络的虚拟机其vlan tag不同。

Openstack安全组与conntrack简介(2)_第1张图片

图1

如图1,三个虚拟机运行在同一个计算节点,使用ovs-vsctl show命令查看虚拟机使用的port的vlan tag信息。虚拟机vm1-1(1.1.1.11)和vm1-2(1.1.1.12)使用vlan tag 44。虚拟机vm2-1(2.2.2.4)使用vlan tag 30。虚拟机发出的报文到达计算节点的br-int桥进行Normal转发时,vlantag实现了不同网络的隔离。

 Openstack安全组与conntrack简介(2)_第2张图片Openstack安全组与conntrack简介(2)_第3张图片

虽然conntrack entry使用zone做到了网络隔离,但是在实际使用中仍存在问题。由于相同网络使用相同的zone值,图1中虚拟机vm1-1vm1-2通信时共享conntrack entry。

 

如果vm1-2希望连接vm1-1并没有监听的端口,vm1-1会向vm1-2发送有RST标识的refuse报文。此RST报文到达vm1-1连接的linuxbridge时,会删除二者通信的conntrack entry。报文要通过vm1-2连接的linuxbridge进入vm1-2时,由于conntrack entry已被删除,报文会被当作Invalid连接而直接被DROP。Vm1-2永远收不到refused报文,最终导致向vm1-1发送的连接请求由于超时而关闭[2]。

 

为解决此问题,conntrack entry中的zone值不再使用network的localvlan,而是对每个虚拟机使用的port分配一个zone值。这样,同一计算节点上同网络的虚拟机之间的通信,会产生两条conntrack entry。如图1中vm1-1ping vm1-2时,生成的conntrack entry为:

# conntrack -L -p icmp

icmp    1 29 src=1.1.1.11 dst=1.1.1.12 type=8 code=0 id=9740 src=1.1.1.12dst=1.1.1.11 type=0 code=0 id=9740 mark=0 zone=87 use=1

icmp    1 29 src=1.1.1.11 dst=1.1.1.12 type=8 code=0 id=9740 src=1.1.1.12dst=1.1.1.11 type=0 code=0 id=9740 mark=0 zone=88 use=1

conntrack v1.4.2 (conntrack-tools): 2 flowentries have been shown.

使用per port形式的zone后,当vm1-1向vm1-2发送RST标识的refuse报文时,只删除属于自身zone的conntrack entry,报文仍能够进入vm1-2。

 

2.     优化性能

1)回收zone

可以使用的zone空间有64K,所以当虚拟机被删除或port被删除都执行回收zone的操作是不必要的。可以等到zone空间被用尽后再回收,降低计算消耗[3]。

2)批量删除conntrack

当一次删除多个虚拟机(100个)时,大量的conntrack entry删除操作会导致其他port更新、创建阻塞。而要删除的conntrack entry中存在大量重复的entry。使用set而非list结构存放要被删除的conntrackentry能够剔除重复的entry,提升性能[4]。

 

 

 

参考文献:

[1] http://blog.csdn.net/bc_vnetwork/article/details/51350787

[2]https://ask.openstack.org/en/question/28300/iptables-invalid-rule-preventing-rst-packets-on-closed-ports-between-vms/

[3] https://review.openstack.org/#/c/215791/

[4] https://review.openstack.org/#/c/293239/

你可能感兴趣的:(openstack,云计算)