PowerNSX を使用して、NSX for vSphere へのテナント追加の自動化をしてみようと思います。
とはいっても、現行の NSX にマルチテナント化の機能がるわけではないので、
既に構築済みの DLR + VXLAN 環境に、新規の論理スイッチと VM をテナントっぽく追加してみます。
今回は、DLR とそれより上位のネットワークは構成ずみである想定とします。
下記のような、シンプルなネットワーク環境を使用しています。
NSX Edge のスタティック ルート設定を PowerNSX で見てみる。
今回のテナント追加の流れ。
ネットワークを作成してから、VM を作成してネットワークに接続します。
作成した VM は、テナント ネットワークのIP アドレスが設定された状態になる想定です。
テナント ネットワークを作成。
- 1. 論理スイッチを作成。
- 2. 論理スイッチを DLR に接続。
- 3. ESG に SNAT ルール追加。
- 4. DFW の許可ルールを作成。
VM を作成してテナント ネットワークに接続。
- 5. テンプレートから VM を作成。
- 6. VM を論理スイッチに接続。
下記のようなイメージで、追加テナント(赤枠の中の部分)を作成します。
まずは、PowerNSX を対話的に実行してテナントをひととおり作成してみます。
あらかじめ、Connect-NsxServer で NSX 環境に接続しておきます。
PowerNSX> Connect-NsxServer -vCenterServer <vCenter のアドレス>
1. 論理スイッチを作成。
テナント ネットワークとして利用する論理スイッチ「ls-tenant-04」を作成します。
今回の環境の Transport Zone は、「tz01」という名前です。
PowerNSX> $tz = Get-NsxTransportZone -name tz01
PowerNSX> $ls = New-NsxLogicalSwitch -TransportZone $tz -Name ls-tenant-04
PowerNSX> $ls | select Name,objectId
name objectId
---- --------
ls-tenant-04 virtualwire-222
2. 論理スイッチを DLR に接続。
作成した論理スイッチを、DLR インスタンス(今回は edge-5)に接続します。
テナントのゲートウェイとなる IP アドレス(今回は 10.1.40.1)も設定します。
PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | New-NsxLogicalRouterInterface -Type internal -PrimaryAddress 10.1.40.1 -SubnetPrefixLength 24 -ConnectedTo $ls -Name if-tenant-04
3. ESG に SNAT ルール追加。
Edge Service Gateway(ESG)に、テナントで使用するネットワークに対応したSNAT ルールを追加します。
- ESG のアップリンクのアドレスは 192.168.1.144 です。
- テナントで使用するネットワーク アドレス 10.1.40.0/24 としました。
ESG での SNAT の利用については下記もどうぞ
PowerNSX> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeNat | New-NsxEdgeNatRule -Vnic 0 -action snat -OriginalAddress "10.1.40.0/24" -TranslatedAddress 192.168.1.144
4. DFW の許可ルールを作成。
分散ファイアウォール(DFW)に、今回は下記のように通信許可ルールを追加します。
- デフォルトのままでは、通信が拒否されるようにしてあります。
別テナントからは、許可ルールを入れていないので、つながらない状態のままになります。 - テナント向けに、DFW ルールのセクション(dfw-section-04)を作成します。
- 踏み台サーバ(192.168.1.223)からテナントへの SSH を許可します。
- 任意のネットワーク(Any)からテナントへの HTTP も許可します。
DFW のルールは、VM 追加ごとに変更しなくてよいように、適用先を論理スイッチにしてあります。
また今回は簡易的な環境構築なので、ちょっとルールが微妙なところもあるかもしれません。
PowerNSX> $dfw_section = New-NsxFirewallSection -Name dfw-section-04
PowerNSX> $svc = Get-NsxService -Name SSH | where {$_.isUniversal -eq $false}
PowerNSX> $dfw_section | New-NsxFirewallRule -Name "allow jbox to t04 ssh" -Action allow -Source 192.168.1.223 -Destination $ls -Service $svc -AppliedTo $ls
PowerNSX> $svc = Get-NsxService -Name HTTP | where {$_.isUniversal -eq $false}
PowerNSX> $dfw_section | New-NsxFirewallRule -Name "allow any to t04 http" -Action allow -Destination $ls -Service $svc -AppliedTo $ls
5. テンプレートから VM を作成。
あらかじめ用意しておいた VM テンプレートから、VM を作成します。
VM 作成(クローン)するときに、IP アドレスなどの設定もしています。
ちなみに VM は、Photon OS 1.0 rev-2 の OVA を利用しています。
まず、カスタマイズ仕様を作成します。
PowerNSX> New-OSCustomizationSpec -Name spec-vm41 -OSType Linux -DnsServer 10.1.1.1 -Domain go-lab.jp
PowerNSX> Get-OSCustomizationSpec -Name spec-vm41 | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress 10.1.40.101 -SubnetMask 255.255.255.0 -DefaultGateway 10.1.40.1
そしてカスタマイズ仕様を指定して、VM を作成します。
クローンが終了した直後に、カスタマイズ仕様 は削除しています。
PowerNSX> $spac = Get-OSCustomizationSpec -Name spec-vm41
PowerNSX> Get-Template -Name photon-1.0-rev2 | New-VM -Name vm41 -ResourcePool nsx-cluster-01 -Datastore ds_nfs_lab02 -OSCustomizationSpec $spec
PowerNSX> $spec | Remove-OSCustomizationSpec -Confirm:$false
6. VM を論理スイッチに接続。
VM のクローンが完了したら、vNIC を論理スイッチに接続します。
New-VM でバッキングの分散ポートグループを指定することも可能ですが、
今回はあえて Connect-NsxLogicalSwitch を使用しました。
PowerNSX> Get-VM vm41 | Get-NetworkAdapter -Name "Network adapter 1" | Connect-NsxLogicalSwitch $ls
VM を起動すると、論理スイッチに接続された状態になります。
PowerNSX> Start-VM vm41
IP アドレスが設定された状態で、ネットーワークに接続されます。
PowerNSX> Get-VM vm41 | Get-VMGuest | select VM,State,IPAddress,OSFullName
VM State IPAddress OSFullName
-- ----- --------- ----------
vm41 Running {10.1.40.101, fe80::250:56ff:feaf:d89a} Other 3.x or later Linux (64-bit)
つづく・・・