OpenStack 連携している Nutanix CE で露骨なマルチテナント環境を作ってみました。下記のような環境を、OpenStack 側と Nutanix 側から見てみます。
テナント1
- Project: t1 ※ユーザ「user01」が所属。
- Instance: vm-1、vm-2、vm-3
- Network: net01 (subnet: 192.168.10.0/24)
テナント2
- Project: t2 ※ユーザ「user02」が所属。
- Instance: vm-1、vm-2、vm-3
- Network: net01 (subnet: 192.168.10.0/24)
OpenStack 側
Horizon Dashboard から見てみます。
テナント1 の様子
user01 でログインして、t01 プロジェクトを見ています。
vm-01 ~ vm03 が作成されていて、192.168.10.0/24 のネットワークに接続されています。
t01 プロジェクトの vm-01 の ID を見ておきます。
「9e29fe1d-fdef-49bc-a6f0-f498e1cd32d1」になっています。
t01 プロジェクトの net01 の ID を見ておきます。
「c922a8bb-6746-4650-8bf3-81bb9c63dab4」になっています。
テナント2の様子
user02 でログインして、t02 プロジェクトを見ています。
別のテナントですが、t01 と同様に vm-01 ~ vm03 が作成されていて、192.168.10.0/24 のネットワークに接続されています。
t02 プロジェクトの vm-01 の ID を見ておきます。
こちらは「2dd3162d-0930-4eee-9c3c-4b2e4878f179」です。
t02 プロジェクトの net01 の ID を見ておきます。
こちらは「97a21c24-5404-400d-84a6-59b054f3ccb7」になっています。
Nutanix 側
Nutanix 側では、OpenStack のプロジェクトにかかわらず、VM やネットワークがまとめて見えます。UUID を見ると、OpenStack 側のオブジェクトとの対応がわかります。
Prism で見る
同じ名前で、同じネットワークから IP アドレスが設定されている VM が並んでいます。ID 「9e29fe1d-fdef-49bc-a6f0-f498e1cd32d1」をもとに探すと、t01 プロジェクトの vm-01 はこれです。
すぐとなりに、ID が「2dd3162d-0930-4eee-9c3c-4b2e4878f179」である t02 プロジェクトの vm-01 があります。
ネットワークには特に名前がつけられていませんが、今回は VLAN ID 38 と 40 のネットワークが OpenStack から作成されました。
Nutanix Cmdlets でみる
ID とオブジェクトを簡単にまとめて表示して、OpenStack - Nutanix 間のひもづけを確認するため、PowerShell の Nutanix Cmdlets で Prism に接続して情報を見てみました。
雰囲気を出すために PowerShell のプロンプトを変更してあります。
PS C:\> function prompt{Write-Host "NTNX" -NoNewLine -ForegroundColor White; Write-Host ">" -NoNewLine -ForegroundColor Green;" "}
Nutanix CE のバージョンは、まだ 2016.03.13 です。
NTNX> Get-NTNXCluster | ft -AutoSize name,version name version ---- ------- ntnx-ce 2016.03.13 NTNX>
VM の名前、IP アドレス、ID(vmId)を表示してみます。
Hoizon と Prism で見たような情報が取得できます。
NTNX> Get-NTNXVM | sort vmName,ipAddresses | ft -AutoSize vmName,ipAddresses,vmId
CVM(ControllerVM)を除いた、VM の名前、IP アドレス、vNIC ID を表示してみます。vNIC ID の末尾から、うまい具合に VM ID と MAC アドレス がわかります。
NTNX> Get-NTNXVM | where {$_.controllerVm -eq $false} | sort vmName,ipAddresses | ft -AutoSize vmName,ipAddresses,virtualNicIds
vNIC の接続されているネットワーク ID を見てみます。接続先のネットワークは 2つに分かれています。
NTNX> Get-NTNXVM | where {$_.controllerVm -eq $false} | % {Get-NTNXVMNIC -Vmid $_.vmid} | sort networkUuid | ft -AutoSize macAddress,networkUuid
MAC アドレスと、ネットワーク ID をもとにした VLAN ID を表示してみます。Prism で見た通りそれぞれのネットワークの VLAN ID は 38 と 40 です。
NTNX> Get-NTNXVM | where {$_.controllerVm -eq $false} | % {Get-NTNXVMNIC -Vmid $_.vmid} | sort networkUuid | ft -AutoSize macAddress,{(Get-NTNXNetwork -Networkid $_.networkUuid).vlanId}
OpenStack のインスタンス UUID をもとに VM を探す工夫
1行のコマンドラインを長くするとわかりにくいので、ここまで確認してみた内容を見るためだけの、簡単なスクリプトを作ってみました。ちなみに Nutanx の vmId に含まれる clusterUuid の部分は、たぶんなくても ID 重複しないので除外しています。
get_osuuid2ntnxvm.ps1
Get-NTNXVM | where {$_.controllerVm -eq $false} | % { $vm = $_ Get-NTNXVMNIC -Vmid $_.vmid | sort networkUuid | % { $vnic = $_ $t = "" | select ID,VM,IP,MAC,VLAN $t.ID = ($vm.vmId -replace "^.*::","") $t.VM = $vm.vmName $t.MAC = $vnic.macAddress $t.VLAN = (Get-NTNXNetwork -Networkid $vnic.networkUuid).vlanId $t.IP = $vm.ipAddresses } $t }
CVM を除く VM を表示。テナントが区別できずとりあえず接続している VLAN でソート。VM に複数 NIC があると微妙に・・・
NTNX> .\get_osuuid2ntnxvm.ps1 | sort VLAN,VM | ft -AutoSize
インスタンス UUID「9e29fe1d-fdef-49bc-a6f0-f498e1cd32d1」を探してみました。
NTNX> .\get_osuuid2ntnxvm.ps1 | where {$_.ID -eq "9e29fe1d-fdef-49bc-a6f0-f498e1cd32d1"}
以上。