openstack neutron详解(Openstack组件 Neutron 资源模型 Subnet 概述)

1、Subnet模型属性:

Subnet(子网)模型拥有几个基本的参数,cidr(子网的网段)、ip_version(IP版本)、gateway_ip(网关地址)和host_routes(路由信息)。

其中,gateway_ip是这个子网的默认网关IP。host_routes存储着这个Subnet的路由信息。它是一个数组,每个元组的形式是:[destination,nexthop]。destination表达目的地的CIDR,nexthop表达下一跳(网关)的IP地址,举例如下:

“host_routes”:[ { “destination”:”200.50.50.0大流量卡/24″, “nexthop”:”200.10.10.1” }, { “destination”:”200.50.60.0/24”, “nexthop”:”200.10.20.1” } ]

表面上看,Subnet只是代表着纯逻辑资源,是一批IP地址的集合,但是实际上,每一个IP背后都代表着一个实体,最典型的就是VM(虚拟机)。VM的话就会涉及2个问题:

1)虚拟机的IP地址如何分配。

2)虚拟机的DNS是什么。

因此,Subnet模型除了标识CIDR、IP version这样的纯逻辑资源以外大流量卡,还蕴含了管理的功能。这些管理功能又称为IP的核心服务。

2、IP核心网络服务

IP核心网络服务(IP CoreNetwork Services),又称DDI服务,包括:DNS、DHCP、IPAM。

这三个服务是所有IP网络及应用系统得以顺利运行的基础。从字面上看,Subnet模型与DDI直接相关的字段。

dns_nameservers是指定一批DNS Server(地址),而DHCP,却仅仅是一个bool变量enable_dhcp,并没有指定DCHP Server地址。这是因为,当enable_dhcp=True时,Neutron会自动创建一个DCHP Server。

DHCP可以配置一个IP地址池(大流量卡Subnet的字段allocation_pools),如果没有配置,DHCP会以cidr(同样是Subnet的字段)作为标准地址池,当然它会去除掉保留地址(默认是gateway_ip)。

有了DNS,有了DHCP,这个还不够。实际的组网中,一般还有一个IPAM(IP Address Management,IP地址管理)系统。Subnet这个Model,与IPAM相关的字段是subnetpool_id。

这里,我们看到,DHCP的allocation_pools,与IPAM的subnetpool_id实际上是重复的。不过DHCP与IPAM都是可选服务,租户在创建一个Subnet时,可以选择其中一个服大流量卡务,也可以都不选择(VM的IP地址,租户自己配置)。

当选择IPAM服务时,仅仅是一个subnetpool_id(Subnet资源池ID)是不够的,它背后还必须真的有一个Subnet资源池支撑。

3、Subnet资源池

Subnet资源池(Subnet Pool)是OpenStack Kilo版本加入的特性,从模型角度讲,它是一个独立的模型,模型名是subnetpool。Subnet模型中的subnetpool_id字段关联的就是这个模型。

Subnet Pool中的Subnet与Neutron的模型Subnet不是同一个概念,前者指的是单纯的子网网段,后者除了包含子网网段的信息以外,还包含其他内容。大流量卡

子网网段资源池目的是为了方便子网网段的管理。模型Subnet模型中有两个字段与子网网段相关,分别是cidr和ip_version。简单地说,资源池就是定义一个大的网段(含IP版本),模型Subnet就是从中分配一个小的网段。当我们使用命令行(或者RESTful API)创建一个Subnet时,如果传递一个参数subnetpool_id,比如:

openstack subnet create ——subnet-pool demo-subnetpool4 ………

Neutron会从资源池中分配一段子网给这个待创建的Subnet实例。

分为两部分:子网网段信息、子网网段分配规则。

表示子网网段信息的字段是p大流量卡refixes,它是一个数组,其中每一个元素都是一个IP地址前缀,这些地址前缀可以是IPv4,也可以是IPv6,举例如下:

“prefixes”:[ “10.10.0.0/21”, “192.168.0.0/16”, “2001:db8:0:2:/64”, “2001:db8:/63” ],

其余的字段都与子网网段分配规则相关。当一个Subnet期望从资源池中分配一个网段时,可以通过命令行或者RESTful API发送一个请求。在发送请求时,可以传入参数cidr或者prefixlen。这两个参数并没有体现在Subnet大流量卡 Pool模型中,而是体现在函数(或者命令行)调用的参数中。

cidr目的非常直接:就是期望使用这个网段。不过这个参数一般不使用,因为使用资源池的目的就是希望它能做好Subnet的管理,现在还需要租户指定这个参数有点违背资源池的初衷。(当然,特殊情况下,这个参数还是需要的)。

prefixlen指定了希望分配的子网的大小。这个比指定cidr好多了:我这个子网就要这么多IP地址,剩下的你资源池看着办。我们举一个例子说明这个字段:假设资源池的网段为:prefixes=[“10.10.0.0/16”],用户传入的请求参数为:prefixlen=24,这就意味着,从10.10.0.0/16这个网段(一共6大流量卡5536个IP地址)中选取256个IP地址。

如果请求参数中prefixlen也不指定,那么资源池就会采用default_prefixlen这个字段来给请求者分配子网网段。default_prefixlen的默认值是min_prefixlen。并不是说用户传入的每个prefixlen值都是合法的,它必须满足资源池的约束条件。这个约束条件就是min_prefixlen和max_prefixlen,也就是说,prefixlen(或者cidr中的前缀长度)必须在这个范围内:[min_prefixlen,max_prefixlen]。min_prefixlen的默认值是8(IPv4)或者64(IPv6)大流量卡,max_prefixlen的默认值是32(IPv4)或者128(IPv6)。

资源池还有一个约束条件,那就是default_quota这个字段。这个字段表明一个Project最多能申请的IP个数,它是一个整数值。对于IPv4而言,default_quota表明的是32位掩码的子网网段的个数(所谓32位掩码的子网网段,其实就是一个IP地址);对于IPv6而言,default_quota表明的是64位掩码的子网网段的个数。default_quota是一个可选字段,它的值也可以不设置,也没有默认值。


友情提醒: 请添加客服微信进行免费领取流量卡!
QQ交流群:226333560 站长微信:qgzmt2

原创文章,作者:sunyaqun,如若转载,请注明出处:https://www.dallk.cn/55122.html

(0)
sunyaqunsunyaqun
上一篇 2024年7月1日
下一篇 2024年7月1日

相关推荐

发表回复

登录后才能评论