Программно-конфигурируемые сети (1187415), страница 3
Текст из файла (страница 3)
После этого в маршрутизатор добавляется порт GRE туннеля:[hypervisor1]# ovs-vsctl add-port br2 gre0 -- set interface gre0 type=gre \options:remote_ip=<GRE tunnel enpoint on other hypervisor>После данных команд на каждом из гипервизоров, между маршрутизаторами инициализирован GRE туннель.5OpenFlow-контроллер.В данной главе будет проведено сравнение современных OpenFlow контролле-ров. Основная идея использования ПКС, это унифицирование интерфейсов конфигурирования сетевых устройств, а также предоставление удобного API для рядовогопрограммиста для работы с сетью(соответственно данное API позволяет создаватьприложения, использующие полный спектр возможностей сети). Для полноты изложение введем два простейших термина:• Southbound API – программный интерфейс, который обеспечивает связь междуcontrol-plane и сетевыми устройствами(OpenFlow яркий пример такого API)• Northbound API – програмный интерфейс, предоставляемый контроллером,который использует бизнес-приложение(для обычного программиста наиболееважным является Northbound API, чем гибче и проще данное API, тем легчепрограммисту создавать целевые сетевые приложения)– 15 –5.1POX-контроллер.POX контроллер – open-source проект, разрабатываемый на Python под лицензиейGNU License(официально поддерживает Windows, Mac OS, Linux)POX в настоящий момент поддерживает OpenFlow 1.0(частично поддерживает подOpenflow 1.1), также имеется поддержка Open vSwitch/Nicira extensions(специальноерасширение протокола OpenFlow, позволяющее создавать более гибкие настройкмаршрутизаторов, пример: action=normal – flow который заставляет обрабатыватьсовпавший пакет, как обычный L2 Linux bridge, ставить числовые метки на пакеты,которые идут по forwarding pipeline и таким образом контролировать обработку).POX сам по себе никак не управляет трафиком – функциональность контроллера создается запуском отдельных компонент вместе с контроллером(components), следовательно целевая аудитория проекта POX – разработчики, которые хотят реализоватьсвои проекты.
Стандартный дистрибутив включает в себя набор базовых компонент.Разработка компонентPOX компоненты по сути это модули, написанные на Python, следовательно в контроллер можно добавить любой код, который разработчик захочет. По соглашению,каждая компонента содержит специальную функцию, которая выполняется при запуске контроллера:def launch(args..)://код компонентыСтандартно, каждая компонента может быть запущена только один раз, но специальными командами можно запустить одну и ту же компоненту в нескольких экземплярах.POX APIPOX содержит объект – ”ядро(core)“, который реализует основу POX’s API. Основная цель данного объекта – коммуникация между запущенными компонентами.
Призапуске, указанные компоненты регистрируются на этом объекте и всевозможныепересылки между компонентами реализованы через его использование. Если необходимо “зарегистрировать” компоненту в “ядре” необходимо выполнить следующиедве команды:– 16 –core.register(component_class)core.registerNew(component_class)В итоге “ядро”(core) и стандартные компоненты библиотеки pox предоставляют следующее API’s:• Dependency and Event Management(компоненты могут создавать события, адругие компоненты на них реагировать)• Working with packets and addresses(парсинг пакетов, создание Openflow пакетовс “нуля”)• Using threads, timers, tasks(POX’s recoco library специальная библиотека длямногопоточности; например требуется собирать статистику с контроллера каждые N секунд)• Working with asynchronous sockets(коммуникация между контроллером и удаленным хостом)• Openflow protocol management(разработка Openflow приложений)Общий обзорPOX в основном используется для исследований ПКС, т.к.
предоставляет простое иудобное Northbound API для небольших задач. Основная цель этого проекта – разработка и исследование парадигмы ПКС, для полнценных коммерческих приложенийэтот проект не подходит из-за ограниченного API и медленной работы(т.к. написанна Python)5.2Floodlight-контроллер.Контроллер разрабатываемый на Java 1.7+ под лицензией Apache 2.0. Поддерживает только топологии без циклов между различными компонетами связности.Имеет модульную структуру, т.е. перед запуском в специальный конфигурационныйфайл добавляются названия сервисов, которые будут использованы. Поддерживаетследующие сервисы:• Forwarding – стандартный модуль, обеспечивающий реактивное конфигурирование OpenFlow маршрутизаторов.– 17 –• Static Flow Entry Pusher – специальное приложение для для добавления flowзаписей в выбранный маршрутизатор.• Firewall(брэндмауэр) – применение ACL правил, для ограничения траффика(настраиваетсячерез Rest API)• Learning Switch – обычный L2 маршрутизатор(возможна настройка через RestAPI)• Load Balancer(балансировщик нагрузки) – балансировка tcp, ping, udp трафика.Рис.
4: Структура Floodlight(www.docs.projectfloodlight.org)На картинке показана архитектура контроллера. По сути контроллер выполняетстандартные функции сканирования сети, подключение новых устройств, работа сOpenFlow(1.1), наличие графического интерфейса.Для разработки приложений на базе данного контроллера, предоставляется RestfulJava API.5.3Opendaylight-контроллер.OpenDaylight — open-source проект с гибкой модульной платфоромой для встраивания различных плагинов. Проект разрабатывается под лицензией EPL v1.0(Eclipsepublic license) при поддержке Linux Foundation(считается на данный момент самым крупным проектом среди контроллеров ПКС). Т.к.
проект разрабатывается на– 18 –языке Java(Java 1.7), следовательно является кроссплатформенным. Последний релиз Hydrogen полностью поддерживает протокол OpenFlow 1.3, BGP-LS, протоколOVSDB, PCEP, SNMP.Архитктурные принципы OpenDaylight• Модульность и расширяемость – модульный, расширяемый контроллерподдерживает установку, удаление и обновление используемых служб, во времяработы(без выключения)• Множественная поддержка Southbound протоколов – использование различных сетевых протоколов(OpenFlow, BGP и.т.д)• Служебный абстрактный уровень(Service Abstraction Layer) – использование различных Northbound протоколов• Consistent clustering(распределенная версия) – предоставляет отказоустойчивость и распредленность• Разделяемость – управление различными частями сети, при помощи разныхкомпонент контроллераФункциональный обзорThe OSGi framework позволяет динамически подключать плагины для использова-Рис.
5: Структура OpenDaylight(www.opendaylight.org)ния новых Southbound протоколов. SAL предоставляет такие базовые сервисы, какDevice Discovery(обнаружение сетевых устройств в сети и подключение к ним), который в свою очередь используются такими модулями как Topology Manager(хранение,– 19 –обновление информации о топологии сети) и.т.д. Основываясь на запросе сервиса –SAL маппирует нужный плагин и использует наиболее подходящий southbound протокол.Одним из важных достоинств OpenDaylight является поддержка распределенной версии(High Avalability Model ), позволяет развертывать контроллер на нескольких физических серверах, гарантируя тем самым отказоустойчивость и балансировку нагрузки.Общий обзорOpenDaylight controller огромный быстро развивающийся проект спонсируемый такими крупными организациями как: Cisco, IBM, Red Hat.
Из достоинств можновыделить: работает на JVM, т.е. работает везде, где есть Java; модульность - поддерживает несколько различных Northbound APIs(Rest API, OSGi frameowork) иSouthbound APIs которые между собой независимы(важная особенность, что модули можно загружать прямо во время работы контроллера. Есть дополнительнаяподдержка OVSDB protocol, следовательно может использовать все особенности ирасширения Open vSwitch.5.4Итоги сравнения.Проект / ХарактеристикаPOXFloodlightOpenDaylightЯзыкPython 2.6Java 1.7+Java 1.7+Строк кода5696190578332317Поддержка OVS1.112.0+2.0+OpenFlow HardwareДаДаДаТип APIRest APIRest APIRest API, OSGiframeworkПоддержка GREНетДаДаРаспределенная модельДаДаДаВ целом можно сказать, что POX контроллер используется для проверки производительности ПКС на различных топологиях сетей и тестирования протокола OpenFlow.Floodlight и OpenDaylight можно объеденить в одну категорию, как два проекта,разрабатываемых на языке Java.
Хотя Floodlight можно назвать переходным междуPOX и OpenDaylight, т.к. последний поддерживает любые топологии сетей, большое– 20 –кол-во протоколов маршрутизации, является более гибким и лучше подходит длярешения реальных бизнес-задач.Среди рассмотренных проектов сильно выделяется OpenDaylight. Есть поддержка распределенной модели, OSGi фреймворк позволяет загружать модули не перезагружая контроллер, +активная поддержка Linux сообщества(спонсоры: IBM, Cisco,Nicira, OpenFlow Network Foundation и.т.д)6Постановки задач.6.1Ограничение рассылки широковещательных ARP запросов в VPNKVM2KVM1ovs-switch1veth101.0ovs-switch2veth102.0veth101.0eth0veth102.0eth0veth1HostCT102CT101CT102CT101veth2Open vSwitchДана следующая схема сети, необходимо настроить ovs-switch1 и ovs-switch2 так,чтобы arp-broadcast запросы контейнеров CT102 не попадали на интерфейсы CT101.Соответственно контейнер не можеть получить mac-адрес какого-либо контейнера неиз своей подгруппы.Решение – использование broadcast-unicast и global-local битов в mac-адресе посылаемого arp пакета(см.приложение).mac-адрес в первом октете содержит 2 бита, первый указывает broadcast это пакетили unicast, а второй global-local – является ли адрес глобально или локально администрируемым.
Соответственно, при помощи утилиты ovs-ofctl выставляем local иbroadcast для стандартных arp broadcast(ff:ff:ff:ff:ff:ff) пакетов, а остальные 46 битможно использовать как уникальный ID соответствующей группы.Настройка:– 21 –На главном хосте Open vSwitch – работает как обычный маршрутизатор, никакихдополнительных потоков в нем прописывать не нужно. Пусть mac1-broadcast и mac2broadcast – уникальные для соответствующих подсететй(CT101,CT102) глобальныеMAC-адреса(например: 0f:00:00:00:00:01, 0f:00:00:00:00:02), тогда:kvm1$ ovs-ofctl add-flow ovs-switch1 priority=10,in_port=1,dl_dst=ff:ff:ff:ff:ff:ff,dl_type=0x0806,actions=mod_dl_dst:mac1_broadcast,allkvm1$ ovs-ofctl add-flow ovs-switch1 priority=10,in_port=2,dl_dst=ff:ff:ff:ff:ff:ff,dl_type=0x0806,actions=mod_dl_dst:mac2_broadcast,allkvm1$ ovs-ofctl add-flow ovs-switch1 priority=10,in_port=3,dl_dst=mac1_broadcast,dl_type=0x0806,actions=1kvm1$ ovs-ofctl add-flow ovs-switch1 priority=10,in_port=3,dl_dst=mac2_broadcast,dl_type=0x0806,actions=2kvm1$ ovs-ofctl add-flow ovs-switch1 priority=5,actions=normalНа KVM2 команды дублируются с учетом портов, к которым подключены контейнеры к маршрутизатору ovs-switch2.Первая группа команд преобразует стандартные arp-broadcast запросы, выставляя уникальные mac адреса в поле mac destination у сетевого пакета.