Программно определяемая сеть (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 очень просто, просто выполните следующие шаги:
- Загрузите дистрибутив ODL отсюда.
- Разархивируйте дистрибутив ODL.
- Войдите в подкаталог bin, расположенный в каталоге верхнего уровня загруженного пакета.
- Выполните следующую команду, чтобы запустить контроллер: 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