サブネットプールは Kilo リリース以降で利用可能です。これは簡単な機能ですが、Networking サービス利用時のワークフローが大きくよくなる可能性があります。また、 OpenStack Networking に新しい他の機能を作り込む際の基本的な部品としても使われます。
To see if your cloud has this feature available, you can check that it is listed in the supported aliases. You can do this with the OpenStack client.
$ openstack extension list | grep subnet_allocation
| Subnet Allocation | subnet_allocation | Enables allocation of subnets
from a subnet pool |
Kilo より前では、 Networking にはサブネット作成時に使用するアドレスを自動的に割り当てる方法がありませんでした。サブネットを作るためには、自分のアドレスをシステムの助けなしに指定する必要がありました。この方法が意味のあるユースケースもありますが、以下のあげるような機能が求められる場合には、サブネットプールは役にたつことでしょう。
まず、あなたが使用するアドレスプールを Neutron の管理に任せてしまうと、いいとは思いませんか?サブネットを作る必要がある際に、プールからアドレスを割り当ててもらうように依頼するだけです。どのアドレスプールをすでに使用しているか、どのアドレスがあなたが使用できるアドレスプールに含まれているか、といったことを気にかける必要はありません。サブネットプールがこうしたことをやってくれます。
2 つめとして、サブネットプールはプロジェクトにまたがってアドレスを管理できます。アドレスは重複しないことが保証されます。アドレスが外部から到達可能なプールから割り当てられた場合、すべてのプロジェクトが 外部から到達可能 で一意なアドレスを持つことになります。この機能は以下のシナリオで有用です。
サブネットプールはアドレスのプールを管理し、そこからサブネットを割り当てできます。同じサブネットプールから割り当てられた任意のサブネット間で重複がないことが保証されます。
OpenStack クラウドの通常プロジェクトは、自分用のサブネットプールを作成し、これを使って自分用のアドレスプールを管理できます。これを行うのに、管理者権限は全く不要です。あなたのプールは他のプロジェクトには一切見えません。
管理者の場合、任意の通常プロジェクトが利用可能なプールを作成できます。共有リソースの場合には、クォータ機構を使って利用を調停します。
サブネットプールには、 Neutron の他のクォータとは少し違ったクォータ機構があります。 Neutron の他のクォータは、あるオブジェクトの個々のインスタンス数を数え、クォータと比較します。ルーター、ネットワーク、ポートなどを作成する度に、自分のクォータから 1 つ消費されます。
サブネットの場合、リソースは IP アドレス空間です。あるサブネットが他のサブネットよりも多くのアドレス空間を持つ場合もあります。例えば、 203.0.113.0/24 は 1 つのサブネットで 256 個のアドレスを使用しますが、 198.51.100.224/28 は 16 個のアドレスしか使用しません。アドレス空間が限られている場合、クォータ機構によりアドレス空間の効率的な利用が可能になります。
IPv4 の場合、 default_quota を使って、あるプロジェクトがプールから取得できるアドレスの絶対数を設定できます。例えば、クォータが 128 の場合、 203.0.113.128/26 と 203.0.113.224/28 を確保し、将来さらに 48 個のアドレスを確保することができます。
IPv6 の場合は少し違います。この場合、 1 つ 1 つのアドレスを数えるのは現実的ではありません。途方もなく大きな数字になるのを避けるため、クォータは割り当て可能な /64 サブネットの数で表現されます。例えば、 default_quota が 3 の場合、 2001:db8:c18e:c05a::/64 と 2001:db8:221c:8ef3::/64 を確保し、将来さらにこの /64 のプレフィックスをもう 1 つ確保することができます。
Mitaka リリースから、デフォルトのサブネットプールを指定できるようになりました。この機能は新しい機能拡張により提供されます。
$ openstack extension list | grep default-subnetpools
| Default Subnetpools | default-subnetpools | Provides ability to mark
and use a subnetpool as the default |
管理者は、サブネットプールにデフォルトであるというマークをつけることができます。各アドレスファミリーにつき 1 つのプールをデフォルトとして指定できます。
$ openstack subnet pool set --default 74348864-f8bf-4fc0-ab03-81229d189467
If there is a default, it can be requested by passing
--use-default-subnetpool
instead of
--subnet-pool SUBNETPOOL
.
Kilo 以降の Neutron を使った OpenStack を使用できるのであれば、この機能をすぐに使うことができます。やってみましょう。以下のコマンドはすべて IPv6 アドレスでも同じように動きます。
まず、管理者で、共有サブネットプールを作成します。
$ openstack subnet pool create --share --pool-prefix 203.0.113.0/24 \
--default-prefix-length 26 demo-subnetpool4
+-------------------+--------------------------------+
| Field | Value |
+-------------------+--------------------------------+
| address_scope_id | None |
| created_at | 2016-12-14T07:21:26Z |
| default_prefixlen | 26 |
| default_quota | None |
| description | |
| headers | |
| id | d3aefb76-2527-43d4-bc21-0ec253 |
| | 908545 |
| ip_version | 4 |
| is_default | False |
| max_prefixlen | 32 |
| min_prefixlen | 8 |
| name | demo-subnetpool4 |
| prefixes | 203.0.113.0/24 |
| project_id | cfd1889ac7d64ad891d4f20aef9f8d |
| | 7c |
| revision_number | 1 |
| shared | True |
| updated_at | 2016-12-14T07:21:26Z |
+-------------------+--------------------------------+
The default_prefix_length
defines the subnet size you will get
if you do not specify --prefix-length
when creating a subnet.
IPv6 についても全く同じことを行うと、 2 つのサブネットプールができます。これらのサブネットプールは通常のプロジェクトから参照できます (この出力は見やすくするため少し省略しています)。
$ openstack subnet pool list
+------------------+------------------+--------------------+
| ID | Name | Prefixes |
+------------------+------------------+--------------------+
| 2b7cc19f-0114-4e | demo-subnetpool | 2001:db8:a583::/48 |
| f4-ad86-c1bb91fc | | |
| d1f9 | | |
| d3aefb76-2527-43 | demo-subnetpool4 | 203.0.113.0/24 |
| d4-bc21-0ec25390 | | |
| 8545 | | |
+------------------+------------------+--------------------+
このサブネットプールを使ってみましょう。プールからサブネットを作るのは簡単です。
$ openstack subnet create --ip-version 4 --subnet-pool \
demo-subnetpool4 --network demo-network1 demo-subnet1
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| allocation_pools | 203.0.113.194-203.0.113.254 |
| cidr | 203.0.113.192/26 |
| created_at | 2016-12-14T07:33:13Z |
| description | |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | 203.0.113.193 |
| headers | |
| host_routes | |
| id | 8d4fbae3-076c-4c08-b2dd-2d6175115a5e |
| ip_version | 4 |
| ipv6_address_mode | None |
| ipv6_ra_mode | None |
| name | demo-subnet1 |
| network_id | 6b377f77-ce00-4ff6-8676-82343817470d |
| project_id | cfd1889ac7d64ad891d4f20aef9f8d7c |
| revision_number | 2 |
| service_types | |
| subnetpool_id | d3aefb76-2527-43d4-bc21-0ec253908545 |
| updated_at | 2016-12-14T07:33:13Z |
+-------------------+--------------------------------------+
プールから特定のサブネットを割り当てることもできます。プールのプレフィックス内に収まるサブネットを指定する必要があります。サブネットがまだ割り当てられていなければ、要求は成功します。サブネットプールから IP バージョンは推定できるので、 IP バージョンの指定は省略できます。
$ openstack subnet create --subnet-pool demo-subnetpool4 \
--network demo-network1 --subnet-range 203.0.113.128/26 subnet2
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| allocation_pools | 203.0.113.130-203.0.113.190 |
| cidr | 203.0.113.128/26 |
| created_at | 2016-12-14T07:27:40Z |
| description | |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | 203.0.113.129 |
| headers | |
| host_routes | |
| id | d32814e3-cf46-4371-80dd-498a80badfba |
| ip_version | 4 |
| ipv6_address_mode | None |
| ipv6_ra_mode | None |
| name | subnet2 |
| network_id | 6b377f77-ce00-4ff6-8676-82343817470d |
| project_id | cfd1889ac7d64ad891d4f20aef9f8d7c |
| revision_number | 2 |
| service_types | |
| subnetpool_id | d3aefb76-2527-43d4-bc21-0ec253908545 |
| updated_at | 2016-12-14T07:27:40Z |
+-------------------+--------------------------------------+
プールを使い切った場合は、プレフィックスを追加します。
$ openstack subnet pool set --pool-prefix \
198.51.100.0/24 demo-subnetpool4
$ openstack subnet pool show demo-subnetpool4
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| address_scope_id | None |
| created_at | 2016-12-14T07:21:26Z |
| default_prefixlen | 26 |
| default_quota | None |
| description | |
| id | d3aefb76-2527-43d4-bc21-0ec253908545 |
| ip_version | 4 |
| is_default | False |
| max_prefixlen | 32 |
| min_prefixlen | 8 |
| name | demo-subnetpool4 |
| prefixes | 198.51.100.0/24, 203.0.113.0/24 |
| project_id | cfd1889ac7d64ad891d4f20aef9f8d7c |
| revision_number | 2 |
| shared | True |
| updated_at | 2016-12-14T07:30:32Z |
+-------------------+--------------------------------------+
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.