🖥️

Azure VM上のHyper-VでホストするVM(Nested Hyper-V VM)をAzure Arcに登録してみる

2023/08/22に公開

モチベ

  • 久々にAzure Arcを触っておきたい気分になった
  • 手元のLaptop上にHyper-V立ててArcに登録するだけではイメージしやすいけど面白みがない
  • AzureVM上のVM(Nested-VM=入れ子になったVM)で構成してみると面白そうかも

ということで、

  1. Azure VMにHyper-Vを入れ、
  2. Nested Hyper-V VMを作成し、
  3. Nested Hyper-V VMがインターネットアクセスできるように構成し、
  4. Nested Hyper-V VMをAzure Arcに登録する

ということをやってみる。

Nested Hyper-Vとは?

Nested Hyper-Vについては、公式ドキュメントにおいて以下のように説明されています。

入れ子になった仮想化は、Hyper-V 仮想マシン (VM) 内で Hyper-V を実行できるようにする機能です。 この数年でハードウェアが改良され、入れ子になった仮想化のユース ケースが拡大しています。 たとえば、入れ子になった仮想化は次の場合に役立ちます。

  • 入れ子になった VM でのアプリケーションまたはエミュレーターの実行
  • VM でのソフトウェア リリースのテスト
  • トレーニング環境でのデプロイ時間の短縮
  • Hyper-V によるコンテナーの分離の使用

https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

Azure VM上にNested Hyper-V VMの作成

VMの作成

  • Azure上に適当にWindows Serverマシンを立てる
  • すべてのVMサイズでHyper-Vを有効化できるわけではなく、_v3以上のVMサイズを利用するのが無難

https://learn.microsoft.com/en-us/azure/virtual-machines/acu

  • Hyper-Vの有効化

Hyper-V上でNested VMの作成

Nested Hyper-V VMのインターネットアクセス

  • Azure Arcの利用を前提としているため、Nested Hyper-V VMからインターネットアクセスができるようにする必要がある
    • Azure Connected Machine Agentの通信のため
  • よって以下の記事に倣って設定を進めていく

Azure では、Azure IaaS の VM に対して、Azure 基盤側の仮想ネットワークから内部 IP アドレスを配っています。
静的な内部 IP アドレスであったとしても、DHCP サーバー経由で割り当てられるという意味になります。
VM on VM (Nested Hyper-V VM と呼びます) の場合、つまり Azure IaaS 基盤から認識をしていない Nested Hyper-V VM 側への IP アドレスを配ることは Azure 側からは出来ません。
このため、Azure VM として稼働させている、Nested Hyper-V のホスト側で NAT を構成しなければなりません。

https://jpaztech1.z11.web.core.windows.net/NestedHyper-VのVMからの外部への通信について.html

  • ホストOSのHyper-V Manager上で[Virtual Switch Manager]を開く
  • Internalで[Create Virtual Switch]
  • 適当に名前を変更。ここではinternalという名前を付けている。
  • Nested Hyper-V ホスト側で以下のコマンドを実行
New-NetNat –Name myNAT –InternalIPInterfaceAddressPrefix "172.16.1.0/24"
Get-NetAdapter "vEthernet (internal)"| New-NetIPAddress -IPAddress 172.16.1.1 -AddressFamily IPv4 -PrefixLength 24
  • "vEthernet (internal)"が認識されているかどうかはGet-NetAdapterコマンドによって確認できる
> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status       MacAddress             LinkSpeed
----                      --------------------                    ------- ------       ----------             ---------
Ethernet                  Microsoft Hyper-V Network Adapter             5 Up           00-22-48-2D-AE-67        40 Gbps
vEthernet (New Virtual... Hyper-V Virtual Ethernet Adapter #2          18 Up           00-15-5D-00-04-02        10 Gbps
vEthernet (internal)      Hyper-V Virtual Ethernet Adapter             12 Up           00-15-5D-00-04-01        10 Gbps
  • Hyper-V Managerの[Settings]から作成したスイッチをアタッチする

  • Nested VMにログインしてIPv4の設定をしていく

  • 少し待つと、Nested Hyper-V VMでインターネットアクセスができるようになっている

Azure Arcとの接続

  • Azure PortalからAzure Arcの画面を開く

  • サーバを追加から[単一サーバの追加]>[スクリプトの生成]と進む

  • リソースとして追加する際のパラメータを入力していく


  • 最終的にスクリプトが生成されるので、スクリプトをコピーしてNested Hyper-V VM上で実行する

    • Nested Hyper-V VMでPowerShellを開いてペーストすると文字数が多すぎてエラーになったため、.ps1に落とし込み右クリックの[PowerShellで実行]から実行した
  • 実行するとAzure AD(Microsoft Entra ID)認証の画面が出るため、認証を通す

    • 実行自体はすぐに終わる
  • Azure Portalを見てみると、サーバが登録されていることが確認でき、OSも今回利用している評価用(Windows Server 2022 Datacenter Evaluation)として認識されていることがわかる

おわり

  • Azure VM上のVMをAzure Arcに登録するというシナリオは検証用途が中心になるかもしれないが、Azure上だけで完結できるため利用するタイミングは少なからずあるのではないかと思われる
  • Nested Hyper-V VMを利用する際のキモとしてはやはりインターネットアクセスができるようにNATを構成するところだった
  • いつか役に立つ日が来ることを願うばかり、、、。
GitHubで編集を提案
Microsoft (有志)

Discussion