ESC トランクおよび VLAN 機能
VM には、ドメイン内のネットワークにアクセスするように設定された 1 つ以上のインターフェイスがある場合があります。たとえば、データネットワーク用の eth0 と管理ネットワーク用の eth1。
VM が複数のネットワークに接続する必要がある場合は、OpenStack トランキングを使用して構成を簡素化します。
(注) |
トランクと VLAN のサポートは、ESC 5.8 で実装されました。 |
ESC 展開では、VM グループで次のようにトランクを定義します。
<vm_group>
<name>...</name>
<image>...</image>
<flavor>...</flavor>
<interfaces>
<interface>
<nicid>0</nicid>
<network>parent-net</network>
</interface>
</interfaces>
<trunks>
<trunk>
<name>trunk-name</name>
<parent_nicid>0</parent_nicid>
<subports>
<subport>
<name>child-port</name>
<network>child-net</network>
<segmentation_type>vlan</segmentation_type>
<segmentation_id>500</segmentation_id>
</subport>
</subports>
</trunk>
</trunks>
</vm_group>
<trunks>
の下にある要素の説明
要素 | 必須 | 説明 |
トランク | y | トランクの下に複数のトランクを定義できます。 |
trunk | y | トランク定義をラップします。 |
> name | y | トランクの名前。これは OpenStack のトランクの名前になります。 |
> parent_nicid | y | これは、<interfaces> の下で定義されている NIC ID を指定します。 この例では 0。この NIC 用に作成されたポートは、トランクの親ポートとして使用されます。 |
> subports | y | 1 つ以上のサブポート要素のラッパー。 |
>> subport | y | サブポート定義をラップします。少なくとも 1 つのサブポートを定義する必要があります。 |
>>> name | y | サブポートの名前。これは、OpenStack のサブポートの名前になります。 |
>>> network | y | このポートに関連付ける OpenStack ネットワークの名前または ID。展開用に定義された外部またはエフェメラルネットワークである可能性があります。 |
>>> segmentation_type | n | デフォルトは vlan です。他の可能な値については、Openstack API のドキュメントを参照してください。 |
>>> segmentation_id | y | このサブポートに割り当てる VLAN ID。 |
トランクの作成:
REST または NETCONF インターフェイスを使用して、展開 XML を送信します。トランクは、ESC が VM を展開する前に作成されます。
<?xml version="1.0" encoding="UTF-8"?>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2022-06-08T13:39:14.609+00:00</eventTime>
<escEvent xmlns="http://www.cisco.com/esc/esc">
<status>SUCCESS</status>
<status_code>200</status_code>
<status_message>Trunk trunk-D120-vm1: CREATE_TRUNK completed successfully</status_message>
<event>
<type>CREATE_TRUNK</type>
</event>
</escEvent>
</notification>
HTTP コールバックメッセージ:
::ffff:127.0.0.1 - - [08/Jun/2022 13:39:09] "POST / HTTP/1.1" 200 2
------------------------------
REQUEST_METHOD: POST
SERVER_PORT: 9009
PATH_INFO: /
CONTENT_TYPE: application/json
HTTP_ESC_TRANSACTION_ID b9cce743-afd8-4eda-9303-5aaeccf4d400
HTTP_ESC_STATUS_MESSAGE * Trunk trunk-D120-vm1: CREATE_TRUNK completed successfully
HTTP_ESC_STATUS_CODE 200
DATA:
------------------------------
* <JSON config data>
---------------END DATA---------------
デイゼロ設定:
/etc/network/interfaces
ファイルでのサブインターフェイスの作成や、テスト用の IP リンクコマンドの実行など、VM でトランクを使用するにはネットワーク構成が必要です。ESC が VM を展開すると、トランクサブポート情報がデイゼロスクリプトで利用可能になります。通常のテンプレート変数に加えて、次の変数を使用できます。インデックスは、トランクの下で定義されているサブポートに基づきゼロから始まります。
-
SUBPORT_<index>_VLAN_ID
-
SUBPORT_<index>_MAC_ADDRESS
-
SUBPORT_<index>_ID
-
SUBPORT_<index>_NETWORK
-
SUBPORT_<index>_NAME
-
SUBPORT_<index> _NETWORK_ID
-
SUBPORT_<index>_SEGMENTATION_TYPE
構成データの例:
<config_data>
<configuration>
<dst>--user-data</dst>
<data>
#cloud-config
hostname: D120-vm2
password: secret
chpasswd: { expire: False }
ssh_pwauth: True
runcmd:
- [ sh, -xc, "ip link add link ens3 name ens3.$SUBPORT_0_VLAN_ID address $SUBPORT_0_MAC_ADDRESS type vlan id $SUBPORT_0_VLAN_ID" ]
- [ sh, -xc, "ip link set dev ens3.$SUBPORT_0_VLAN_ID up" ]
- [ sh, -xc, "dhclient -v ens3.$SUBPORT_0_VLAN_ID" ]
</data>
</configuration>
</config_data>
トランクのクエリ:
REST または NETCONF API を使用して、トランクとサブポートの展開データを利用できます。
<trunks>
<trunk>
<port_id>2f1dc1e6-a90a-4568-8c9e-965fda6c0cfb</port_id>
<parent_nicid>0</parent_nicid>
<id>13485eec-c0e0-41d0-b32e-b95ecd23ecef</id>
<name>trunk-D120-vm1</name>
<subports>
<name>child-port-D120-vm1</name>
<network>child-D120-net</network>
<mac_address>fa:16:3e:72:cd:8d</mac_address>
<segmentation_type>vlan</segmentation_type>
<segmentation_id>120</segmentation_id>
<id>1b6a0601-3281-4950-baca-f485470f74e3</id>
</subports>
</trunk>
</trunks>
トランクの削除:
VM が展開解除されると、トランクとサブポートが削除されます。NETCONF メッセージは、トランクごとに投稿されます。
<?xml version="1.0" encoding="UTF-8"?>
<notification xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
<eventTime>2022-06-08T13:24:47.834+00:00</eventTime>
<escEvent xmlns="http://www.cisco.com/esc/esc">
<status>SUCCESS</status>
<status_code>200</status_code>
<status_message>Trunk trunk-D120-vm2: DELETE_TRUNK completed successfully</status_message>
<event>
<type>DELETE_TRUNK</type>
</event>
</escEvent>
</notification>
HTTP コールバックイベント:
::ffff:127.0.0.1 - - [08/Jun/2022 13:24:47] "POST / HTTP/1.1" 200 2
------------------------------
REQUEST_METHOD: POST
SERVER_PORT: 9009
PATH_INFO: /
CONTENT_TYPE: application/xml
HTTP_ESC_TRANSACTION_ID be42f1d2-a792-4516-91dc-583bdcd28c55
HTTP_ESC_STATUS_MESSAGE * Trunk trunk-D120-vm2: DELETE_TRUNK completed successfully
HTTP_ESC_STATUS_CODE 200
DATA:
------------------------------
* <?xml version="1.0" encoding="UTF-8"?><!-- trunk details -->
---------------END DATA---------------
トランクの変更:
トランク自体は変更されませんが、サブポートは追加、削除、および変更できます。
HTTP PUT REST を送信すると、必要に応じてトランクサブポートが変更されます。サブポートを PUT リクエストのサブポートに置き換えます。
-
リクエストにない既存のサブポートは VM から削除されます。
-
リクエスト内の既存のサブポートは残り、ID、MAC アドレスは保持されます。
-
リクエストに新しいサブポートを追加します。
curl -X PUT "http://localhost:8080/ESCManager/v0/deployments/D120" \
-H "Callback: http://localhost:9009" \
-H "Callback-ESC-Events: http://localhost:9009" \
-H "Content-Type: application/xml" \
-d "<esc_datamodel xmlns=\"http://www.cisco.com/esc/esc\"> ..."
NETCONF edit-config
の使用
NETCONF リクエストでは、ルールが少し異なります。
-
リクエストにない既存のサブポートは無視し、変更せずに続行します。
-
リクエストに新しいサブポートを追加します。
-
サブポートを削除し、nc:operation='delete' で注釈を付けます。次に例を示します。
<subport nc:operation='delete'>
<name>child-port-D120-vm1</name>
<network>child-D120-net</network>
<segmentation_type>vlan</segmentation_type>
<segmentation_id>120</segmentation_id>
</subport>
edit-config
(REST API)の使用
内部 REST API を使用して、NETCONF ペイロードを送信します。
curl -X POST --location "http://localhost:8080/ESCManager/internal/conf/edit-config" \
-H "Callback: http://localhost:9009" \
-H "Callback-ESC-Events: http://localhost:9009" \
-H "Content-Type: application/xml" \
-d "<esc_datamodel
xmlns=\"http://www.cisco.com/esc/esc\"
xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\">
..."
制限事項
-
OpenStack では、展開された VM にトランクを追加できません。セカンダリインターフェイスを接続し、ポートをトランクの親として使用できます。
-
VM グループのスケーリングはサポートされていません。
-
サブポートの MAC アドレスの指定はできません。