При работе с системами виртуализации всегда хочеться получить доступ к хост-машине с любой точки мира и с любого устройства которое есть под рукой. Если пользоваться штатными инструментами 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:///
И должны увидеть такое
а потом такое