古いサーバでNestedESXi8+TPM2.0の仮想マシンを作る話

ESXi8とTPM2.0をTPM未対応のIvy鯖で使う話

ESXi8は古いCPUを大幅にリストラ

ESXi 8で古いCPUがサポート対象外になる警告画面
ESXi7の頃から警告だけで、SandyBridge世代のCPUでもインストールできていましたが、
ESXi8からついに標準ではインストールできなくなってしまいました。
回避方法を色々調べたので、備忘録程度に残しておきます。
ついでにTPM交換時のオペレーションも知りたかったので有効にしてみます。

仮想TPMの有効化

まずは動作させるvCenter上でTPM2.0を仮想的に作成します。
vCenterには「ネイティブキープロバイダ」という機能があり、
下記条件を満たせば、仮想マシンに仮想TPM2.0を搭載することが可能です。

  • vCenter 7.0U2以降
  • ESXiのライセンスが「vSphere Enterprise Plus」

他にもPyKMIPを使って外部KMSを構築する方法もあるらしいですが今回は触れません。
(VMUGでESXiのライセンス貰ってたらEnterprise Plusのはず)
VMware公式のvSphere Native Key Provider解説だとなんかややこしそうに書いてますが、結局のところ仮想TPMが作成できるよってだけです。

手順

  1. インベントリ リストを参照し、vCenter Server インスタンスを選択します。
  2. [構成] をクリックし、[セキュリティ] の [キー プロバイダ] をクリックします。
  3. [追加] をクリックしてから、[ネイティブ キー プロバイダの追加] をクリックします。
  4. vSphere Native Key Provider の名前を入力します。
  5. [TPM で保護された ESXi ホストでのみキー プロバイダを使用する] はオフにします。

これでTPMの搭載されていないサーバでもTPM2.0の仮想マシンを作る準備ができました。
vCenterのネイティブキープロバイダ設定画面

仮想マシン作成

今回はNestedで構築しますが、ベアメタルでもそこまで差異はないと思います。
とりあえずvCenterで下記のような仮想マシンを1台作成します。
変更した箇所だけ記載しています。

  • 互換対象:ESXi 7.0 U2以降
  • ゲストOSファミリ:その他
  • ゲストOSのバージョン:VMware ESXi7.0以降
  • CPU:1CPU 8コア
  • ハードウェアアシストによる仮想化をゲストOSに公開
  • I/O MMU:有効
  • メモリ:12GB
  • ハードディスク1: 256GB シンプロ
  • CD/DVDドライブ:ESXi8 iOSを指定
  • セキュアブート:無効化 ※気分

スペックにかかわる箇所は変更しても大丈夫のはずです。
Nested ESXi用仮想マシンのハードウェア設定画面

TPM作成

ESXiゲストOS指定時にTPMを追加できない設定画面
ここで問題になるのが、「ゲストOS」をESXiで指定して作成すると仮想マシンに
TPMの追加ができません
おそらく「NestedESXiでわざわざTPMいれんやろ」という判断とは思いますが、
こちとらシステムボード交換でTPM交換するんじゃ手順書作らせろボケェィ
強制的に有効化できるのでやっていきます。

1.PowerCLIインストール

まずはPowerCLIをインストールします。
PowerCLI上でコマンド一つ叩くだけです。

Install-Module VMware.PowerCLI -Scope CurrentUser

何かと便利なツールなのでこれを機会にインストールしておきましょう。
しばらく変化がありませんが、インストールは進んでいるので気長に待ちます。

2.vCenterへの接続

PowerCLIからvCenterへ接続したコンソール画面
下記コマンドでvCenterへ接続します。

Connect-VIServer -Server <vCenterのアドレス> -User Administrator@vsphere.local -Password <パスワード> -force

3.仮想マシンへのTPM追加

Get-VM "<仮想マシン名>" | New-VTpm

上記コマンドで対象の仮想マシンにTPMを追加します。
PowerCLIで仮想マシンにvTPMを追加した実行結果
同時にvCenter上で設定変更が走ったメッセージが出力されます。
vCenterで仮想マシン設定変更タスクが完了した画面
vCenter上で仮想マシンを確認するとTPMが追加されています!!
vCenter上で仮想マシンにTPMデバイスが追加された画面
これで仮想マシンの作成は完了です。ヨシッ!

インストールと初期設定

仮想マシンを起動していきますが、このままでは未対応CPUとしてエラーになってしまうので工夫していくことにします。
OS起動と同時にWEBコンソールもしくはREMOTE CONSOLEを表示します。
表示されたらすぐさま「Shift+O」 失敗したら再起動でOKです。
ESXi 8インストーラ起動時にallowLegacyCPU=trueを追記する画面

runweasel cdromBoot allowLegacyCPU=true

赤字の「allowLegacyCPU=true」を追記します。

runweasel cdromBootは残しておきます

入力を終えたらそのままEnterで起動するとインストーラが始まるのでそのままインストールしていきます。
再起動すると、Shift+Oで入力した箇所は消えてしまうため、再度入力します。

allowLegacyCPU=trueを恒久化

Shift+Oで入力する箇所は再起動のたびに消えてしまうのでこれを恒久化していきます。
通常通り起動したあと、その仮想マシンにSSHアクセスできるよう設定します。
ESXiホストでSSHサービスを有効化する設定画面
ESXiにCLIでログイン後、下記ファイルを開いて編集
/bootbank/boot.cfg
/altbootbank/boot.cfg
両方ともの「kernelopt」allowLegacyCPU=trueを追記
boot.cfgのkerneloptにallowLegacyCPU=trueを追記した画面
編集したら再起動。そのまま起動してきます。

完了!

Nested ESXi 8ホストのインストール完了後の管理画面
あとはvCenterクラスタに組み込もうが何しようがOKです。
(適切なライセンスは忘れずに)
ESXi8になりましたが、基本的な機能なデザイン面以外変わっていないように見えます。
というか、ESXi7 U2→U3が変わりすぎです..。