Logo

EcoRouter

EcoNAT

EcoQOE

EcoBypass

English

  • Release Notes
  • Виртуальные машины и контейнеры EcoRouter Documentation / Виртуальные машины и контейнеры

    Виртуальные машины и контейнеры. Общие сведения

    На платформе маршрутизатора кроме встроенного программного обеспечения 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. Перейти в раздел FileAdd 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-адресации будут производиться на виртуальной машине.