Вы находитесь на странице: 1из 8

Виртуализация сетей в Linux

Сетевые адаптеры, коммутаторы, сети и устройства

M. Тим Джонс (mtj@mtjones.com) 22.11.2011


инженер-консультант
Emulex Corp.

Учитывая бурный рост популярности технологий виртуализации систем, не приходится


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

Сегодня информационные технологии переживают период, сравнимый с эпохой


Возрождения для мировой культуры. Хотя виртуализация появилась несколько десятилетий
назад, её истинный потенциал раскрылся только сейчас, благодаря использованию
массового аппаратного оборудования. Виртуализация позволяет консолидировать нагрузку
на сервер для обеспечения большей эффективности, но другие элементы серверной
экосистемы также рассматриваются как кандидаты для укрупнения в будущем. Многие
рассматривают виртуализацию как объединение ресурсов процессоров, памяти и
дискового пространства, но это слишком упрощенный взгляд. Сетевые интерфейсы – это
ключевой аспект виртуализации, и виртуализация сети - один из важнейших этапов на пути
построения виртуальной среды.

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

В традиционной среде (см. рисунок 1) комплекс необходимых приложений разворачивается


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

© Copyright IBM Corporation 2011 Торговые марки


Виртуализация сетей в Linux Страница 1 из 8
developerWorks® ibm.com/developerWorks/ru/

подключенных к внешней сетевой инфраструктуре. Сетевые адаптеры и стек сетевого ПО


через сетевую инфраструктуру обеспечивают коммуникации между конечными точками. Как
показано на рисунке 1, эта функциональность реализуется коммутатором (switch), который
отвечает за эффективный обмен пакетами между взаимодействующими конечными точками.

Рисунок 1. Традиционная сетевая инфраструктура

Ключевая инновация, лежащая в основе объединения серверов, - это абстрактное


аппаратное обеспечение, позволяющее нескольким операционным системам и
приложениям совместно использовать физическое аппаратное обеспечение (см. рисунок
2). Эта абстракция называется гипервизором (hypervisor) или монитором виртуальных
машин (virtual machine monitor). Каждая виртуальная машина (операционная система с
набором приложений) видит базовое аппаратное обеспечение как систему, используемую
в монопольном режиме, хотя её отдельные компоненты могут быть разделены между
несколькими виртуальными машинами (ВМ) или вообще не существовать. В качестве
примера можно рассмотреть виртуальный сетевой адаптер (vNIC). Гипервизор может
создать один или несколько виртуальных сетевых адаптеров для каждой ВМ. Эти адаптеры
будут видны в ВМ как физические, но в действительности они только предоставляют
интерфейс к реально существующему сетевому адаптеру. Гипервизор также позволяет
динамически создать виртуальную сеть с виртуальными коммутаторами, чтобы обеспечить
настраиваемые коммуникации между конечными точками виртуальных машин. Также
гипервизор допускает взаимодействие с инфраструктурой физической сети путем
подключения физических сетевых адаптеров сервера к своей логической инфраструктуре,
в результате чего становятся возможными коммуникации между виртуальными машинами
в рамках гипервизора и коммуникации в рамках внешней сети. В разделе Ресурсы
перечислены ссылки на статьи, содержащие информацию о гипервизорах для платформы
Linux – очень перспективному направлению для ОС на основе открытого кода.

Виртуализация сетей в Linux Страница 2 из 8


ibm.com/developerWorks/ru/ developerWorks®

Рисунок 2. Виртуализированная сетевая инфраструктура

Виртуализированная сетевая инфраструктура также позволяет внедрить другие интересные


инновации, например, виртуальные устройства (virtual appliance). Эта возможность будет
также рассмотрена в данной статье вместе с другими элементами виртуальных сетей.

