网络段范围

网络段范围服务通过 Neutron API 公开段范围管理。此外,它还引入了管理员能够全局或基于租户控制段范围的能力。

为什么你需要它

在 Stein 之前,网络段范围配置为 ML2 配置文件 ml2_conf.ini 中的一个条目,该条目是为租户网络分配而静态定义的,因此必须作为主机部署和管理的一部分进行管理。当常规租户用户创建网络时,Neutron 会从配置的段范围中分配下一个空闲分段 ID(VLAN ID、VNI 等)。只有管理员才能通过提供程序扩展分配特定的段 ID。

网络段范围管理服务提供以下管理员可能感兴趣的功能

  1. 查看 ML2 配置文件中运营商定义的网络段范围,以便管理员可以使用此信息进行段范围分配。

  2. 动态创建和分配网络段范围,这有助于保护底层网络连接映射的隐私或满足专用业务连接需求。这包括

    • 全局共享网络段范围

    • 租户特定的网络段范围

  3. 动态更新网络段范围,以便能够适应连接映射的变化。

  4. 在 ML2 配置文件 ml2_conf.ini 中未定义任何段范围的情况下,动态管理网络段范围,并且在这种情况下无需重新启动 Neutron 服务器。

  5. 检查网络段范围的可用性和使用情况统计信息。

工作原理

网络段范围管理一组可以从中分配自服务网络的段。网络段范围管理服务仅供管理员使用。

作为 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 范围。

管理员可以使用默认网络段范围信息进行共享和/或基于租户的范围创建和分配。

示例配置

控制器节点

  1. 通过将 network_segment_range 附加到 neutron.conf 文件中 service_plugins 列表中,启用网络段范围服务插件,在运行 neutron-server 服务的每个节点上。

    [DEFAULT]
    # ...
    service_plugins = ...,network_segment_range,...
    
  2. 重新启动 neutron-server 服务。

验证服务操作

  1. 获取管理项目凭据并列出启用的扩展。

  2. 使用命令 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 |
+-------------------------------+-----------------------+-----------------------------------------------------------+
| ......                        | ......                | ......                                                    |
+-------------------------------+-----------------------+-----------------------------------------------------------+

工作流程

从高级别来看,网络段范围创建的基本工作流程如下

  1. 云管理员

    • 列出现有的网络段范围。

    • 根据需求创建共享或租户特定的网络段范围。

  2. 常规租户以常规方式创建网络。创建的网络将自动从分配给该租户的段范围或共享范围(如果未提供租户特定的范围)分配一个段。

从高级别来看,网络段范围更新的基本工作流程如下

  1. 云管理员

    • 列出现有的网络段范围并确定需要更新的范围。

    • 根据需求更新网络段范围。

  2. 常规租户以常规方式创建网络。创建的网络将自动从更新的网络段范围中分配一个段。

列出网络段范围或显示网络段范围

作为管理员,列出现有的网络段范围

$ 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 |
+--------------------------------------+-------------------+---------+--------+----------------------------------+--------------+------------------+------------+------------+

网络段范围,DefaultTrue 的是运营商在 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 核心插件兼容。但是,其他核心插件可以通过后续工作来支持此功能。