资源标签

各种虚拟网络资源支持标签,供外部系统或网络服务 API 的任何其他客户端使用。

所有支持标准属性的资源都可用于标记。这包括

  • networks

  • 子网

  • 子网池

  • ports

  • 路由器

  • 浮动 IP

  • 日志

  • 安全组

  • 安全组规则

  • 策略

  • 中继

  • 网络段范围

用例

以下用例指的是向网络添加标签,但同样适用于任何其他受支持的网络服务资源

  1. 能够将不同 OpenStack 位置的不同网络映射到逻辑上相同的网络(用于多站点 OpenStack)。

  2. 能够在混合环境中将来自不同管理/编排系统的 ID 映射到 OpenStack 网络。例如,在 Kuryr 项目中,Docker 网络 ID 被映射到 Neutron 网络 ID。

  3. 能够让部署工具利用标签。

  4. 能够标记有关提供商网络的信息(例如,高带宽、低延迟等)。

使用标签进行过滤

API 允许搜索/过滤 GET /v2.0/networks API。支持以下查询参数

  • tags

  • tags-any

  • not-tags

  • not-tags-any

要请求具有单个标签的网络列表,tags 参数应设置为所需的标签名称。示例

GET /v2.0/networks?tags=red

要请求具有两个或多个标签的网络列表,tags 参数应设置为标签列表,用逗号分隔。在这种情况下,必须同时存在所有给定的标签,网络才能包含在查询结果中。一个返回具有“red”和“blue”标签的网络示例

GET /v2.0/networks?tags=red,blue

要请求具有给定标签列表中的一个或多个标签的网络列表,tags-any 参数应设置为标签列表,用逗号分隔。在这种情况下,只要存在一个给定的标签,网络就会包含在查询结果中。一个返回具有“red”或“blue”标签的网络示例

GET /v2.0/networks?tags-any=red,blue

要请求不具有一个或多个标签的网络列表,not-tags 参数应设置为标签列表,用逗号分隔。在这种情况下,只有不具有任何给定标签的网络才会包含在查询结果中。一个返回不具有“red”或“blue”标签的网络示例

GET /v2.0/networks?not-tags=red,blue

要请求不具有给定标签列表中的至少一个标签的网络列表,not-tags-any 参数应设置为标签列表,用逗号分隔。在这种情况下,只有不具有给定标签中的至少一个标签的网络才会包含在查询结果中。一个返回不具有“red”标签或不具有“blue”标签的网络示例

GET /v2.0/networks?not-tags-any=red,blue

可以将 tagstags-anynot-tagsnot-tags-any 参数组合起来构建更复杂的查询。示例

GET /v2.0/networks?tags=red,blue&tags-any=green,orange

上面的示例返回具有“red”和“blue”标签,以及“green”和“orange”标签中的至少一个标签的任何网络。

复杂的查询可能包含矛盾的参数。示例

GET /v2.0/networks?tags=blue&not-tags=blue

在这种情况下,我们应该让网络服务找到这些网络。显然,没有这样的网络,服务将返回一个空列表。

用户流程

向资源添加标签

$ openstack network set --tag red ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field                     | Value                                                                      |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up            | UP                                                                         |
| availability_zone_hints   |                                                                            |
| availability_zones        | nova                                                                       |
| created_at                | 2018-07-11T09:44:50Z                                                       |
| description               |                                                                            |
| dns_domain                | None                                                                       |
| id                        | ab442634-1cc9-49e5-bd49-0dac9c811f69                                       |
| ipv4_address_scope        | None                                                                       |
| ipv6_address_scope        | None                                                                       |
| is_default                | None                                                                       |
| is_vlan_transparent       | None                                                                       |
| mtu                       | 1450                                                                       |
| name                      | net                                                                        |
| port_security_enabled     | True                                                                       |
| project_id                | e6710680bfd14555891f265644e1dd5c                                           |
| provider:network_type     | vxlan                                                                      |
| provider:physical_network | None                                                                       |
| provider:segmentation_id  | 1047                                                                       |
| qos_policy_id             | None                                                                       |
| revision_number           | 5                                                                          |
| router:external           | Internal                                                                   |
| segments                  | None                                                                       |
| shared                    | False                                                                      |
| status                    | ACTIVE                                                                     |
| subnets                   |                                                                            |
| tags                      | red                                                                        |
| updated_at                | 2018-07-16T06:22:01Z                                                       |
+---------------------------+----------------------------------------------------------------------------+

从资源中删除标签

$ openstack network unset --tag red ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field                     | Value                                                                      |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up            | UP                                                                         |
| availability_zone_hints   |                                                                            |
| availability_zones        | nova                                                                       |
| created_at                | 2018-07-11T09:44:50Z                                                       |
| description               |                                                                            |
| dns_domain                | None                                                                       |
| id                        | ab442634-1cc9-49e5-bd49-0dac9c811f69                                       |
| ipv4_address_scope        | None                                                                       |
| ipv6_address_scope        | None                                                                       |
| is_default                | None                                                                       |
| is_vlan_transparent       | None                                                                       |
| mtu                       | 1450                                                                       |
| name                      | net                                                                        |
| port_security_enabled     | True                                                                       |
| project_id                | e6710680bfd14555891f265644e1dd5c                                           |
| provider:network_type     | vxlan                                                                      |
| provider:physical_network | None                                                                       |
| provider:segmentation_id  | 1047                                                                       |
| qos_policy_id             | None                                                                       |
| revision_number           | 5                                                                          |
| router:external           | Internal                                                                   |
| segments                  | None                                                                       |
| shared                    | False                                                                      |
| status                    | ACTIVE                                                                     |
| subnets                   |                                                                            |
| tags                      |                                                                            |
| updated_at                | 2018-07-16T06:32:11Z                                                       |
+---------------------------+----------------------------------------------------------------------------+