Виртуальная коммутация
Виртуальный коммутатор – это ключевой компонент, необходимый для виртуализации
сетевой инфраструктуры. Виртуальный коммутатор соединяет виртуальные сетевые
адаптеры (vNIC) с физическими сетевыми адаптерами, установленными на сервере, и, что
более важно, связывает одни виртуальные сетевые адаптеры с другими для локального
взаимодействия в рамках сервера. Стоит отметить, что для виртуального коммутатора
предел возможностей определяется не скоростью сети, а пропускной способностью памяти,
которая позволяет наладить эффективные коммуникации между локальными виртуальными
машинами и минимизировать нагрузку на сетевую инфраструктуру. Эта экономия связана с
тем, что ресурсы физической сети расходуются только на коммуникации между серверами, а
трафик между виртуальными машинами изолируется внутри серверов.

Поскольку в ядре Linux уже присутствует коммутатор второго уровня, возникает вопрос,
зачем необходим еще и виртуальный коммутатор. Ответ на этот вопрос учитывает
несколько факторов, но наиболее важный из них – это новая классификация коммутаторов.
Новый класс коммутаторов называется распределенным виртуальным коммутатором
(distributed virtual switch) и применяется для соединения серверов таким способом,
чтобы нижележащая архитектура стала "прозрачной" для использующих её приложений.
Виртуальный коммутатор на одном сервере может «прозрачно» для пользователей
подключиться к виртуальному коммутатору на другом сервере (см. рисунок 3). Это
значительно упрощает миграцию виртуальных машин между серверами и их виртуальными
интерфейсами, так как они могут подключиться к распределенному виртуальному
коммутатору другого сервера и "прозрачно" присоединиться к его виртуальной сети.

Виртуализация сетей в Linux Страница 3 из 8


developerWorks® ibm.com/developerWorks/ru/

Рисунок 3. Распределенный виртуальный гипервизор

Один из наиболее важных проектов в этой области – проект Open vSwitch, который будет
рассматриваться в следующем разделе.

Из-за изоляции локального трафика внутри сервера возникает проблема, связанная с тем,
что этот трафик оказывается недоступен снаружи (например, сетевым анализаторам).
В разных реализациях эту проблема решается с помощью различных схем, например,
OpenFlow, NetFlow и sFlow, призванных обеспечить удаленный доступ для контроля и
мониторинга трафика.

Open vSwitch
Ранние реализации распределенных виртуальных коммутаторов были закрытыми и могли
работать только с гипервизорами определенных поставщиков ПО. Однако при современном
развитии облачной инфраструктуры желательна поддержка гетерогенных сред, в которых
могут сосуществовать различные гипервизоры.

Open vSwitch – это многоуровневый виртуальный коммутатор с открытым кодом,


распространяемый под лицензией Apache 2.0. В мае 2010 была представлена версия
Open vSwitch 1.0.1 с поддержкой впечатляющего набора возможностей. Open vSwitch
поддерживает наиболее популярные Open source-гипервизоры, включая Kernel-based VM
(KVM), VirtualBox, Xen и XenServer. Также он рассматривается в качестве возможной замены
бридж-модуля (bridge module), используемого в данный момент в Linux.

Open vSwitch состоит из демона-коммутатора и сопутствующего модуля ядра, который


управляет процессом «поточной» (flow based) коммутации. Для управления коммутацией
существуют и другие демоны и утилиты (например, перспективная реализация от
OpenFlow). Open vSwitch можно запускать целиком в пользовательском пространстве, но это
приводит к снижению производительности.

Кроме высокоэффективной реализации коммутатора для виртуальной среды, проект


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

Виртуализация сетей в Linux Страница 4 из 8


ibm.com/developerWorks/ru/ developerWorks®

Виртуализация сетевых устройств


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

QEMU
Хотя QEMU – это эмулятор аппаратных платформ, он также может программно эмулировать
различные устройства, включая сетевые адаптеры. Также QEMU включает внутренний
DHCP-сервер (Dynamic Host Configuration Protocol – протокол динамической конфигурации
хоста) для назначения IP-адресов. Совместное использование QEMU и KVM создает
платформу для виртуализации, обеспечивающую эмуляцию аппаратной составляющей и
отдельных устройств на основе KVM. Дополнительная информация о QEMU находится в
разделе Ресурсы.

