Neutron运营商网络和租户网络详解

时间:2024-03-16 20:50:33
由租户创建并且管理的网络,Neutron称之为租户网络。但是Openstack不是万能的,Neutron也不是万能的。还有很多网络不在Neutron管理范围内(Neutron称之为外部网络)。有时候,Neutron还需要创建一个网络来映射外部网络,这个网络,也称为运营商网络(Provider network)。
运营商网络和租户网络,从模型角度来说,都是Neutron的资源模型Network。两者的区别如下。
1 管理的权限与角色不同。简单地说,租户创建的网络叫租户网络,而运营商管理员(Administrator)创建的网络,就是运营商网络。
2 创建网络时,传入的参数不同。创建运营商网络时,需要传入provider:network_type、provider:physical_network、provider:segmentation_id三个参数,而创建租户网络时,没有办法传入这三个参数,它们是由Openstack在管理员配置的范围内自动分配的。
一 运营商网络的使用场景
Openstack是一个云环境,这句话反过来理解,如果遇到非云的服务,Openstack(以及Neutron)是无能为力的,或者说那不是它的管理范围。运营商网络使用示例如下:
Neutron运营商网络和租户网络详解
图中右边圆圈,表示一个企业内的一个部门的VLAN网络,它的VLAN ID=100。重要的是,这个网络内的计算机并不是虚拟机,也就是说,它们并不在Openstack(包括Neutron)的管理范围内。此时,如果这个部门如果要增加一批虚拟机,而且这些虚拟机也必须加入VLAN ID=100的这个VLAN中,那么就需要运营商网络登场了。
我们知道,在Openstack的模型中,虚拟机总要属于一个网络(严格地说,是虚拟机的端口要属于一个网络)。所以,在上述场景中,那些虚拟机如果要加入VLAN ID=100的那个网络,首先需要在Neutron中创建一个Network。
但是,这个Network的网络类型必须要与原来的网络(虚拟机要加入的网络)能够对应起来,也就是说:网络类型必须是VLAN,而且VLAN ID必须是100,这样那些虚拟机才能把原来的计算机互通,才能满足要求。
我们把上面这个例子,抽象一下,就可以得出运营商网络的一般化使用场景,如下图所示:
Neutron运营商网络和租户网络详解
Neutron创建了一个网络,如果这个网络只是为了映射(匹配)另外一个网络,而且这个被映射的网络不在Neutron的管理范围内,这样的场景就是运营商网络的一般化使用场景。Neutron创建的这个网络,也称为运营商网络。
这里所说的匹配,指的是网络类型和网络ID必须相同。网络ID的含义取决于网络类型。比如:如果网络类型是VLAN,那么网络ID就代表VLAN ID;如果网络类型是GRE,那么网络ID就代表GRE Key。
从某种意义上讲,运营商网络可以认为是运营商的某个物理网络在Openstack(Neutorn)上的延伸,这个物理网络的生命周期管理(创建、修改、销毁)不能作为单纯的服务提供给租户,只是由管理员作为基础设施的一部分来管理。这也是运营商网络之所以被称为运营商网络的原因。
二 运营商网络与租户网络的创建方法
运营商网络与租户网络相比,除了网络管理的角色权限不同以外,两者创建网络时所传入的参数也不相同。
运营商网络因为需要与另外一个网络相匹配,所以必须输入两个参数:provider:network_type(用以匹配另一个网络的网络类型)、provider:segmentation_id(用以匹配另一个网络的segmentation ID,或者说网络ID)。
租户网络与运营商网络相比,在创建时,是不能也没有必要输入这两个参数。但是,从Network Model中我们知道:除了“provider:network_type”,再也没有字段能表达网络类型:除了“provider:segmentation_id”,再也没有字段可以表达网络ID。也就是说,租户创建网络时,根本不能决定它的网络类型和网络ID。从管理的角度,运营商不应该希望而且也不能将这些细节(网络类型和网络ID)交与租户来管理;从商业性和易用性的角度来考虑,这是一种理念:租户只需关心服务,不必关心实现细节,这就是Neutron提供的网络即服务的精髓。
既然租户在创建租户网络时并不需要关心具体的参数细节,那么必须得由Neutron来补充这些细节以便完成租户网络的实现。Neutron是通过什么途径来补充这些细节呢?答案是配置文件。管理员通过配置文件告诉Neutron相关信息。这些信息配置在文件etc/neutron/plugins/ml2/ml2_conf.ini中,举例如下:
#etc/neutron/plugins/ml2/ml2_conf.ini
tenant_network_types=vxlan
[ml2_type_vxlan]
vni_ranges=1:1000
这个配置文件告诉Neutron:租户网络的网络类型是VXLAN,而相应的VNI是由Neutron根据一定的规则自动分配,不过VNI的取值要落在范围1~1000。