Управляем KVM через браузер с помощью WebVirtMgr

Автор | 21.12.2014

При работе с системами виртуализации всегда хочеться получить доступ к хост-машине с любой точки мира и с любого устройства которое есть под рукой. Если пользоваться штатными инструментами KVM, XenServer, VMWare то там необходима установленая консоль управления на локальном ПК и если нужно сделать, что то удаленно и быстро то возникают проблемы… начинаеш ставить консоль, не хватает .Net… поставил его, не хватает чего то другого. В результате, иногда, чтоб перегрузить умершую виртуалку требуется 30-60мин пока все скачаеш и поставишь. Хотя все это можно проделать с консоли за 30сек 🙂
Но мы не об этом.

Тут будет актуально имет скорый доступ к управлению через браузер, что даст возможность подключится даже с телефона.
Приступим к настройке.
Исходные данные: Debian 7.7
Настраиваем все с нуля.

Проверяем поддерживает ли процессор виртуализацию

cat /proc/cpuinfo | egrep '(vmx|svm)'
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca lahf_lm dtherm tpr_shadow
.........

Если вывод команды пустой – меняем железо)
Еще не мешает посмотреть включена ли виртуализация в Биосе, иначе все будет безбожно тормозить. Иногда сам KVM об этом предупреждает в выводе dmesg

Ставим KVM и libvirt

apt-get install kvm sasl2-bin qemu-kvm libvirt-bin libvirt0 python-libvirt bridge-utils

Проверяем статус

service libvirt-bin status
[ ok ] Checking status of libvirt management daemon: libvirtd running.

Для управления виртуальными машинами из-под учётной записи, отличной от root, необходимо добавить пользователя в группу libvirt:

adduser  libvirt

Проверяем загрузку модулей ядра

lsmod | grep kvm
kvm_intel             122053  3
kvm                   291967  1 kvm_intel

Редактируем конфиг l/etc/default/libvirt-bin, разрешив libvirt слушать на интерфейсе:

libvirtd_opts="-d -l"

Включим TCP для libvirt в /etc/libvirt/libvirtd.conf:

...
listen_tls = 0
listen_tcp = 1
....

Перезагружаем libvirt:

service libvirt-bin restart

Теперь добавляем пользователя которому разрешено манипулировать libvirt

saslpasswd2 -a libvirt 
Password:
Again (for verification):

Обязательно нужно указать приложение для которого создается пользователь
Проверить список пользователей :

sasldblistusers2 -f /etc/libvirt/passwd.db
@kvm: userPassword

kvm – имя хост машины
Пробуем подкючится нашим пользователем

virsh -c qemu+tcp://localhost/system nodeinfo
Please enter your authentication name: @kvm
Please enter your password:
CPU model:           x86_64
CPU(s):              8
CPU frequency:       2000 MHz
CPU socket(s):       2
Core(s) per socket:  4
Thread(s) per core:  1
NUMA cell(s):        1
Memory size:         8193064 KiB

Теперь настроим сеть:

nano /etc/network/interfaces
iface eth0 inet manual
auto br0
iface br0 inet static
     address 10.0.0.14
     netmask 255.255.255.0
     gateway 10.0.0.1
     dns-nameserver 10.0.0.1
     bridge_ports eth0
     bridge_stp off
     bridge_fd 0
     bridge_maxwait 0

Применяем настройки

/etc/init.d/networking restart

Добавляем форвард трафика

sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv4.conf.all.proxy_arp=1

Смотрим на интерфейсы

1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether 00:19:b9:ea:dd:54 brd ff:ff:ff:ff:ff:ff
3: br0:  mtu 1500 qdisc noqueue state UP
    link/ether 00:19:b9:ea:dd:54 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.14/24 brd 10.0.0.255 scope global br0
    inet6 fe80::219:b9ff:feea:dd54/64 scope link
       valid_lft forever preferred_lft forever
4: virbr0:  mtu 1500 qdisc noqueue state UP
    link/ether fe:54:00:6a:9e:33 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

Теперь можно приступить к установке WebVirtMgr

apt-get install git python-pip python-libvirt python-libxml2 novnc supervisor nginx

Ставим Django окружение

git clone git://github.com/retspen/webvirtmgr.git
cd webvirtmgr
pip install -r requirements.txt
./manage.py syncdb
./manage.py collectstatic

Вводим требуемые данные

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes (Put: yes)
Username (Leave blank to use 'admin'): admin (Put: your username or login)
E-mail address: username@domain.local (Put: your email)
Password: xxxxxx (Put: your password)
Password (again): xxxxxx (Put: confirm password)
Superuser created successfully.

Для добавления еще одного пользователя

./manage.py createsuperuser

Настраиваем проксирование доступа через Nginx
Переносим файлі для вэб

cd ..
mv webvirtmgr /var/www/

Создаем файл конфига /etc/nginx/conf.d/webvirtmgr.conf

server {
    listen 80 default_server;

    server_name $hostname;
    #access_log /var/log/nginx/webvirtmgr_access_log;

    location /static/ {
        root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /var
        expires max;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forwarded-Proto $remote_addr;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        client_max_body_size 1024M; # Set higher depending on your needs
    }
}

Применяем настройки

service nginx restart

Если не применилось, смотреть в каталог nginx на наличие default конфига. если есть – убрать

Установка Supervisor

service novnc stop
update-rc.d -f novnc remove
chown -R www-data:www-data /var/www/webvirtmgr

В конец файла /etc/supervisord.conf добавляем такие строки

[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=www-data

[program:webvirtmgri-novnc]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-novnc
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-nonvc.log
redirect_stderr=true
user=www-data

Применяем настройки

service supervisor restart

Пробуем зайти на наш сервер

http:///

И должны увидеть такое

Login to WebVirtMgr

Login to WebVirtMgr

а потом такое

WebVirtMgr interface

WebVirtMgr interface

Залишити відповідь