virtio
virtio – это инфраструктура ввода/вывода для Linux с поддержкой паравиртуализации
(para-virtualization), упрощающая и ускоряющая обмен данными между виртуальной
машиной и гипервизором. Технология virtio создает стандартизированный транспортный
механизм для операций ввода/вывода между виртуальной машиной и гипервизором,
который можно использовать для виртуализации блочных устройств, стандартных PCI-
устройств, сетевых устройств и т.д. Дополнительная информация о virtio находится в
разделе Ресурсы.

TAP и TUN
Виртуализация довольно давно реализована в сетевом стеке, чтобы обеспечить сетевым
интерфейсам гостевой виртуальной машины доступ к сетевым интерфейсам физического
сервера. Две схемы подобного рода – это TAP и TUN. TAP – это виртуальный сетевой
драйвер ядра, реализующий Ethernet-устройство и работающий на уровней фреймов
(пакетов) Ethernet. Драйвер TAP представляет собой "перехватчик" (англ. tap) Ethernet-
трафика, который позволяет Ethernet-фреймам гостевой виртуальной машины участвовать
в коммуникациях. Технология TUN (от network TUNnel – сетевой туннель) эмулирует
устройство сетевого уровня, общающееся на более высоком уровне IP-пакетов. Это
технология применяется для оптимизации, позволяя нижележащим Ethernet-устройствам
управлять формированием пакетов 2-го уровня из IP-пакетов TUN.

Виртуализация ввода-вывода
Виртуализация ввода-вывода обеспечивается стандартной схемой от PCI Special Interest
Group (SIG), позволяющей ускорить виртуализацию на аппаратном уровне. Технология
Single-root IOV (SR-IOV) предоставляет интерфейс, делающий один адаптер PCIe
(PCI Express) доступной множеству пользователей как несколько независимых PCIe-
адаптеров. Это позволяет нескольким драйверам независимо и прозрачно друг для друга
подключаться к одному PCIe-адаптеру. Технология SR-IOV достигает такого эффекта,
открывая пользователям виртуальные функции, которые отображаются как физические

Виртуализация сетей в Linux Страница 5 из 8


developerWorks® ibm.com/developerWorks/ru/

функции PCIe-адаптера, но на самом деле реализованы в адаптере как функции для


совместного использования.

Технология SR-IOV повышает производительность сетевой виртуализации, избавляя


гипервизор от обязанности организовывать совместное использование физического
адаптера и перекладывая задачу реализации мультиплексирования на сам адаптер. В этом
случае обеспечивается прямая пересылка ввода/вывода с гостевой виртуальной машины
непосредственно на адаптер.

В настоящее время в ОС Linux реализована поддержка SR-IOV. Эта технология повышает


эффективность гипервизора KVM. Платформа для виртуализации Xen также поддерживает
SR-IOV, используя эту технологию для предоставления виртуальных сетевых адаптеров
гостевым виртуальным машинам. Поддержка SR-IOV также стоит в плане развития Open
vSwitch.

Виртуальные локальные сети


Виртуальные локальные сети (virtual LAN - VLAN) – это один из способов виртуализации
сетей. Эта технология позволяет создать виртуальную сеть в рамках распределенной сети,
так что различные компьютеры в независимых сетях будут отображаться как элементы
одной виртуальной сети. Это достигается благодаря снабжению фреймов с информацией
виртуальной сети специальными пометками, что позволяет опознать принадлежность
этих фреймов к определенной физической сети (согласно стандарту IEEE 802.1Q).
Виртуализация сети выполняется самими хостами с помощью VLAN-коммутатора. Но хотя
виртуальные сети обеспечивают иллюзию независимости сетей друг от друга, они все равно
используют общую физическую сеть, поэтому интенсивный обмен данными может оказывать
негативное влияние на общую пропускную способность сети.

Аппаратное ускорение виртуальных устройств


