Назад | Перейти на главную страницу

Как определить имя / IP-адрес хоста гипервизора изнутри виртуальной машины KVM?

У нас есть небольшой парк хостов KVM / libvirt с несколькими сотнями виртуальных машин, которыми управляет группа системных администраторов в разных местах. У меня возникла проблема, связанная с подключением к виртуальной машине по SSH, но я не могу определить имя хоста с голым железом, которому он принадлежит. Кто-нибудь знает, как найти имя голого металлического хоста внутри виртуальной машины?

Если это не то, что KVM делает из коробки, есть ли какие-нибудь примеры конфигураций, которые мы могли бы применить ко всем нашим гипервизорам, чтобы предоставить эту информацию?

Мы действительно используем программное обеспечение для управления запасами, чтобы отслеживать наши виртуальные машины и их голые железные хосты, однако в нем есть ошибки, и время от времени мы теряем информацию о том, какой хост владеет виртуальной машиной. Я исправлю эту проблему, но концепция поиска хоста KVM внутри виртуальной машины будет полезна в любом случае.

Я знаю, что это противоречит многим принципам безопасности, используемым в общих средах, где каждая виртуальная машина является продуктом, проданным другому клиенту, но в нашей среде, где мы владеем хостами, безопасность не является проблемой.

Вы неправильно думаете об этом. Вместо того, чтобы пытаться выводить имя хоста KVM от гостя (невозможно по замыслу), попробуйте выяснить, как хост KVM может поставить в известность гость своего имени.

Данные можно легко передать гостю с узла KVM с помощью функции сквозной передачи файловой системы. В диспетчере виртуальных машин есть даже вариант графического интерфейса пользователя (см. Добавление оборудования -> Файловая система).

Просто создайте где-нибудь на KVM-хосте каталог со всем содержимым, которым вы хотите поделиться с гостем. Это может быть текстовый файл, содержащий имя хоста, некоторый сценарий настройки или обслуживания или что угодно, что вы действительно хотите. Отметьте его как доступное только для чтения для простоты и безопасности. Затем настройте сквозную пересылку файловой системы, используя этот путь, и смонтируйте ее в удобном для каждого гостя месте.

Очевидно, что этот подход требует небольших изменений для каждого хоста и гостя KVM, но, учитывая несколько сотен хостов, я предполагаю, что у вас есть какое-то управление конфигурацией (например, Puppet, Ansible и т. Д.), Что значительно упрощает дело.

Извините, этот ответ слишком поздно, но, учитывая, что у вопроса более 5000 просмотров, я решил, что все равно должен его опубликовать.

Невозможно без решения проблемы, по сути, это своего рода агент в виртуальной машине, который будет хранить в ней данные хоста. Если эти гости мигрируют, то это нужно как-то обновлять через сеть.

Если вы используете систему управления KVM (с сотнями виртуальных машин, вам обязательно следует), например oVirt, вы можете увидеть, на каком хосте работает виртуальная машина, в панели управления администратора.

Я чертовски уверен, что это невозможно из соображений безопасности ... Не делать то, что вы хотите, напрямую, опрашивая гостя.

Однако вы можете установить на хосте агент с поддержкой сценариев, а затем использовать что-то вроде virsh list чтобы вывести список имен виртуальных машин и иметь политику (на самом деле, политику meatspace, а не техническую), гарантирующую, что имя хоста гостя точно соответствует имени виртуальной машины.

ИЛИ .. Сделайте то же, что и выше, но используйте что-нибудь вроде virsh чтобы вывести имя виртуальной машины и IP-адрес гостя, затем рекурсивно прокрутите список, sshвходим в них по порядку, запускаем какой-то скрипт сбора данных и пихаем его в свой инвентарь.

Таким образом, вы знаете, на каком хосте он был запущен (потому что вы запустили virsh из него и получил список), и вы знаете, что там работает.

Не должно быть virsh, вы можете сделать большинство / все это с помощью libvirtd напрямую или его привязки Python.

Возможно, будет немного поздно, но вы можете использовать для этого 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]

Создал скрипт для установки марионеточных фактов о гипервизоре на моих гостях: