Виртуальные машины и контейнеры EcoRouter Documentation / Виртуальные машины и контейнеры
- Виртуальные машины и контейнеры. Общие сведения
- Конфигурирование подключения интерфейсов виртуальной машины к EcoRouter
- Конфигурирование доступа внешних средств управления контейнерами
- Копирование виртуальных дисков
- Распределение ядер между виртуальными машинами и data-plane
- Подключение к виртуальной машине
- Быстрая настройка виртуальных машин
Виртуальные машины и контейнеры. Общие сведения
На платформе маршрутизатора кроме встроенного программного обеспечения EcoRouterOS может быть запущено программное обеспечение сторонних производителей. Для этого используются технологии виртуализации двух типов:
- полная виртуализация на базе QEMU/KVM;
- контейнерная виртуализация на базе Docker.
Полная виртуализация позволяет запускать операционные системы и эмулировать платформы, поддерживаемые QEMU/KVM. Если стороннее программное обеспечение работает на Linux и не требует эмуляции дополнительного оборудования, то более подходящим вариантом будет контейнерная виртуализация на основе одной ОС.
Функционал виртуальных машин и контейнеров позволяет отказаться от приобретения и поддержки дополнительных серверов и разместить непосредственно на маршрутизаторе программное обеспечение для различных сетевых сервисов.
При конфигурировании виртуальных машин и контейнеров необходимо различать два варианта взаимодействия:
- управление виртуальной машиной, которое производится внешними средствами (создание, запуск, остановка, уничтожение);
- конфигурирование подключения интерфейсов виртуальной машины к портам EcoRouter, которое делается из командной строки EcoRouterOS.
Внимание! При использовании сетевых интерфейсов с драйвером virtio необходимо отключить TCP offload engine, так как на данный момент существует ошибка при подсчете контрольной суммы в TCP-заголовке.
Отключить TCP offload engine можно следующими способами:
1. В ОС на виртуальной машине выполнить следующую команду:
ethtool --offload eth0 tx off
2. В virsh отредактировать свойства сетевого интерфейса, добавив следующие строки:
<host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
<guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
Для этого необходимо выполнить следующие действия:
2.1. подключиться к удаленному хосту:
virsh -c qemu+tls://admin@ecorouter/system
2.2. остановить виртуальную машину:
shutdown virt_name
2.3. войти в режим редактирования xml-файла настроек для этой машины:
edit virt_name
2.4. в секцию interface добавить следующие строки:
<driver>
<host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
<guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
</driver>
2.5. сохранить файл и выйти;
2.6. запустить виртуальную машину и проверить применение данных опций:
ethtool -k ifname
Конфигурирование подключения интерфейсов виртуальной машины к EcoRouter
Маршрутизатор EcoRouter предоставляет для виртуальных машин виртуальные порты, которые могут быть отображены в физические, либо к ним могут подключаться маршрутизируемые L3 интерфейсы.
Команда конфигурационного режима enable container включает функционал работы с виртуальными машинами или контейнерами.
Просмотр существующих виртуальных сетей, используемых виртуальными машинами или контейнерами, осуществляется при помощи команды административного режима show virtual-network vm или show virtual-network container для контейнеров.
Порты виртуальных машин создаются и конфигурируются при помощи команды конфигурационного режима port virt.<NUM>, где <NUM> - номер виртуального порта.
В режиме конфигурации порта виртуальной машины можно связать виртуальный порт с виртуальной сетью при помощи команды virtual-network vm <IDENTIFIER>, где указывается идентификатор виртуального интерфейса из вывода команды show virtual-network vm. Для контейнеров, соответственно, используется контекстная команда virtual-network container <IDENTIFIER>, где указывается идентификатор виртуального интерфейса из вывода команды show virtual-network container.
В режиме конфигурации порта виртуальной машины также можно настроить сервисные интерфейсы командой service-instance <NAME>.
Дальнейшее конфигурирование средствами сервисных интерфейсов делается аналогично обычным портам (см. раздел «Сервисные интерфейсы»).
Конфигурирование доступа внешних средств управления контейнерами
Управление контейнерами осуществляется при помощи внешних менеджеров, поддерживающих API кластеров docker-контейнеров. Например, может использоваться стандартный клиент docker версии 1.12 и выше. Доступ внешних средств управления контейнерами возможен только через management-порт. Аутентификация и защита соединения обеспечивается с помощью TLS и токена кластера.
Чтобы управление контейнерами было возможно, необходимо включить EcoRouter в кластер (известный также как "swarm"). Для этого в CLI EcoRouter используется команда административного режима virtual-container join-swarm <TOKEN> <IP> <PORT>, где:
- <TOKEN> — 85-символьный токен кластера,
- <IP> — IP-адрес менеджера,
- <PORT> — TCP-порт менеджера.
Необходимые параметры выводятся командой docker swarm join-token worker на менеджере кластера.
После включения маршрутизатора в кластер дальнейшее управление осуществляется стандартными командами клиента docker режима swarm mode. TLS-соединение формируется автоматически и не требует конфигурирования.
При необходимости выйти из кластера используется команда административного режима no virtual-container join-swarm.
Копирование виртуальных дисков
В EcoRouterOS есть возможность копирования виртуальных дисков для виртуальных машин. Для этого используется команда конфигурационного режима copy <ftp | tftp> virtual-disk <АДРЕС> <mgmt | vr default | vr <VR NAME>>.
ecorouter#copy ftp virtual-disk ftp://ftpuser:ftpuser@192.168.255.2:/ubuntu-14.04.qcow2 mgmt
Download of virtual disk ubuntu-14.04.qcow2 complete
В таблице ниже описаны варианты данной команды для FTP и TFTP-серверов.
Команда | Описание |
---|---|
copy ftp virtual-disk ftp://user:password@xxx.xxx.xxx.xxx/filename mgmt | С FTP-сервера будет скачан указанный файл виртуального диска, FTP-сервер доступен через менеджмент-порт (mgmt) |
copy ftp virtual-disk ftp://user:password@xxx.xxx.xxx.xxx/filename vr default | С FTP-сервера будет скачан указанный файл виртуального диска. Доступ к FTP-серверу осуществляется через интерфейс виртуального маршрутизатора, выбранного по умолчанию |
copy tftp virtual-disk tftp://xxx.xxx.xxx.xxx/filename vr vrname | С TFTP-сервера будет скачан указанный файл виртуального диска. Доступ к TFTP-серверу осуществляется через интерфейс виртуального маршрутизатора с именем vrname |
copy tftp virtual-disk tftp://xxx.xxx.xxx.xxx/filename mgmt | С TFTP-сервера будет скачан указанный файл виртуального диска. Доступ к TFTP-серверу осуществляется через менеджмент-порт (mgmt) |
Распределение ядер между виртуальными машинами и data-plane
В EcoRouterOS предусмотрена возможность выделения ядер для виртуальных машин. Возможное количество выделенных ядер: 0 или 4.
Для этого используется команда конфигурационного режима hw reserved-cores {0 | 4}, где 0 означает, что ядра не будут выделены; 4 означает, что будет выделено 4 ядра.
ВНИМАНИЕ: Результат выполнения данной команды будет доступен только после сохранения конфигурации и перезагрузки маршрутизатора.
ecorouter(config)#hw reserved-cores 4
Changes will be applied after reboot. Please save config and reload.
ecorouter(config)#write
ecorouter(config)#reload
reboot system? (y/n): y
В результате после выполнения команды hw reserved-cores, сохранения конфигурации и перезагрузки маршрутизатора для виртуальных машин будет выделено 4 ядра.
Проверить количество выделенных для виртуальных машин ядер можно при помощи команды show platform cpu detail.
Подключение к виртуальной машине
Подготовка клиентской машины
Для подключения к встроенной в EcoRouter системе виртуализации QEMU/KVM необходимо корректно подготовить клиентскую машину на базе Linux/Unix. Инструкция составлена и проверена на базе клиента под CentOS 7.
Для управления машиной необходимо установить библиотеку LibVirt и OpenSSL.
yum install libvirt openssl
Для управления машиной при помощи графического интерфейса также необходимо установить virt-manager и его зависимости.
yum install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools
Для установки графического интерфейса в CentOS 7 используется следующая последовательность команд.
yum -y groups install "GNOME Desktop"
startx
Конфигурирование доступа внешних средств управления виртуальной машиной
Для управления виртуальными машинами используется программа libvirt. Доступ внешних средств управления виртуальными машинами возможен только через management-порт. Аутентификация и защита соединения обеспечивается с помощью протокола TLS и инфраструктуры открытых ключей (PKI). Получение сертификата Центра сертификации (CA), пользовательского сертификата и закрытого ключа пользователя описано в разделе «Инфраструктура открытых ключей». Их необходимо сохранить в файлы с названиями cacert.pem, clientcert.pem и clientkey.pem соответственно и поместить эти файлы в директории на управляющей машине, предназначенные для их хранения. Ниже приведен пример конфигурирования для операционных систем Unix/Linux.
#mv cacert.pem /etc/pki/CA/
#mv clientcert.pem /etc/pki/libvirt/
#mv clientkey.pem /etc/pki/libvirt/private/
#chmod 444 /etc/pki/CA/cacert.pem
#chmod 440 /etc/pki/libvirt/clientcert.pem /etc/pki/libvirt/private/clientkey.pem
Также необходимо обеспечить разрешение доменного имени маршрутизатора, прописанного в сертификатах Subject: CN=ecorouter. Для этого задействуется система DNS или имя прописывается в файл /etc/hosts.
Если ранее настройки хостов на машине не выполнялись, то файл будет выглядеть подобным образом:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.2.2.2 ecorouter
Управление гипервизором
Подключение к гипервизору устанавливается с клиентской машины при помощи средств управления, поддерживающих libvirt, например, virsh или virt-manager:
virsh -c qemu+tls://admin@ecorouter/system
Для примера данной командой осуществляется запрос состояния виртуального процессора виртуальной машины show_debian.
[root@localhost ~]# virsh -c qemu+tls://admin@ecorouter/system vcpuinfo show_debian | grep State
State: running
Доступ непосредственно к рабочему столу или командной строке виртуальной машины осуществляется, например, с помощью virt-manager или virt-viewer:
$virt-viewer -c qemu://ecorouter/system <имя_ВМ> &
В случае если используется графическая оболочка, то необходимо открыть консоль Virtual Machine Manager. Перейти в раздел File – Add Connection, заполнить появившуюся форму, как показано на рисунке ниже, и нажать Connect.
Быстрая настройка виртуальных машин
Для быстрой настройки виртуальных машин в EcoRouter необходимо произвести действия, описанные ниже.
1. Включить поддержку виртуальных машин в EcoRouter при помощи команды конфигурационного режима enable vm.
По умолчанию, для всех виртуальных машин используется одно ядро. В случае, если необходимо загрузить виртуальную машину с ресурсоемкими приложениями, то количество ядер может быть увеличено до 4.
Для этого используется команда конфигурационного режима hw reserved-cores <N>, где N - количество ядер, резервируемых под виртуальные машины.
Пример:
ecorouter(config)#hw reserved-cores 4
2. Скопировать образ виртуальной машины на EcoRouter при помощи команды режима администрирования copy {ftp | tftp} virtual-disk.
ecorouter#copy ftp virtual-disk ftp://user:password@xxx.xxx.xxx.xxx/filename
ecorouter#copy tftp virtual-disk tftp://xxx.xxx.xxx.xxx/filename
3. Убедиться, что на локальном компьютере, с которого будет производиться управление виртуальными машинами, установлены libvirt и openssl.
Для подключения к виртуальным машинам на EcoRouter используется утилита командной строки virsh или графический аналог virt-manager. Версия virt-manager должна быть не меньше 1.3.
4. Экспортировать на локальную машину сертификаты пользователя для подключения к libvirt на EcoRouter. Пример экспорта для Linux машин приведен в таблице ниже.
Вывод команды на EcoRouter | скопировать в файл на локальном компьютере |
---|---|
crypto ca export | /etc/pki/CA/cacert.pem |
crypto certificate export | /etc/pki/libvirt/clientcert.pem |
crypto key export | /etc/pki/libvirt/private/clientkey.pem |
Все команды, указанные в таблице, вводятся в режиме администрирования.
Для корректной работы необходимо установить следующие права доступа на файлы:
chmod 444 /etc/pki/CA/cacert.pem
chmod 440 /etc/pki/libvirt/clientcert.pem /etc/pki/libvirt/private/clientkey.pem
5. Добавить в файл /etc/hosts запись об IP-адресе EcoRouter с именем хоста - ecorouter.
6. Подключиться к libvirt на EcoRouter. В консоли для этого необходимо ввести команду virsh -c qemu+tls://admin@ecorouter/system.
В случае, если используется графическая оболочка, то необходимо открыть консоль Virtual Machine Manager. Перейти в раздел File – Add Connection, заполнить появившуюся форму, как показано на рисунке ниже, и нажать Connect.
7. Создать новую виртуальную машину, используя образ жесткого диска, скопированный ранее на EcoRouter (см. шаг 2).
8. Сетевые интерфейсы виртуальных машин необходимо подключать к изолированным сетям. Для создания такой сети необходимо перейти в детали подключения к EcoRouter и создать виртуальную сеть с типом Isolated virtual network (изолированная виртуальная сеть).
9. При необходимости добавить сетевые интерфейсы. Каждый интерфейс подключается к одной из ранее созданных виртуальных сетей.
10. В пункте Display Spice в поле Address выбрать All interfaces.
11. Включить машину и убедиться, что на виртуальном мониторе появилась загрузка операционной системы.
12. Для соединения виртуальной машины с EcoRouter используются виртуальные порты. На маршрутизаторе необходимо создать виртуальный порт командой конфигурационного режима port virt.0. Данный порт присоединить к одной из виртуальных сетей, созданных через virt-manager. Тогда интерфейс виртуальной машины и виртуальный порт маршрутизатора будут связны через виртуальную сеть. После этого с данным портом можно работать как с обычным портом маршрутизатора. Например, можно настроить поток, который будет на уровне L2 связывать реальный порт маршрутизатора и виртуальный, тем самым все пакеты виртуальной машины будут проходить через реальный порт маршрутизатора.
Пример:
Конфигурирование виртуального порта.
ecorouter#conf t
Enter configuration commands, one per line. End with CNTL/Z.
ecorouter(config)#port virt.0
ecorouter(config-port-virt)#service-instance virt0
ecorouter(config-service-instance)#encapsulation untagged
ecorouter(config-service-instance)#connect port ge1
Конфигурирование внешнего порта EcoRouter.
ecorouter#conf t
Enter configuration commands, one per line. End with CNTL/Z.
ecorouter(config)#port ge1
ecorouter(config-port-virt)#service-instance ge1
ecorouter(config-service-instance)#encapsulation untagged
ecorouter(config-service-instance)#connect port virt.0
После указанных настроек в конфигурации маршрутизатора появятся следующие записи.
ecorouter#show running-config
!
...
!
port ge1
lacp-priority 32767
mtu 9728
service-instance ge1
encapsulation untagged
!
...
!
port virt.0
virtual-network vm uplink
service-instance virt0
encapsulation untagged
!
...
!
flow port ge1 service-instance ge1 port virt.0
!
flow port virt.0 service-instance virt0 port ge1
!
end
Для того, чтобы проверить правильность настройки соединения между внешним и виртуальным портом EcoRouter необходимо ввести команду административного режима show virtual-network vm.
ecorouter#show virtual-network vm
Virtual network uplink
bridge virbr1
port virt.0
13. Далее все настройки IP-адресации будут производиться на виртуальной машине.