网络段范围¶
网络段范围服务通过 Neutron API 公开段范围管理。此外,它还引入了管理员能够全局或基于租户控制段范围的能力。
为什么你需要它¶
在 Stein 之前,网络段范围配置为 ML2 配置文件 ml2_conf.ini 中的一个条目,该条目是为租户网络分配而静态定义的,因此必须作为主机部署和管理的一部分进行管理。当常规租户用户创建网络时,Neutron 会从配置的段范围中分配下一个空闲分段 ID(VLAN ID、VNI 等)。只有管理员才能通过提供程序扩展分配特定的段 ID。
网络段范围管理服务提供以下管理员可能感兴趣的功能
查看 ML2 配置文件中运营商定义的网络段范围,以便管理员可以使用此信息进行段范围分配。
动态创建和分配网络段范围,这有助于保护底层网络连接映射的隐私或满足专用业务连接需求。这包括
全局共享网络段范围
租户特定的网络段范围
动态更新网络段范围,以便能够适应连接映射的变化。
在 ML2 配置文件
ml2_conf.ini中未定义任何段范围的情况下,动态管理网络段范围,并且在这种情况下无需重新启动 Neutron 服务器。检查网络段范围的可用性和使用情况统计信息。
工作原理¶
网络段范围管理一组可以从中分配自服务网络的段。网络段范围管理服务仅供管理员使用。
作为 OpenStack 云中的常规项目,您无法创建自己的网络段范围,只能以常规方式创建网络。
如果您是管理员,您可以创建一个网络段范围,该范围可以共享(即,任何常规项目都可以使用)或租户特定的(即,基于每个租户分配)。您的网络段范围对任何其他常规项目不可见。还支持其他 CRUD 操作。
当租户分配一个段时,它将首先从分配给该租户的可用段范围分配,然后从共享范围分配(如果无法进行租户特定的分配)。
默认网络段范围¶
一组 default 网络段范围是从 ML2 配置文件中定义的值创建的:network_vlan_ranges 用于 ml2_type_vlan,vni_ranges 用于 ml2_type_vxlan,tunnel_id_ranges 用于 ml2_type_gre 和 vni_ranges 用于 ml2_type_geneve。当 Neutron 服务器启动或重新启动时,它们将被重新加载。 default 网络段范围是 read-only 的,但在段分配时将被视为任何其他 shared 范围。
管理员可以使用默认网络段范围信息进行共享和/或基于租户的范围创建和分配。
示例配置¶
控制器节点¶
通过将
network_segment_range附加到neutron.conf文件中service_plugins列表中,启用网络段范围服务插件,在运行neutron-server服务的每个节点上。[DEFAULT] # ... service_plugins = ...,network_segment_range,...
重新启动
neutron-server服务。
验证服务操作¶
获取管理项目凭据并列出启用的扩展。
使用命令 openstack extension list --network 验证是否启用了扩展
Neutron Network Segment Range,别名为network-segment-range。
$ openstack extension list --network
+-------------------------------+-----------------------+-----------------------------------------------------------+
| Name | Alias | Description |
+-------------------------------+-----------------------+-----------------------------------------------------------+
| ...... | ...... | ...... |
+-------------------------------+-----------------------+-----------------------------------------------------------+
| Neutron Network Segment Range | network-segment-range | Provides support for the network segment range management |
+-------------------------------+-----------------------+-----------------------------------------------------------+
| ...... | ...... | ...... |
+-------------------------------+-----------------------+-----------------------------------------------------------+
工作流程¶
从高级别来看,网络段范围创建的基本工作流程如下
云管理员
列出现有的网络段范围。
根据需求创建共享或租户特定的网络段范围。
常规租户以常规方式创建网络。创建的网络将自动从分配给该租户的段范围或共享范围(如果未提供租户特定的范围)分配一个段。
从高级别来看,网络段范围更新的基本工作流程如下
云管理员
列出现有的网络段范围并确定需要更新的范围。
根据需求更新网络段范围。
常规租户以常规方式创建网络。创建的网络将自动从更新的网络段范围中分配一个段。
列出网络段范围或显示网络段范围¶
作为管理员,列出现有的网络段范围
$ openstack network segment range list
+--------------------------------------+-------------------+---------+--------+----------------------------------+--------------+------------------+------------+------------+
| ID | Name | Default | Shared | Project ID | Network Type | Physical Network | Minimum ID | Maximum ID |
+--------------------------------------+-------------------+---------+--------+----------------------------------+--------------+------------------+------------+------------+
| 20ce94e1-4e51-4aa0-a5f1-26bdfb5bd90e | | True | True | None | vxlan | None | 1 | 200 |
| 4b7af684-ec97-422d-ba38-8b9c2919ae67 | test_range_3 | False | False | 7011dc7fccac4efda89dc3b7f0d0975a | gre | None | 100 | 120 |
| a021e582-6b0f-49f5-90cb-79a670c61973 | | True | True | None | vlan | default | 1 | 100 |
| a3373630-969b-4ce9-bae7-dff0f8fa2f92 | test_range_2 | False | True | None | vxlan | None | 501 | 505 |
| a5707a8f-76f0-4f90-9aa7-c42bf54e94b5 | | True | True | None | gre | None | 1 | 150 |
| aad1b55b-43f1-46f9-8c35-85f270863ed6 | | True | True | None | geneve | None | 1 | 120 |
| e3233178-2866-4f40-b794-7c6fecdc8655 | test_range_1 | False | False | 7011dc7fccac4efda89dc3b7f0d0975a | vlan | group0-data0 | 11 | 11 |
+--------------------------------------+-------------------+---------+--------+----------------------------------+--------------+------------------+------------+------------+
网络段范围,Default 为 True 的是运营商在 ML2 配置文件中指定的范围。此外,还有管理员之前创建的共享和租户特定的网络段范围。
管理员还可以检查/显示网络段范围的详细信息(例如,可用性和使用情况统计信息)
$ openstack network segment range show test_range_1
+------------------+-----------------------------------------------+
| Field | Value |
+------------------+-----------------------------------------------+
| available | [] |
| default | False |
| id | e3233178-2866-4f40-b794-7c6fecdc8655 |
| location | None |
| maximum | 11 |
| minimum | 11 |
| name | test_range_1 |
| network_type | vlan |
| physical_network | group0-data0 |
| project_id | 7011dc7fccac4efda89dc3b7f0d0975a |
| shared | False |
| used | {u'7011dc7fccac4efda89dc3b7f0d0975a': ['11']} |
+------------------+-----------------------------------------------+
创建或更新网络段范围¶
作为管理员,根据您的需求创建网络段范围
$ openstack network segment range create --private --project demo \
--network-type vxlan --minimum 120 --maximum 140 test_range_4
+------------------+--------------------------------------+
| Field | Value |
+------------------+--------------------------------------+
| available | ['120-140'] |
| default | False |
| id | c016dcda-5bc3-4e98-b41f-6773e92fcd2d |
| location | None |
| maximum | 140 |
| minimum | 120 |
| name | test_range_4 |
| network_type | vxlan |
| physical_network | None |
| project_id | 7011dc7fccac4efda89dc3b7f0d0975a |
| shared | False |
| used | {} |
+------------------+--------------------------------------+
根据您的需求更新网络段范围
$ openstack network segment range set --minimum 100 --maximum 150 \
test_range_4
创建租户网络¶
现在,作为项目 demo(根据 https://docs.openstack.org/keystone/2025.2/install/keystone-openrc-rdo.html 获取 demo 项目的客户端环境脚本 demo-openrc),以常规方式创建网络。
$ source demo-openrc
$ openstack network create test_net
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2019-02-25T23:20:36Z |
| description | |
| dns_domain | |
| id | 39e5b95c-ad7a-40b5-9ec1-a4b4a8a43f14 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | False |
| is_vlan_transparent | None |
| location | None |
| mtu | 1450 |
| name | test_net |
| port_security_enabled | True |
| project_id | 7011dc7fccac4efda89dc3b7f0d0975a |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | None |
| qos_policy_id | None |
| revision_number | 2 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| updated_at | 2019-02-25T23:20:36Z |
+---------------------------+--------------------------------------+
然后,切换回管理员以检查创建的租户网络的段 ID。
$ source admin-openrc
$ openstack network show test_net
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2019-02-25T23:20:36Z |
| description | |
| dns_domain | |
| id | 39e5b95c-ad7a-40b5-9ec1-a4b4a8a43f14 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | False |
| is_vlan_transparent | None |
| location | None |
| mtu | 1450 |
| name | test_net |
| port_security_enabled | True |
| project_id | 7011dc7fccac4efda89dc3b7f0d0975a |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 137 |
| qos_policy_id | None |
| revision_number | 2 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| updated_at | 2019-02-25T23:20:36Z |
+---------------------------+--------------------------------------+
创建的租户网络将自动从分配给该租户的网络段范围(段 ID 范围为 120-140)分配一个段 ID 为 137 的段。
如果在分配给该租户的网络段范围内没有更多可用的段,则段分配将参考 shared 段范围,以检查是否有可用的段。如果仍然没有可用的段,则分配将失败,如下所示
$ openstack network create test_net
$ Unable to create the network. No tenant network is available for
allocation.
在这种情况下,建议管理员检查相关网络段范围的可用性和使用情况统计信息,以便采取进一步的措施(例如,扩大段范围等)。
已知限制¶
此服务插件目前仅与 ML2 核心插件兼容。但是,其他核心插件可以通过后续工作来支持此功能。