post-thumb

NSX-T 3.0 において、分散仮想スイッチ(VDS)を利用してトランスポートノードプロファイルを作成できない

症状

NSX-T 3.0 において、分散仮想スイッチ(VDS)を利用してトランスポートノードプロファイルを作成できない。

トランスポート ノード プロファイルを作成画面で、設定値入力後「保存」ボタンをクリックすると、エラーメッセージに「VDS ${vds_name} のアップリンク プロファイル [BaseHostSwitchProfile/${uuid}] で、サポートされていないフィールド MTU が指定されています。vSphere から MTU を更新してください。(エラー コード: 9531)」と表示され、トランスポート ノード プロファイルを作成できない。

ポート ノード プロファイルを作成できない

英語のメッセージでは「Unsupported field MTU specified in uplink profile [BaseHostSwitchProfile/${uuid}] for VDS ${vds_name]}. Please update MTU from vSphere. (Error code: 9531)」と表示される。

Cannot create transport node profile

原因

VDS を利用したトランスポート ノード プロファイルを作成する場合、アップリンク プロファイルの MTU サイズは指定してはならないため。というよりも分散仮想スイッチ側ですでに指定されている値であるために、アップリンク プロファイルでわざわざ指定する必要がないのである。

とはいえ、エラーメッセージをよく読めばわかるかもしれないが、これはわかりにくい。

対応

トランスポート ノード プロファイルで指定するアップリンク プロファイルにおいて、MTU サイズは空欄としておく。

アップリンク プロファイルの MTU 入力欄や、エラーメッセージでアップリンク プロファイルの MTU サイズを空欄にすべし、と明示してくれると助かるんですが…。「適用されません。」じゃ無視されると普通思いますわな。

アップリンク プロファイルの編集 UI

由来

この状況を理解するには、vSphere 7.0 で実装された分散仮想スイッチ Converged VDS(CVDS)と NVDS を理解しておく必要がある。

N-VDS

NSX-T 3.0 以前からある NSX-T の仮想スイッチ N-VDS は、その設定に少々癖があるのと何より vSphere Client の UI からその存在を認識することができなかった。その割にはセグメントはポートグループのように表示してしまい、正直イケていなかった。

vSphere Client で正確に表示できないことからも推察できるように、vCenter Server は N-VDS を作成できるわけではないので、N-VDS のアップリンク インターフェースの MTU サイズは、アップリンク プロファイルで設定する必要があった。

そのため NSX-T の管理画面でも MTU サイズの入力が求められるし、API でも MTU を設定する必要があった。

Converged VDS

NSX-T 3.0 以降と vSphere 7.0 以降の組み合わせでは、従来の NSX-T 用のスイッチ NVDS だけではなく vCenter Server で作成した分散仮想スイッチ(VDS)を NSX-T のスイッチとして利用することができる。vCenter Server で作成した VDS であるため、vSphere Client の管理画面でもしっかり表示される。このあたりのことは公式のブログでも言及されている。

VDS ではその vSphere Client での設定画面において MTU サイズを指定するため、NSX-T の管理画面からわざわざ MTU サイズを指定して上書きすることはしない。そのため今回のエラーメッセージが表示されてしまっていた。

VMware の標準仮想スイッチ(VSS)、VDS に慣れ親しんだ感覚では N-VDS は、独特と感じられるだろう。個人的には HostSwitch がプロファイルに入力した任意の文字列によって作成されるところが特に馴染めなかった…。NSX-T 2.x の環境など過去の縛りがないようであれば、CVDS を利用するのが良いと思われる。ドキュメントにも「ホスト スイッチの vSphere Distributed Switch への移行」とあり、おそらくは VMware も N-VDS と CVDS の 2 つの重複する高度な機能のソースコードをメンテナンスするのも大変でしょうから。

雑記

UI に表示されるエラーは NSX Manager のログに表示される。NSX-T 2.4 で Policy API が導入されたが、トランスポート ノード プロファイルの作成は、従来の API であるため、/var/log/proton/nsxapi.log に記録される。API の呼び出し回数を削減するために導入された Policy API といえども内部では従来の API を何度も叩くだけなので、なにか問題がある場合は Policy API のログ /var/log/policy/policy.log よりも /var/log/proton/nsxapi.log を見たほうが早いかもしれない。

2020-10-14T05:40:17.538Z ERROR http-nio-127.0.0.1-7440-exec-3 SwitchingValidator - SWITCHING [nsx@6876 comp="nsx-manager" errorCode="MP9531" level="ERROR" reqId="0ec16330-0f50-4736-8bf2-b20ae8926149" subcomp="manager" username="admin"] Unsupported field MTU specified in uplink profile [BaseHostSwitchProfile/e27f5c10-55b7-4c43-9a9b-0a58afcca5fb] for VDS vds-01. Please update MTU from vSphere.
2020-10-14T05:40:17.539Z ERROR http-nio-127.0.0.1-7440-exec-3 JsonRpcErrorResolver - - [nsx@6876 comp="nsx-manager" errorCode="MP100" level="ERROR" subcomp="manager"] Error discovered by JSON RPC
com.vmware.nsx.management.switching.common.exceptions.SwitchingException: null
at com.vmware.nsx.management.switching.common.SwitchingValidator.validateUplinkHswProfileForVDS(SwitchingValidator.java:1016) ~[switching-1.0.jar:?]
at com.vmware.nsx.management.lcm.transportnode.service.TransportNodeProfileServiceImpl.validateHostSwitchProfiles(TransportNodeProfileServiceImpl.java:619) ~[nsx-deployment-lcm-1.0.jar:?]
at com.vmware.nsx.management.lcm.transportnode.service.TransportNodeProfileServiceImpl.validateHostSwitchSpec(TransportNodeProfileServiceImpl.java:581) ~[nsx-deployment-lcm-1.0.jar:?]
at com.vmware.nsx.management.lcm.transportnode.service.TransportNodeProfileServiceImpl.validateTransportNodeProfileConfig(TransportNodeProfileServiceImpl.java:769) ~[nsx-deployment-lcm-1.0.jar:?]
at com.vmware.nsx.management.lcm.transportnode.service.TransportNodeProfileServiceImpl.update_aroundBody2(TransportNodeProfileServiceImpl.java:273) ~[nsx-deployment-lcm-1.0.jar:?]
at com.vmware.nsx.management.lcm.transportnode.service.TransportNodeProfileServiceImpl$AjcClosure3.run(TransportNodeProfileServiceImpl.java:1) ~[nsx-deployment-lcm-1.0.jar:?]
at org.springframework.transaction.aspectj.AbstractTransactionAspect.ajc$around$org_springframework_transaction_aspectj_AbstractTransactionAspect$1$2a73e96cproceed(AbstractTransactionAspect.aj:66) ~[spring-aspects-5.2.6.RELEASE.jar:5.2.6.RELEASE]
comments powered by Disqus