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

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

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

M. Тим Джонс, инженер-консультант, Emulex Corp.

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



22.11.2011

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

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

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

В традиционной среде (см. рисунок 1) комплекс необходимых приложений разворачивается на группе физических серверов. Чтобы организовать обмен информацией между серверами, на каждый из них устанавливается один или несколько сетевых адаптеров (NIC), подключенных к внешней сетевой инфраструктуре. Сетевые адаптеры и стек сетевого ПО через сетевую инфраструктуру обеспечивают коммуникации между конечными точками. Как показано на рисунке 1, эта функциональность реализуется коммутатором (switch), который отвечает за эффективный обмен пакетами между взаимодействующими конечными точками.

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

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

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

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


Виртуальная коммутация

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

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

Рисунок 3. Распределенный виртуальный гипервизор
Рисунок 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 конкурировать с другими закрытыми и коммерческими решениями.


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

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

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


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

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

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

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

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


Заключение

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

Ресурсы

Научиться

  • Virtual networking in Linux: оригинал статьи (EN).
  • Linux – не только замечательная операционная система, но и отличная платформа для реализации виртуальных систем. Дополнительную информацию о возможностях Linux в области виртуализации можно найти в статьях Virtual Linux (developerWorks, декабрь 2006 г.) и Anatomy of a Linux Hypervisor (developerWorks, май 2009 г.).
  • В Linux реализована инфраструктура virtio, которая используется в KVM для виртуализации ввода/вывода. Инфраструктура virtio предоставляет функциональность для разработки эффективных паравиртуализированных драйверов. Дополнительную информацию о virtio и особенностях её реализации можно найти в статье Virtio: An I/O virtualization framework for Linux (developerWorks, январь 2010 г.)
  • Технология SR-IOV предоставляет средства для виртуализации физических адаптеров, которые в последствии могут быть использованы гостевыми виртуальными машинами. Дополнительную информацию об эмуляции устройств и виртуализации ввод/вывода можно найти в статье Linux virtualization and PCI passthrough (developerWorks, октябрь 2009 г.).
  • SR-IOV позволяет нескольким гостевым операционным системам совместно использовать PCIe-устройства. Об этой технологии можно узнать на Web-сайте Intel hardware design site. Стандарт PCI-SIG определяет спецификации для различных технологий виртуализации ввода/вывода.
  • Готовые виртуальные устройства – это относительно новый вариант поставки программного обеспечения. Основное преимущество виртуальных устройств – это возможность распределить их между несколькими гипервизорами для лучшей переносимости. Один из шагов в данном направлении – это формат OVF (Open Virtualization Format – открытый формат виртуализации), который определяет формат метаданных для виртуальных устройств. О виртуальных устройствах и формате OVF можно узнать из статьи Virtual appliances and the Open Virtualization Format (developerWorks, октябрь 2009 г.).
  • QEMU – это Open source-эмулятор аппаратных платформ, который можно использовать и для виртуализации (через эмуляцию). О QEMU можно узнать в статье System emulation with QEMU (developerWorks, сентябрь 2007 г.).
  • IEEE 802.1Q – это сетевой стандарт для маркировки VLAN-трафика, позволяющий определить концепцию VLAN на MAC-уровне для виртуальной изоляции устройств.

Получить продукты и технологии

  • В рамках проекта Crossbow на платформе OpenSolaris реализована виртуализация сетевых адаптеров и коммутаторов. Проект Crossbow привносит в сетевой стек виртуализацию и контроль пропускной способности канала, уменьшая сложности и накладные расходы, связанные с виртуализацией.
  • Open vSwitch – это первый многоуровневый коммутатор с открытым кодом для обслуживания виртуальных экосистем. Недавно вышедшая версия Open vSwitch 1.0 предоставляет большой набор функций и поддерживает различные Open source-гипервизоры (включая KVM, Xen, XenServer и VirtualBox).
  • Облачная платформа Xen - это каркас для виртуализации, включающий виртуальный коммутатор Open vSwitch.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


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

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=776267
ArticleTitle=Виртуализация сетей в Linux
publish-date=11222011