Поиск по сайту:

Программно определяемая сеть (SDN) — соединение OpenFlow и OVSDB


Эта статья основана на соединении OpenFlow и OVSDB между контроллером SDN и коммутаторами на основе Openflow и содержит подробные сведения о жизненном цикле соединения. Мы будем использовать контроллер SDN с открытым исходным кодом, т. е. выпуск Opendaylight (ODL) Carbon, и виртуальный коммутатор Openflow, т. е. OpenVswitch (OVS) версии 2.6.0, чтобы описать соединение OVSDB и Openflow.

Контроллер SDN управляет базовыми коммутаторами Openflow через два типа подключения:

  • ОВСДБ
  • Открытый поток

OVSDB и подключение Openflow

OVSDB — это протокол управления базой данных OVS, который определяет схему базы данных OVS и спецификацию связи между контроллером и коммутатором. Контроллер SDN использует этот протокол для управления коммутатором OVS, заполняя его базу данных предполагаемой конфигурацией.

Как правило, контроллер SDN работает в пассивном режиме для прослушивания подключений OVSDB и Openflow от OVS через порты 6640 и 6653 соответственно.

Итак, во-первых, давайте запустим контроллер ODL, вы можете скачать его отсюда. Обязательным условием является установка переменной среды JAVA_HOME в вашей системе на последнюю версию Java. Запустить ODL очень просто, просто выполните следующие шаги:

  1. Загрузите дистрибутив ODL отсюда.
  2. Разархивируйте дистрибутив ODL.
  3. Войдите в подкаталог bin, расположенный в каталоге верхнего уровня загруженного пакета.
  4. Выполните следующую команду, чтобы запустить контроллер: karaf

Ниже приведено изображение выполненных выше шагов:

Поскольку нам нужно управлять коммутаторами OVS, к которым будут устанавливаться соединения OVSDB и Openflow, плагины Openflow и OVSDB должны быть установлены в ODL. что нужно сделать Это можно сделать, как показано ниже:

После установки плагинов Openflow и OVSDB ODL начинает прослушивать соединения Openflow и OVSDB на портах 6653 и 6640 соответственно. Это можно проверить на контроллере, выполнив следующие команды:

netstat -a | grep 6653
netstat -a | grep 6640

Следует отметить, что переключатель OVS уже должен быть запущен до выполнения любой команды OVS. Чтобы запустить OVS в Ubuntu, выполните следующую команду с правами суперпользователя:

sudo /etc/init.d/openvswitch-switch start

Он доступен как услуга, поэтому вы также можете проверить его статус.

sudo /etc/init.d/openvswitch-switch status

После запуска OVS вы также можете выполнять его команды CLI. Например,

sudo ovs-vsctl show

Ниже приведено изображение вывода выполнения вышеуказанной команды:

На стороне OVS выполняется команда ниже, чтобы инициировать соединение OVSDB с контроллером:

ovs-vsctl set-manager tcp:<controller-IP>:6640

Чтобы подтвердить, что соединение установлено, можно запустить приведенную ниже команду, которая показывает, что для флага is_connected установлено значение true в выходных данных.

sudo ovs-vsctl show

Соединение Openflow выполняется через мост, поэтому либо вы можете создать мост в OVS, либо ODL также может создать мост в OVS, отправив конфигурацию в OVS через соединение OVSDB. Через мост в OVS можно выполнить следующую команду для подключения моста к ODL, которая устанавливает соединение Openflow между ODL и OVS.

ovs-vsctl set-controller <bridge name> tcp:<controller-IP>:6653

Ниже приведены сведения об их подключении.

Как мы видели со стороны OVS, соединения OVSDB и Openflow были установлены, и то же самое можно проверить на стороне ODL, выполнив следующие команды.

netstat -a | grep 6653
netstat -a | grep 6640

Посмотрите на изображение ниже для вывода команд, которые подтверждают состояние соединения ESTABLISHED:

Поскольку соединение OVSDB и Openflow основано на TCP, сообщения, которыми обмениваются ODL и OVS, могут быть легко перехвачены с помощью программного обеспечения Wireshark. Посмотрите ниже изображение захвата пакета, которое показывает сообщения, которыми обменивались во время установки соединения.

В журналах перехвата пакетов Wireshark вы можете увидеть различные сообщения Openflow, которыми обмениваются контроллер и OVS во время установки соединения.

Как вы видите, во время установки соединения ODL отправил сообщения FEATURES_REQUEST Openflow, а в ответ ODL получил FEATURES_REPLY от OVS. В сообщениях FEATURES_REPLY ODL получает идентификатор пути данных (то есть уникальный идентификатор) моста OVS, который обеспечивает пересылку (на основе правил Openflow, настроенных OFL) трафика между виртуальными машинами, подключенными к портам OVS.

На стороне OVS можно запустить следующую команду, чтобы отобразить сведения о мосте.

sudo ovs-ofctl show br-int -OOpenFlow13

Проверьте изображение ниже для вывода команды:

Здесь вы можете видеть, что FEATURE_REPLY показывает идентификатор пути данных (в шестнадцатеричном формате) моста в OVS.

Даже ODL имеет функцию панели управления DLUX, которая предоставляет веб-интерфейс GUI для контроллера ODL по адресу http://localhost:8181/index.html, на котором пользователь ODL может войти в систему (по умолчанию имя пользователя и пароль «admin») и проверить топологию сети на браузер системы, в которой работает ODL. Проверьте изображения ниже.

На изображении выше вы можете видеть, что коммутатор OVS показан в топологии сети, управляемой контроллером ODL. Поскольку мы подключили только один коммутатор, поэтому показан только один узел Openflow. Здесь коммутатор OVS показан с идентификатором пути данных в десятичном формате.

Чтобы удалить соединение Openflow с ODL, в OVS можно запустить следующую команду:

ovs-vsctl del-controller <bridge name>

Чтобы удалить соединение OVSDB с ODL, в OVS можно запустить следующую команду:

ovs-vsctl del-manager

После удаления соединения флаг «is_conncted», который был «истинным» при установлении соединения, исчезнет из вывода CLI-команды «ovs-vsctl show» OVS.

На изображении ниже показано удаление соединения OpenFlow и OVSDB, инициированное со стороны OVS:

Для отладки и устранения неполадок вы можете проверить файлы журналов, хранящиеся в ODL и OVS.

Путь ведения журнала ODL

Когда дистрибутив ODL (который вы загрузили) распаковывается и вы запускаете двоичный исполняемый файл karaf, создается подкаталог log, содержащий файлы karaf.log, и их общий путь: ~/distribution-karaf -<номер-версии>-<имя выпуска>/data/log.

Проверьте изображение ниже для файлов журнала стороны ODL.

Путь ведения журнала OVS

Когда OVS работает, он создает файл журнала OVSDB с именем «ovsdb-server.log» и файл журнала Openflow с именем «ovs-vswitchd.log» по пути:

/var/log/openvswitch

Посмотрите на изображение ниже для файлов бокового журнала OVS для модулей OVSDB (ovsdb-server.log) и Openflow (ovs-vswitchd.log) OVS.

                                                   +===+
This article is co-authored by Tarun Thakur.

Использованная литература:

  • https://www.rfc-editor.org/rfc/rfc7047.txt