Архитектура Neutron
Neutron — система управления виртуальными сетями (SDN) в VK Private Cloud. Она принимает запросы пользователей на создание, редактирование и удаление сетевых сущностей и реализует их через сетевые агенты на узлах: создает сетевые интерфейсы, обеспечивает их изоляцию, разворачивает DHCP, NAT и другие сервисы.
Компоненты управления Neutron приведены в таблице 1.
Компонент | Назначение | Расположение |
|---|---|---|
REST API, управление сетевыми сущностями | Управляющие узлы | |
Очередь сообщений между Neutron-server и агентами | Управляющие узлы (кластер Kubernetes) | |
Хранение информации о сетевых сущностях | Управляющие узлы (кластер Galera) | |
Реализация сетевой конфигурации | Управляющие, сетевые и вычислительные узлы |
При создании или изменении сетевой сущности компоненты Neutron взаимодействуют следующим образом:
- Запрос поступает через REST API на порт
9696на HAProxy. - HAProxy перенаправляет запрос на Neutron-server на порт
9696. - Neutron-server обрабатывает запрос и назначает VLAN ID для новой сети на мосту
br-int. - Neutron-server записывает сетевую сущность в MariaDB.
- Neutron-server публикует сообщение с конфигурацией в RabbitMQ.
- Сетевые агенты получают сообщение из RabbitMQ и реализуют настройки на своих узлах: создают пространства имен, сетевые интерфейсы, настраивают Iptables, подключают интерфейсы к мостам Open vSwitch. Подробнее о том, как агенты реализуют настройки — в статье Сетевые агенты и их пространства имен.
Neutron-server — центральный сервис Neutron, который обрабатывает запросы на создание, редактирование и удаление сетевых сущностей: сетей, подсетей, портов, маршрутизаторов и т. д.
В VK Private Cloud Neutron-server реализован в виде systemd-сервиса на управляющих узлах. Чтобы получить информацию о нем, выполните команду на управляющем узле:
# systemctl status neutron-server.service
Neutron-server работает на порту 9696. Запросы поступают через HAProxy, развернутый на управляющих узлах. Чтобы получить информацию о процессах, слушающих порт 9696, выполните команду на управляющем узле:
# netstat -nltp | grep :9696
RabbitMQ — брокер сообщений, через который Neutron-server передает конфигурацию сетевым агентам. Каждый агент подписан на свою тему очереди: L3-агент подписан на l3_agent, DHCP-агент — на dhcp_agent.
В VK Private Cloud RabbitMQ для Neutron развернут в Kubernetes-кластере на управляющих узлах в виде трех подов. Чтобы получить информацию о подах, выполните команду на управляющем узле:
# kubectl -n rabbitmq get pods | grep neutron
MariaDB — база данных, в которой Neutron-server хранит все сетевые сущности инсталляции: сети, подсети, порты, маршрутизаторы, Floating IP и т.д. Для Neutron выделяется отдельный кластер MariaDB в Galera.
Чтобы получить статус MariaDB для Neutron, выполните команду на управляющем узле:
# systemctl status mariadb-neutron