Для сетевых адаптеров и других устройств появились различные приемы ускорения
ввода/вывода. Технология VT-d (Virtualization Technology for Directed I/O – технология
виртуализации направленного ввода/вывода) от Intel® позволяет изолировать ресурсы
ввода/вывода для повышения надежности и безопасности, включая реорганизацию
прямого доступа к памяти (на основе многоуровневых страничных таблиц) и прерываний,
связанных с устройством. Эта технология поддерживается как для обычных, так и
для виртуальных устройств. Технология Intel® VMDq (Virtual Machine Device Queues –
очереди для виртуальных устройств) также ускоряет сетевой трафик при виртуализации
путем встраивания очередей и алгоритмов сортировки непосредственно в аппаратное
обеспечение. Благодаря этой технологии гипервизору для работы требуется меньше
процессорных ресурсов, что приводит к значительному росту общей производительности
системы. В Linux присутствует поддержка обеих указанных технологий.

Готовые виртуальные решения


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

Виртуализация сетей в Linux Страница 6 из 8


ibm.com/developerWorks/ru/ developerWorks®

виртуализации. Далее будут рассмотрены примеры виртуализации стандартных сетевых


служб.

Одна из интересных инноваций в области виртуализации – это экосистема,


зародившаяся из серверов совместного пользования. Вместо размещения приложений на
специализированных аппаратных платформах фрагменты сервера отдаются в выделенное
пользование виртуальным машинам, которые дополняют службы, предоставляемые
сервером. Подобные виртуальные машины называются virtual appliances (виртуальные
устройства), так как они предназначены для предоставления определенных служб или
приложений и изначально сконфигурированы для виртуальной среды.

Виртуальные устройства обычно подключаются к гипервизору или стандартной сетевой


инфраструктуре, представляемой гипервизором, дополняя возможности определенной
службы. Особенность данного подхода заключается в том, что вычислительные мощности
(например, процессорные ядра) и каналы ввода/вывода общего сервера можно динамически
конфигурировать для каждого виртуального устройства. Такой подход делает виртуальные
«коробочные» решения выгодными с финансовой точки зрения, так как для них не
требуется выделять отдельный сервер, а их производительность можно динамически
изменять в зависимости от загрузки других приложений, запущенных на сервере.
Виртуальными устройствами также проще управлять, так как приложение привязано к
операционной системе в рамках виртуальной машины, и они не требуют дополнительного
конфигурирования, так как виртуальная машина изначально сконфигурирована как единое
целое. Рост популярности "коробочных" виртуальных решений во многом связан с этими
важными преимуществами.

Готовые виртуальные решения существуют для множества корпоративных приложений,


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

Заключение
Раньше любое используемое устройство обязано было существовать в реальности.
Но сегодня, в нашем виртуализированном мире, физические устройства и службы
постепенно исчезают из поля зрения. Физические сети виртуально разделяются на
отдельные фрагменты, обеспечивая изоляцию трафика и создание виртуальных сетей
между географическими разделенными регионами. Приложения вытесняются готовыми
виртуальными устройствами, которые распределяются между высокопроизводительными
серверами, что усложняет обязанности администратора, но повышает гибкость и
управляемость разработанных решений. И, конечно, Linux находится "на передовой"
разработки и применения технологий виртуализации.

Виртуализация сетей в Linux Страница 7 из 8


developerWorks® ibm.com/developerWorks/ru/

Об авторе
M. Тим Джонс

М. Тим Джонс - архитектор встроенного ПО и, кроме того, автор книг


Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming
(выдержавшей на данный момент второе издание), AI Application Programming
(второе издание) и BSD Sockets Programming from a Multilanguage Perspective.
Он имеет обширный опыт разработки ПО в самых разных предметных областях
- от ядер специальных ОС для геосинхронных космических аппаратов до
архитектур встраиваемых систем и сетевых протоколов. Тим - инженер-
консультант Emulex Corp., Лонгмонт, Колорадо.

© Copyright IBM Corporation 2011


(www.ibm.com/legal/copytrade.shtml)
Торговые марки
(www.ibm.com/developerworks/ru/ibm/trademarks/)

Виртуализация сетей в Linux Страница 8 из 8

Вам также может понравиться