Привет! Меня зовут Дмитрий, в Росбанке я занимаюсь автоматизацией сетевой инфраструктуры. Этим постом я начинаю серию публикаций о NetBox — популярном опенсорс-инструменте для документирования инфраструктуры на уровне IP-адресации (IPAM) и железа (DCIM). NetBox ценен тем, что даже с базовой функциональностью «из коробки» он предоставляет множество возможностей, не говоря уже о допиливании через форки. Далее я представлю NetBox подробнее и на нашем примере расскажу, с чего начинать работу.
Для чего нужен NetBox
NetBox, по сути, является базой данных, где можно смоделировать все объекты сети и хранить всю информацию о них. Такую модель можно использовать как стартовую точку для автоматизации сети. А благодаря удобному UI и простоте использования, NetBox можно применять и на первом уровне поддержки для первичной обработки кейсов. Наконец, NetBox может стать точкой Source of Truth (SOT), через которую будет осуществляться всё взаимодействие с сетью.
Source of Truth — «центр правды» — должен всегда соответствовать реальному состоянию сети. В случае расхождений мы либо переделываем сеть, либо переписываем NetBox. Любая активность с сетью всегда должна быть согласована с NetBox. А вот насколько подробно отражать всё в NetBox, каждый пользователь уже решает, исходя из своих потребностей. Не всем нужен, например, полный список SFP-модулей с серийниками.
Наш пример внедрения: NetBox для кабель-менеджмента в сетевой фабрике Cisco ACI
Расскажу теперь, как мы сами начинали работу с NetBox. В качестве первой площадки выбрали сетевую фабрику для Cisco ACI.
Вручную настраивать ACI сложно, поэтому мы планировали очень тесно подружить ее с NetBox. Через скрипты всё делать гораздо проще, при условии, что все варианты унифицированы и хорошо параметризованы. Скрипт настройки фабрики способен обработать даже таблицы Excel, и с NetBox проблем быть не должно.
Большая часть взаимодействия с NetBox проходит через REST. Я советую сразу принять эту практику как основную и ничего не добавлять вручную. Для сбора нужных данных можно опросить сеть или распарсить свои базы в Excel. У нас NetBox используется в ЦОДе. Для менеджмента новых и старых подключений нам очень важно иметь корректную картину по стойкам, юнитам и кабельным соединениям.
Вернемся к нашей задаче. Мы хотели создать в NetBox кабельный журнал, по которому в любой момент можно проследить любое соединение через все его кроссировки.
Что нужно будет для этого занести в NetBox:
все стойки ЦОД,
все патч-панели с портами и их коммутацию,
коммутаторы и их интерфейсы,
свободные и занятые порты — это пригодится, когда будем управлять новыми подключениями и прокидывать трассы для новых клиентов.
Собрать нужную информацию просто, когда у нас есть прямая связь между коммутаторами. А если на этом пути появляются розетки на стороне клиента, этажные и межэтажные патч-панели? Или мы работаем с оптическим соединением через оптические кросы, муфты и сплайсы? Тогда данные придется собирать из разных источников. Но результат будет стоить потраченных усилий, ведь любой сотрудник эксплуатации сможет прямо «в поле» со своего мобильного зайти в NetBox, проследить нужные кроссировки, найти свободный порт не в резерве, оставить фото в карточке объекта. В общем, осуществить весь менеджмент готовности трассы прямо на ходу.
NetBox разделяет логические и физические соединения. Логические соединения — это наши интерфейсы, которые будут связаны во вкладке «Интерфейсы», даже если физически соединение организовано сложнее. Для физических соединений в NеtBox предусмотрена концепция сквозного прохода.
О заполнении коммутаторами и портами мы подробней поговорим позже, в статье, посвященной устройствам в NetBox. Сейчас предположим, что они у нас уже заведены, и начнем с более простых вещей — патч-панелей. У патч-панелей есть связанные задние и передние порты. Передние порты панели соединяются с коммутатором, задние — с другими патч-панелями. Учтите, что NetBox позволяет соединять несовместимые медь и оптику, не ругаясь при этом. Вот как логически выглядит объект патч-панели:
Каждый линк — это отдельное соединение, для которого можно установить свой цвет (удобно для оптики), статусы и теги. Патч-панели, как и другие устройства, можно создавать из готовых шаблонов, не прописывая внутреннюю кроссировку передних и задних портов вручную.
Вложенные объекты в NetBox
При моделировании сетей приходится иметь дело и с более сложными объектами, например, оптическими кроссами. С ними придется повозиться подольше. Логически это устройство выглядит так:
Здесь пора познакомиться с важной функцией NetBox — созданием родительских отношений через вложенные объекты. Вложенные объекты не занимают места в стойке, но при этом являются полноценными девайсами со всеми атрибутами. Вот, например, как создать такой объект для шаблона патч-панели:
Добавляем статус Parent для шаблона патч-панели. Порты патч-панели можно создать и связать заранее в шаблоне.
Добавляем для шаблона патч-панели необходимое количество слотов расширения через device bays, называем их.
Создаем шаблон сплайса, устанавливаем статус Child, 0 мест в стойке, задаем количество портов FRONT и REAR.
Добавляем в стойку патч-панель, сплайсы добавляем в стойку без места. После того как сплайсы появятся в стойке, их можно добавить в слоты расширения патч-панели.
Добавляем соединение между задними портами патч-панели и передними портами сплайсов, согласно информации о кроссировках.
Добавляем соединение между задними портами сплайсов, ответных сплайсов или патч-панелей в других шкафах, согласно данным о кроссировках.
Таким образом можно создать удобный кабельный журнал для оптики, разложив трассы по сплайсам и разметив модули/волокна цветами. Увы, вложенные объекты нельзя заранее разложить в шаблоне, чтобы быстро создавать потом готовый кросс.
Моделируя логические сущности с их желаемым поведением, в NetBox можно найти способ решения задачи, подходящий именно для вашего кейса. Инструмент гибкий и дает большой простор для поиска новых решений. Конечно, для наполнения базы потребуется некоторое время и, возможно, даже инвентаризация. Но потом (если вы уговорите всех жить через NetBox) все усилия будут оправданы :)
Автоматизация работы в NetBox
Более подробно автоматизация будет рассмотрена в следующем посте. Здесь я оставлю инструкцию для старта, когда вы только-только заполнили базу.
Начните с того, что точно не может сломать сеть — отчетов, сортировок, поисковых запросов. Почувствовав некоторую уверенность, переходите к более сложным компонентам. Например, сформируйте стартовые конфиги для железа.
Настройте NetBox для сбора информации из сети, для начала только в GET-режиме.
Время выходить на живую сеть. Сделайте, например, описания портов и настройте новые порты для клиентов.
Освоившись с основными инструментами, можно начинать внедрять процессы работы с сетью как с кодом. То есть вводить контроль версий и закреплять гарантированно рабочий конфиг, чтобы можно было на него откатиться.
Важно также прикрутить протоколы для проверки коммитов и соответствующие тесты. Для большой и сложной сети здесь придется идти на компромисс. Не всегда можно взять и развернуть копию целого ЦОДа, поэтому нужно будет выбирать для тестирования самое важное.
Как узнать больше
У NetBox есть комьюнити в слаке (Networktocode и NetDev Community), где можно спросить совета или почитать, что как делают коллеги. В сложных случаях мне всегда там помогали. Пощупать Netbox без развертывания у себя можно в песочнице Digital Ocean. Раз в день она сбрасывается в дефолт. Для тестов доступна админка и REST.
В следующем посте я остановлюсь на добавлении автоматизаций в NetBox — следующем шаге после наполнения базы. Если у вас появились вопросы по платформе, буду рад ответить в комментариях.
Комментарии (10)
woo_hung
10.03.2022 14:45Удачи в этом нелегком пути.
Вы меня опередили (было желание для себя писать такой же цикл, ибо пока сдавал CCNA, автоматизация захватила все внимание) подписался и буду работать параллельно с вами :) Как-то же надо влезать в автоматизацию, долго оттягивать не получится :) Главное не бросайте!
freejoins
11.03.2022 06:17А будет такая же статья по разделу "Питание(Power)"? Ну и как правильно соединять все эти фиды и панели? Как потом отследить трассу от БП устройства до конкретного УПС?
hiddenman
12.03.2022 01:41Какую версию используете? В последних 3.x очень много сделано, а 3.2 еще более революционные изменения, уговорили Jeremy сделать множество улучшений, надо прямо на нее переходить, следующая версия уже релиз (через 1-2 недели). Для учета различных SFP-модулей, привязок их к портам и прочему - must have, плюс он наконец-то сделал any object to any object связи (можно что угодно к чему угодно привязывать), всякие шаблонизаторы для сложных железок с множеством модулей и т.п.
Я поверх Netbox написал плагин для автоматической инвентаризации всех Linux/macOs/Windows железок с замороченной логикой.
Чего еще не хватает - действительно хорошей и удобной карты сети. Есть 3 или 4 плагина, но все они не очень удобные, наглядные и функциональные.
dmitry-net Автор
12.03.2022 16:19С нетерпением жду выхода 3.2 для обновления на неё, там действительно очень много вкусностей. Одни только кастомные поля ссылающиеся на другие модели сколько костылей позволят убрать наконец) Но пока на 2.11)
hiddenman
12.03.2022 20:18Да-да, я именно про эти поля и написал, сам их жду. А так же еще всякие штуки, крайне полезные в учете.
Debug_all
12.03.2022 16:49Чего еще не хватает - действительно хорошей и удобной карты сети. Есть 3 или 4 плагина, но все они не очень удобные, наглядные и функциональные.
Как автор самого популярного на текущий момент NetBox-плагина добавлю, что конструктивные предложения по улучшению и замечания по удобству и наглядности всегда ждут своего issue, feature или даже pull request'а на GitHub. Некоторый функционал (например, фильтр по L2-топологии) уже был реализован со стороны комьюнити.
Arxitektor
Как я понимаю это более функциональный аналог phpipam https://phpipam.net/ ?
Можно ли перенесли данные из phpipam в NetBox ?
dmitry-net Автор
Да, всё верно, более функциональный аналог.
Перенести данные можно написав переходник из API в API. Планирую написать об этом переезде пост-инструкцию когда соберём все грабли.