ONOS (Open Network Operating System) – распределённый SDN-контроллер, который чаще всего используется в комплексных решениях SDN/NFV. Он обеспечивает плоскость управления для программно-конфигурируемых сетей SDN, разделяет их на гибкие сегменты (слои, Slice) и обеспечивает работу программных модулей для соответствующего администрирования глобальной сети, состоящей из логически независимых сегментов. ONOS может исполнять такие сетевые приложения, как маршрутизация поверх логических сегментов сети (Segment Routing), управление многоуровневыми сетями SDN, отслеживание изменений топологии сети (Topology Watcher), расчёт оптимального маршрута (Way Calculation), взаимодействие сетей SDN-IP peering.
Архитектура ONOS показана на рисунке ниже. Она состоит из трёх основных уровней: прикладного, уровня распределённой опорной сети (Core) и уровня южных протоколов.

Между уровнями работают интерфейсы программирования приложений API (Application Programming Interface). API между уровнями приложений и опорной сети называются «северными API» (Northbound API), между уровнем опорной сети и уровнем южных протоколов – соответственно «южные API» (Southbound API). Понятия Northbound и Southbound широко используются для описания различных архитектур ИТ- и телеком-систем, и не являются специфичными именно для данной архитектуры.
Экземпляр ONOS – это программная сущность (instance) контроллера ONOS. В архитектуре видно, что экземпляры контроллеров работают по всей распределённой инфраструктуре опорной сети, которая может состоять из нескольких географически распределённых дата-центров. Эти экземпляры образуются, чтобы управлять программной конфигурацией нескольких сегментов нижележащей IP-сети. Они могут запускаться, работать, выполняя возложенные на них функции, а затем прекращать работу пот действием сетевых политик или административных установок.
«Экземпляр», или «сущность» — не совсем точный русский эквивалент англоязычного термина «Instance», который не имеет точного аналога в русском языке. Instance – это нечто временно созданное, а затем отменяемое по команде. Это программный сервис, который образуется и прекращает работу по требованию, например, при запросе на ресурсы от нижележащей IP-сети, при необходимости образовать новый сетевой сегмент со специфичными требованиями (например, сетевой слой для управления бесплотными автомобилями, или слой для управления системами компьютерного зрения, и пр. Instance работает, пока в нем есть необходимость, а после изменения запросов или административных установок – может прекращать работу. Механизм Instance также удобен для «горизонтального масштабирования» (out-scale) сетевых сервисов. Если сетевых или программных ресурсов, выделенных для работы того или иного сервиса или приложения не хватает, то можно модифицировать существующий Instance, выделив ему больше ресурсов. Однако, более оптимальным решением является запуск нового Instance для тех же целей, с количеством ресурсов, на которое нужно увеличить ранее выделенное количество.
Поэтому экземпляры (сущности, Instance) на рисунке показаны как фон для общей архитектуры контроллера ONOS. Такая архитектура повторяется, с теми или иными вариантами, для всех экземпляров ONOS. То есть, контроллеров ONOS в данной архитектуре может быть много, для разных сегментов сети, для разных сетевых слоёв и для разных приложений.
Следует также иметь в виду, что архитектура работает в виде виртуальных машин или контейнеров в общей виртуализованной инфраструктуре сетевых функций NFV. Таким образом, мы видим взаимодействие и взаимозависимость между технологиями SDN и NFV.
Модуль «Абстрагирование конфигурации» на уровне распределённой сети отвечает за общий вид сетевой топологии, которая отображается на уровне программной конфигурации сети. В вышеприведённом примере, это установка, препятствующая прохождению пакетов из зоны гостевого WiFi к серверу финансового департамента. При любых изменениях топологии нижележащей IP-сети, эти установки из базы сетевых установок (управление топологией и абстракции глобального вида и сетевых графов) немедленно прописываются во вновь установленных или заменённых сетевых элементах.
Модуль управления сетевыми потоками предоставляет информацию для таблиц OpenFlow (Flow Table), которые загружаются в сетевые элементы (маршрутизаторы, коммутаторы, файрволлы и пр.) нижележащей IP-сети для управления потоками данных, проходящих через них.
Уровень южных протоколов работает как провайдер протоколов управления программно-конфигурируемой IP-сети. Это может быть как протокол OpenFlow, так и другие протоколы, например, NETCONF. Он, также, как и OpenFlow, является протоколом сетевого управления устройствами. NETCONF был разработан в рамках рабочей группы NETCONF в организации IETF (Intenet Engineering Task Force) и впервые опубликован в RFC 4741, который был переработан в RFC 6241 в июне 2011 г. NETCONF использует язык XML как средство предоставления конфигурации и как средство формирования сообщений протокола, который реализуется поверх транспортного.
Могут использоваться также и другие подобные протоколы, в т.ч. заказные. Таким образом, ONOS является универсальным механизмом управления программно-конфигурируемыми сетями, использующим технологии NFV.
Приложениями в этой архитектуре может быть что угодно: протоколы, драйверы, библиотеки модулей и подпрограмм, модели данных (например, YANG), приложения направления трафика (traffic steering) и другие сетевые приложения.
Фреймворк для намерений (Intent Framework)
Фреймворк для намерений (Intent Framework) – подсистема контроллера ONOS, позволяющая приложениям определять их «пожелания» по управлению сетью в форме политик, а не каких-то сетевых механизмов или протоколов. Такие указания для сети на основе политик (policy-based directives) называются «намерениями» (intents).Ядро (Core) ONOS воспринимает спецификации намерений и переводит их в установки (скрипты) намерений путём компиляции. Эти установки управляют операциями по организации сетевой среды. Эти действия выполняются в процессе установки намерений, которые в результате производят изменения в сетевой среде. Например, это может быть прокладка соединений в виде туннелей, установка правил направления потоков на коммутаторах или маршрутизаторах, или выделение определённых длин волн в оптоволоконных кабелях транспортной сети под определённые потки.
Хотя ядро ONOS предоставляет набор встроенных шаблонов для намерений, компиляторы и установщики для них, фреймворк намерений спроектирован так, что его можно расширять. То есть, в фреймворк можно вводить дополнительные шаблоны намерений, и также дополнительные компиляторы и установщики, причем их можно устанавливать без прерывания работы. Это позволяет постоянно улучшать и модифицировать фреймворк намерений под нужды конкретной цифровой системы.
Что такое намерения (Intent)? Это неизменная модель объекта, которая описывает требоевния приложения для ядра ONOS с целью изменения поведения сети. На самом низшем уровне, намерения могут быть описаны следующим образом:
Сетевые ресурсы: набор моделей объектов, таких как подключения (линки), которые связывают части сети, которые затрагиваются намерением.
Ограничения: определённые коэффициенты, или веса (Weights), заданные для сетевых ресурсов, такие как полоса пропускания, длина световой волны в оптоволокне и тип подключения (линка).
Критерии: поля заголовка пакета, которые описывает трафик сетевого слоя (срез трафика). Параметр TrafficSelector в модели намерений содержит набор объектов, которые выполняют роль интерфейса критерия (Criterion).
Инструкции: действия, прилагаемые к срезу трафика, такие как модификация поля заголовка пакета, или направление пакета на определённый выходной порт. Параметр TrafficTreatment содержит набор инструкций, которые выполняются через интерфейс Instruction.
Для Intents имеются два основных идентификатора: ApplicationId – от приложения, направившего намерение, и уникальный идентификатор IntentId, который генерируется при создании намерения.
Релизы ONOS
C 2014 года было выпущено несколько десятков релизов ONOS, часть из которых уже не поддерживается[1].
Таблица 2- 1. Релизы ONOS.
Название релиза | Версия | Дата выхода | Тип файлов |
Woodpecker | 2.6.0 | Jul 16, 2021 | tar.gz |
Uguisu | 2.4.0 | Jun 5,2020 | tar.gz |
Toucan | 2.3.0 | Jan 27,2020 | tar.gz |
Sparrow | 2.2.0 | Aug 30,2019 | tar.gz |
2.2.1 | Feb 20, 2020 | tar.gz | |
2.2.2 | Mar 25, 2020 | tar.gz | |
2.2.3 | Jul 3, 2020 | tar.gz | |
Raven | 2.1.0 | Apr 30, 2019 | tar.gz |
Quail | 2.0.0 | Jan 18, 2019 | tar.gz |
Peacock (LTS) | 1.15.0 | Nov 29, 2018 | tar.gz |
Owl | 1.14.0 | Sep 4, 2018 | tar.gz |
Nightingale | 1.13.10 | Feb 20, 2020 | zip, tar.gz |
1.13.3 | Sep 5, 2018 | zip, tar.gz | |
1.13.2 | July 11, 2018 | zip, tar.gz | |
1.13.1 | May 2, 2018 | zip, tar.gz | |
Magpie | 1.12.0 | Dec 11, 2017 | zip, tar.gz |
Loon | 1.11.2 | March 28, 2018 | zip, tar.gz |
1.11.1 | Sep 15, 2017 | zip, tar.gz | |
1.11.0 | Sep 8, 2017 | zip, tar.gz | |
Kingfisher | 1.10.4 | Aug 25, 2017 | zip, tar.gz |
1.10.3 | Aug 2, 2017 | zip, tar.gz | |
1.10.2 | Jun 22, 2017 | zip, tar.gz | |
1.10.0 | Jun 5, 2017 | zip, tar.gz | |
Junco | 1.9.2 | Jun 22, 2017 | zip, tar.gz |
1.9.0 | Feb 28, 2017 | zip, tar.gz | |
Ibis | 1.8.9 | Jun 22, 2017 | zip, tar.gz |
1.8.7 | May 15, 2017 | zip, tar.gz | |
1.8.6 | May 9, 2017 | zip, tar.gz | |
1.8.5 | May 8, 2017 | zip, tar.gz | |
1.8.4 | Mar. 9, 2017 | zip, tar.gz | |
1.8.3 | Mar. 8, 2017 | zip, tar.gz | |
1.8.2 | Jan 12, 2017 | zip, tar.gz | |
1.8.0 | Dec. 9, 2016 | zip, tar.gz | |
Hummingbird | 1.7.1 | Oct. 25, 2016 | zip, tar.gz |
1.7.0 | Sept. 23, 2016 | zip, tar.gz | |
Goldeneye | 1.6.0 | Jun. 24, 2016 | zip, tar.gz |
Falcon | 1.5.1 | Apr. 20, 2016 | zip, tar.gz |
1.5.0 | Mar. 10, 2016 | zip, tar.gz | |
Emu | 1.4.0 | Dec. 16, 2015 | zip, tar.gz |
Drake | 1.3.0 | Sept. 18, 2015 | zip, tar.gz, deb, rpm |
Cardinal | 1.2.2 | Sept. 1, 2015 | zip, tar.gz |
1.2.1 | June 25, 2015 | zip, tar.gz | |
1.2.0 | June 5, 2015 | zip, tar.gz | |
Blackbird | 1.1.0 | Mar. 17, 2015 | zip, tar.gz |
Avocet | 1.0.1 | Jan. 22, 2015 | zip, tar.gz |
1.0.0 | Dec. 5, 2014 | zip, tar.gz |
Последнюю актуальную версию ONOS в виде контейнера Docker можно скачать с сайта Docker Hub по ссылке: https://hub.docker.com/r/onosproject/onos/.