web-dev-qa-db-ja.com

KVM仮想マシン内からハイパーバイザーホスト名/ IPを検出する方法は?

KVM/libvirtホストの小さなフリートがあり、数百の仮想マシンがあり、異なる場所にあるsysadminのグループによって管理されています。 SSHで仮想マシンに接続しているときに問題が発生しましたが、それを所有しているベアメタルホストの名前がわかりません。仮想マシン内からベアメタルホストの名前を見つける方法を知っている人はいますか?

これが何かでない場合KVMはそのまま使用できますが、この情報を公開するためにすべてのハイパーバイザーに適用できる構成の例はありますか?

インベントリ管理ソフトウェアを使用して、仮想マシンとそのベアメタルホストを追跡しますが、バグがあり、ホストが仮想マシンを所有しているものを追跡できなくなることがあります。この問題は修正しますが、KVM内部からホストを見つけるVMの概念は、関係なく役立ちます。

これは、各仮想マシンが異なる顧客に販売される製品である共有環境で採用されている多くのセキュリティ原則に反することを知っていますが、ホストを所有する私たちの環境では、セキュリティは問題ではありません。

4
Patrick

あなたはこれを間違った方法で考えています。 派生 KVMゲストからのホスト名(設計上不可能))ではなく、KVMホストかもしれないお知らせその名前のゲスト。

KVMホストからファイルシステムパススルー機能を使用することにより、データをゲストと簡単に共有できます。VirtualMachine ManagerにはGUIオプションもあります([ハードウェアの追加]-> [ファイルシステム]を参照)。

KVMホスト上に、ゲストと共有したいあらゆるものを含むホストを作成します。これは、ホスト名を含むテキストファイル、いくつかのセットアップまたはメンテナンススクリプト、または単純化とセキュリティのために、読み取り専用にマークします。次に、このパスを使用してファイルシステムパススルーを構成し、各ゲストの便利な場所にマウントします。

明らかにこのアプローチでは、各KVMホストとゲストにわずかな変更が必要ですが、数百のホストが存在するため、PuppetやAnsibleなどの構成管理が適切に行われていると思います。 )、したがって、問題を大幅に簡素化します。

申し訳ありませんが、この回答は非常に遅いですが、質問に5,000以上のビューがあるため、とにかく投稿する必要があると考えました。

2
C. Taylor

セキュリティ上の理由から、これが不可能であることは間違いありません。ゲストにクエリを実行して、直接やりたいことを実行しないでください。

ただし、スクリプト可能なエージェントをホストにインストールしてから、virsh list VM名前のリストをダンプし、ゲストのホスト名がVM名前。

OR ..上記と同じことを行いますが、virshのようなものを使用してVM名前とゲストのIPアドレスをダンプし、再帰的にリストを処理します、それらを順番にsshingし、ある種のデータ収集スクリプトを実行して、インベントリに押し込みます。

そうすれば、それが実行されているホストがわかり(virshを実行してリストを取得したため)、そこで何が実行されているかがわかります。

virshである必要はありません。これのほとんどまたはすべてをlibvirtdで直接行うか、Pythonバインディングで行うことができます。

2
Tom O'Connor

問題を回避しないと不可能です。基本的には、VMにあるホストデータを保持するエージェントのようなものです。これらのゲストが移行する場合は、ネットワーク経由で何らかの方法で更新する必要があります。

OVirtのようにKVM管理システム(数百のVMがあるため、必ずそうする必要があります))を使用している場合、どのホストでVMが管理者で実行されているかを確認できます。コントロールパネル

enter image description here

2
dyasny

少し遅れるかもしれませんが、そのためにqemu-guest-agentを使用できます。これにより、ハイパーバイザーからゲストシステムにファイルを作成できます。

root@hypervisor-node-01:~# echo "`date`: testing file write from hypervisor[`hostname`]" | base64
  VGh1IE1heSAyNCAwOToxNDoxMCBDRVNUIDIwMTg6IHRlc3RpbmcgZmlsZSB3cml0ZSBmcm9tIGh5
  cGVydmlzb3JbaHlwZXJ2aXNvci1ub2RlLTAxXQo=

root@hypervisor-node-01:~# socat /var/run/qemu-server/101.qga -
  {"execute":"guest-file-open", "arguments":{"path":"/tmp/hypervisor","mode":"w+"}}
  {"return": 1032}
  {"execute":"guest-file-write", "arguments":{"handle":1032,"buf-b64":"VGh1IE1heSAyNCAwOToxNDoxMCBDRVNUIDIwMTg6IHRlc3RpbmcgZmlsZSB3cml0ZSBmcm9tIGh5cGVydmlzb3JbaHlwZXJ2aXNvci1ub2RlLTAxXQo="}}
  {"return": {"count": 86, "eof": false}}
  {"execute":"guest-file-close", "arguments":{"handle":1032}}
  {"return": {}}

ゲストの結果:

root@kvm-guest-01:~$ cat /tmp/hypervisor
  Thu May 24 09:14:10 CEST 2018: testing file write from hypervisor[hypervisor-node-01]

ゲストのハイパーバイザーに関するパペットファクトを設定するスクリプトを作成しました。

0
M.D. Klapwijk