替换资源上的所有标签

$ openstack network set --tag red --tag blue ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field                     | Value                                                                      |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up            | UP                                                                         |
| availability_zone_hints   |                                                                            |
| availability_zones        | nova                                                                       |
| created_at                | 2018-07-11T09:44:50Z                                                       |
| description               |                                                                            |
| dns_domain                | None                                                                       |
| id                        | ab442634-1cc9-49e5-bd49-0dac9c811f69                                       |
| ipv4_address_scope        | None                                                                       |
| ipv6_address_scope        | None                                                                       |
| is_default                | None                                                                       |
| is_vlan_transparent       | None                                                                       |
| mtu                       | 1450                                                                       |
| name                      | net                                                                        |
| port_security_enabled     | True                                                                       |
| project_id                | e6710680bfd14555891f265644e1dd5c                                           |
| provider:network_type     | vxlan                                                                      |
| provider:physical_network | None                                                                       |
| provider:segmentation_id  | 1047                                                                       |
| qos_policy_id             | None                                                                       |
| revision_number           | 5                                                                          |
| router:external           | Internal                                                                   |
| segments                  | None                                                                       |
| shared                    | False                                                                      |
| status                    | ACTIVE                                                                     |
| subnets                   |                                                                            |
| tags                      | blue, red                                                                  |
| updated_at                | 2018-07-16T06:50:19Z                                                       |
+---------------------------+----------------------------------------------------------------------------+

清除资源上的标签

$ openstack network unset --all-tag ab442634-1cc9-49e5-bd49-0dac9c811f69
$ openstack network show net
+---------------------------+----------------------------------------------------------------------------+
| Field                     | Value                                                                      |
+---------------------------+----------------------------------------------------------------------------+
| admin_state_up            | UP                                                                         |
| availability_zone_hints   |                                                                            |
| availability_zones        | nova                                                                       |
| created_at                | 2018-07-11T09:44:50Z                                                       |
| description               |                                                                            |
| dns_domain                | None                                                                       |
| id                        | ab442634-1cc9-49e5-bd49-0dac9c811f69                                       |
| ipv4_address_scope        | None                                                                       |
| ipv6_address_scope        | None                                                                       |
| is_default                | None                                                                       |
| is_vlan_transparent       | None                                                                       |
| mtu                       | 1450                                                                       |
| name                      | net                                                                        |
| port_security_enabled     | True                                                                       |
| project_id                | e6710680bfd14555891f265644e1dd5c                                           |
| provider:network_type     | vxlan                                                                      |
| provider:physical_network | None                                                                       |
| provider:segmentation_id  | 1047                                                                       |
| qos_policy_id             | None                                                                       |
| revision_number           | 5                                                                          |
| router:external           | Internal                                                                   |
| segments                  | None                                                                       |
| shared                    | False                                                                      |
| status                    | ACTIVE                                                                     |
| subnets                   |                                                                            |
| tags                      |                                                                            |
| updated_at                | 2018-07-16T07:03:02Z                                                       |
+---------------------------+----------------------------------------------------------------------------+

从网络获取带有标签过滤器的资源列表。这些网络是:带有“red”标签的 test-net1,带有“red”和“blue”标签的 test-net2,带有“red”、“blue”和“green”标签的 test-net3,以及带有“green”标签的 test-net4。

使用 tags 过滤器获取资源列表

$ openstack network list --tags red,blue
+--------------------------------------+-----------+---------+
| ID                                   | Name      | Subnets |
+--------------------------------------+-----------+---------+
| 8ca3b9ed-f578-45fa-8c44-c53f13aec05a | test-net3 |         |
| e736e63d-42e4-4f4c-836c-6ad286ffd68a | test-net2 |         |
+--------------------------------------+-----------+---------+

使用 any-tags 过滤器获取资源列表

$ openstack network list --any-tags red,blue
+--------------------------------------+-----------+---------+
| ID                                   | Name      | Subnets |
+--------------------------------------+-----------+---------+
| 30491224-3855-431f-a688-fb29df004d82 | test-net1 |         |
| 8ca3b9ed-f578-45fa-8c44-c53f13aec05a | test-net3 |         |
| e736e63d-42e4-4f4c-836c-6ad286ffd68a | test-net2 |         |
+--------------------------------------+-----------+---------+

使用 not-tags 过滤器获取资源列表

$ openstack network list --not-tags red,blue
+--------------------------------------+-----------+---------+
| ID                                   | Name      | Subnets |
+--------------------------------------+-----------+---------+
| 30491224-3855-431f-a688-fb29df004d82 | test-net1 |         |
| cdb3ed08-ca63-4090-ba12-30b366372993 | test-net4 |         |
+--------------------------------------+-----------+---------+

使用 not-any-tags 过滤器获取资源列表

$ openstack network list --not-any-tags red,blue
+--------------------------------------+-----------+---------+
| ID                                   | Name      | Subnets |
+--------------------------------------+-----------+---------+
| cdb3ed08-ca63-4090-ba12-30b366372993 | test-net4 |         |
+--------------------------------------+-----------+---------+

限制

不支持名称包含逗号的标签进行过滤。因此,请勿将此类标签名称放在资源上。

未来支持

在未来的版本中,网络服务可能会支持为其他资源设置标签。