Автоматизация программируемых сетей

Издательство: ДМК-Пресс
Автор: Осуолт М., Эделман Дж., Лоу С.С.
ISBN: 978-5-97060-699-5
Страниц: 616
Язык: Русский
Год издания: 2019

 
 
 

Описание книгиСодержаниеДополнительно

Книги по IT. Цель этого руководства – позволить читателям получить основы знаний о сетевой программируемости и автоматизации. Авторы надеются, что представители различных профессий в области информационных технологий извлекут пользу из чтения этого издания. Книга поможет сетевым инженерам сделать свою повседневную работу более эффективной и производительной. Для тех кто заинтересован в более углубленном изучении материала, не нужны какие-либо предварительные знания в области разработки ПО, программирования, инструментальных средств, которые связаны с DevOps. Наверняка, уже обладают предварительным уровнем знаний и опытом использования на практике инструментальных средств, рассматриваемых в руководстве (в особенности ОС Linux, систем управления исходным кодом и систем управления конфигурацией) системные администраторы, в основном отвечающие за управление системами, которые подключены к сетям. Издание может помочь им расширить знания и понимание функциональности таких инструментов, представляя их в различных контекстах (например, использование Ansible для конфигурирования сетевого коммутатора в сравнении с использованием Ansible для конфигурирования сервера, работающего под управлением Linux). Разработчики ПО также получат много полезной информации при чтении этого издания. В основном они уже обладают опытом работы с языками программирования и средствами разработки, обсуждаемыми в книге (например, Python и Git). Для них окажется полезным рассмотрение использования средств разработки и языков программирования в применении к сетевым средам (описаны возможности Python для извлечения и сохранения сетевых данных). Читатели руководства должны знать основные сетевые протоколы и концепции, поскольку все примеры в издании выполняются исключительно в сетевой среде.

Предисловие 12
Глава 1. Тенденции в современной промышленной
эксплуатации сетей 20
Возникновение технологии программно определяемой сети 20
OpenFlow 21
Что такое программно определяемая сеть 25
Резюме 39
Глава 2. Автоматизация сети 40
Для чего нужна автоматизация сети 40
Упрощение архитектуры 41
Детерминированные результаты 42
Гибкость бизнеса 42
Типы автоматизации сети 43
Подготовка и настройка устройств 43
Сбор данных 46
Переходы между платформами 47
Управление конфигурацией 49
Совместимость 49
Составление отчетов 50
Устранение проблем 51
Развитие уровня управления от протокола SNMP до API устройств 53
Прикладные программные интерфейсы (API) 53
Влияние концепции открытых сетей 57
Автоматизация сети в эпоху SDN 58
Резюме 59
Глава 3. Операционная система Linux 60
Изучение ОС Linux с точки зрения автоматизации сети 60
Краткая история создания ОС Linux 61
Дистрибутивы Linux 62
Red Hat Enterprise Linux, Fedora и CentOS 62
Debian, Ubuntu и другие производные дистрибутивы 64
Другие дистрибутивы Linux 66
Работа в ОС Linux 66
Перемещение по файловой системе 67
Работа с файлами и каталогами 72
Выполнение программ 79
Работа с демонами 82
Работа с сетями в ОС Linux 87
Работа с интерфейсами 87
Маршрутизация для конечного хоста 98
Конфигурация маршрутизатора 103
Коммутация 105
Резюме 111
Глава 4. Изучение языка программирования Python для применения в сетевой среде 112
Должны ли сетевые инженеры уметь писать программный код? 113
Использование интерактивного интерпретатора Python 115
Типы данных языка Python 117
Использование строк 118
Использование числовых значений 128
Использование логических значений 130
Использование списков 133
Использование словарей 138
Множества и кортежи языка Python 143
Использование условных логических выражений 145
Концепция объекта, содержащего другие объекты 148
Использование циклов 149
Использование цикла while 149
Использование цикла for 150
Использование функций 154
Работа с файлами 158
Чтение данных из файла 158
Запись данных в файл 161
Создание программ на языке Python 163
Создание простого скрипта на языке Python 163
Что такое shebang 164
Перемещение кода из интерпретатора Python в независимый скрипт 166
Работа с модулями языка Python 167
Передача аргументов в скрипт 169
Использование pip для установки пакетов языка Python 171
Советы, приемы и дополнительная информация по использованию языка Python 173
Резюме 179
Глава 5. Форматы и модели данных 180
Введение в форматы данных 180
Типы данных 182
YAML 184
Краткий обзор основ YAML 184
Работа с YAML в коде Python 187
Модели данных в YAML 188
XML 190
Основы XML 190
Использование определения схемы XML Schema Definition (XSD) для моделей данных 191
Преобразование XML с помощью XSLT 193
Поиск в данных XML с использованием XQuery 197
JSON 197
Основы формата JSON 198
Обработка формата JSON в коде Python 200
Использование механизма JSON Schema для моделей данных 201
Создание моделей данных с использованием YANG 202
Общий обзор языка YANG 202
Практическое применение языка YANG 203
Резюме 207
Глава 6. Шаблоны сетевой конфигурации 208
Современные языки шаблонов 209
Использование шаблонов для веб-разработки 210
Универсальность шаблонов 211
Важность использования шаблонов в процессе автоматизации сети 212
Язык Jinja для создания шаблонов сетевой конфигурации 213
Почему именно Jinja 213
Динамическая вставка данных в простой шаблон Jinja 214
Обработка файла шаблона Jinja средствами языка Python 215
Условные выражения и циклы 217
Фильтры Jinja 224
Наследование шаблонов в языке Jinja 227
Создание переменных в Jinja 228
Резюме 229
Глава 7. Использование сетевых прикладных программных интерфейсов (API) 230
Основы сетевых API 231
Введение в API-интерфейсы на основе протокола HTTP 231
Основы NETCONF 236
Практическое использование сетевых API 244
Практическое использование API на основе протокола HTTP 245
Практическое использование NETCONF 252
Автоматизация с использованием сетевых API 261
Использование библиотеки requests 262
Использование Python-библиотеки ncclient 292
Использование библиотеки netmiko 317
Резюме 322
Глава 8. Управление исходным кодом с помощью Git 325
Варианты использования средств управления исходным кодом 326
Преимущества системы управления исходным кодом 326
Отслеживание изменений 327
Учетные записи 327
Процесс и рабочий поток 327
Преимущества системы управления исходным кодом в сетевой среде 328
Знакомство с Git 328
Краткая история создания и развития Git 329
Терминология Git 330
Обзор архитектуры Git 331
Работа с системой Git 332
Установка системы Git 332
Создание репозитория 333
Добавление файлов в репозиторий 333
Выполнение коммита изменений в репозиторий 335
Внесение изменений и выполнение коммитов в отслеживаемые файлы 339
Отмена фиксации файлов в индексе 342
Исключение файлов из репозитория 345
Получение более подробной информации о репозитории 349
Определение различий между версиями файлов 354
Создание ветвей версий в системе Git 358
Создание ветви 363
Выбор активной ветви 364
Объединение и удаление ветвей 366
Совместная работа группы сотрудников в системе Git 371
Совместная работа в нескольких системах, использующих Git 372
Совместная работа с использованием онлайновых сервисов на основе Git 389
Резюме 395
Глава 9. Инструментальные средства автоматизации 396
Краткий обзор инструментальных средств автоматизации 396
Использование Ansible 399
Основы работы Ansible 400
Создание inventory-файла 401
Выполнение сценария Ansible 408
Использование файлов переменных 412
Создание комплектов сценариев Ansible для автоматизации сети 414
Использование сторонних модулей Ansible от независимых авторов 433
Резюме по системе Ansible 436
Автоматизация сети с использованием Salt 437
Основы архитектуры Salt 437
Общая информация о Salt 440
Управление сетевыми конфигурациями с помощью Salt 458
Удаленное выполнение функций Salt 467
Управляемая событиями инфраструктура Salt 469
Дополнительная информация о Salt 475
Краткий итоговый обзор системы Salt 478
Автоматизация сети, управляемая событиями, с использованием StackStorm 479
Основные концепции системы StackStorm 480
Архитектура StackStorm 482
Операции и рабочие потоки 484
Сенсоры и триггеры 493
Правила. 496
Краткий итоговый обзор системы StackStorm 499
Резюме 499
Глава 10. Непрерывная интеграция 500
Важные предпосылки 502
Чем проще, тем лучше 502
Люди, процесс и технология 503
Изучение программного кода 503
Введение в непрерывную интеграцию 504
Основы непрерывной интеграции 504
Непрерывная доставка 506
Разработка через тестирование 508
Применимость методики непрерывной интеграции к сетевой среде 511
Конвейер непрерывной интеграции для сетевой среды 512
Рецензирование коллегами 513
Автоматизация сборки 519
Среда тестирования/разработки/перемещения данных 524
Инструментальные средства развертывания. 528
Инструментальные средства тестирования и автоматизация сети по методике разработки через тестирование 531
Резюме 533
Глава 11. Формирование культуры автоматизации сети 535
Организационная стратегия и гибкость 536
Преобразование организации старого образца 536
Важность поддержки со стороны руководства 538
Купить или создать самостоятельно 540
Восприятие ситуаций критических сбоев 541
Практические навыки и обучение 543
Изучайте неизвестное 544
Сосредоточьтесь на основных принципах 545
Нужны ли сертификации? 546
Может ли автоматизация лишить людей работы 547
Резюме 548
Приложение А. Профессиональное управление сетевой средой в ОС Linux 550
Использование интерфейсов macvlan 550
Варианты практического использования интерфейсов macvlan 551
Создание, конфигурирование и удаление интерфейсов macvlan 551
Виртуальные машины в сетевой среде 553
Использование шлюза 554
Использование интерфейсов macvtap 557
Работа с сетевыми пространствами имен 558
Практические примеры использования сетевых пространств имен 559
Создание и удаление сетевых пространств имен 560
Размещение интерфейсов в сетевом пространстве имен 560
Выполнение команд в определенном сетевом пространстве имен 562
Соединение сетевых пространств имен с помощью пар veth 564
Использование контейнеров Linux в сетевой среде 566
Конфигурирование сетевой среды в LXC 567
Конфигурирование сетевой среды в Docker 568
Использование Open vSwitch 570
Установка OVS 570
Конфигурирование OVS 572
Соединение нескольких типов рабочих нагрузок в OVS 575
Приложение Б. Использование NAPALM 583
Управление конфигурацией с использованием NAPALM 583
Выполнение операции замены конфигурации 584
Выполнение операции объединения конфигураций 588
Получение данных от устройств с помощью NAPALM 591
Возможности интеграции NAPALM с другим ПО 593
Использование NAPALM в Ansible 594
Использование NAPALM в Salt 595
Использование NAPALM в StackStorm 596
Предметный указатель 598

О чем эта книга.
В соответствии с названием главной темой книги является сетевая программируемость (программно управляемые сети) и автоматизация. По существу, сетевая программируемость и автоматизация практически является синонимом упрощения задач по конфигурированию, управлению и эксплуатации сетевого оборудования, сетевых топологий и поддержки сетевых соединений. При этом используется множество разнообразных компонентов, в том числе операционные системы, которые в настоящее время гораздо шире применяются в сетевых средах, чем в прошлом, новые методики, например методика непрерывной интеграции (continuous integration), и привлечение инструментальных средств, прежде относящихся только к арсеналу системного администратора (например, средства управления версиями исходного кода и системы управления конфигурацией). Мы полагаем, что все перечисленные компоненты играют важную роль в базовом определении сущности сетевой программируемости и автоматизации, поэтому рассматриваем все эти темы. Цель данной книги – позволить читателям получить основы знаний о сетевой программируемости и автоматизации.
Как организована эта книга.
Эту книгу не обязательно штудировать последовательно, страницу за страницей, мы разделили ее на главы таким образом, чтобы читатель с легкостью находил наиболее интересные ему темы. Возможно, правильнее всего будет начать с последовательного чтения первых трех глав, так как в них представлена общая информация, то есть фактически закладывается основа понимания всей остальной части книги. Далее вы можете свободно переходить к темам, которые вам наиболее интересны или немедленно требуются для практической работы. Мы пытались сохранить относительную независимость глав друг от друга, но, как и в процессе применения любой технологии, это оказалось не всегда выполнимо. Везде, где это возможно, мы приводим перекрестные ссылки, чтобы помочь читателям быстро находить необходимую информацию.
Ниже приводится краткий обзор организации книги по главам:
Глава 1 «Тенденции в современной промышленной эксплуатации сетей» представляет обзор основных событий и тенденций, способствовавших появлению программно определяемых сетей (software defined networks, SDN). Как вы увидите в главе 1, программно определяемая (или конфигурируемая) сеть стала главной первопричиной постоянно возрастающего сосредоточения внимания на сетевой программируемости и автоматизации;
Глава 2 «Автоматизация сети» продолжает обсуждение программно определяемых сетей, начатое в главе 1, но здесь главное внимание уделяется автоматизации сети: истории развития, влиянию сетевой автоматизации на операционные (рабочие) модели (и влиянию операционных моделей на автоматизацию);
Глава 3 «ОС Linux» представляет общий обзор операционной системы Linux. Эта глава не является полным описанием ОС Linux, ее основная задача – быстро ознакомить специалистов по сетям с рабочей средой Linux, с основным набором команд и с сетевыми концепциями, реализованными в Linux;
Глава 4 «Изучение языка программирования Python в сетевом контексте» знакомит специалистов по сетям с языком программирования Python. Язык Python часто применяется для программируемых сетей и их автоматизации, поэтому в главе рассматриваются многие основные аспекты программирования на Python: типы данных, условные выражения, циклы, работа с файлами, функции, классы и модули;
Глава 5 «Форматы и модели данных» представляет наиболее распространенные форматы данных, которые часто встречаются в проектах автоматизации сетей. Рассматриваются языки обработки данных JavaScript Object Notation (JSON), eXtensible Markup Language (XML), YAML Ain’t Markup Language (YAML). Затем описываются концепции моделирования данных и приводится краткое введение в язык YANG, широко распространенный язык моделирования данных для сетевой среды;
Что означает термин «формат данных»
Если для вас это незнакомый термин, не смущайтесь. Формат данных (data format) – это всего лишь способ кодирования или инкапсуляции данных при передаче между двумя пунктами (например, при возврате данных в ответ на вызов функции прикладного программного интерфейса (API)). Форматы данных подробно рассматриваются в главе 5.
Глава 6 «Шаблоны конфигурации сети» – рассматривается использование языков описания шаблонов для создания конфигураций сетевых устройств. Основное внимание сосредоточено на языке шаблонов Jinja, так как он весьма удачно взаимодействует с языком программирования (ЯП) Python. Кроме того, рассматриваются еще два языка описания шаблонов: Mako и ERB. Mako интегрируется с ЯП Python, а ERB используется в основном совместно с ЯП Ruby;
Глава 7 «Работа с сетевыми прикладными программными интерфейсами (API)» – рассматривается роль прикладных программных интерфейсов (application programming interfaces, API) в обеспечении сетевой программируемости и автоматизации. Описываются основные термины и технологии, применяемые в API, а также применение некоторых наиболее распространенных API от конкретных производителей – API для устройств и API для контроллеров – с примерами, наглядно демонстрирующими возможности их использования для обеспечения сетевой программируемости и автоматизации;
Глава 8 «Управление исходными кодами с помощью Git» представляет систему Git – общеизвестное и широко используемое инструментальное средство управления исходными кодами. Подчеркивается важность управления исходными кодами, рассматриваются возможности использования такой системы с точки зрения сетевой программируемости и автоматизации. Также рассматривается работа с известными онлайновыми сервисами, например GitHub;
Глава 9 «Инструментальные средства автоматизации» подробно описывает использование инструментальных средств автоматизации с открытым исходным кодом, таких как Ansible, Salt и StackStorm и способы применения этих инструментов специально для обеспечения сетевой программируемости и автоматизации;
Глава 10 «Непрерывная интеграция» описывает концепции непрерывной интеграции (continuous integration, CI) и соответствующие основные инструментальные средства и технологии. Рассматривается применение методики разработки через тестирование (test-driven development, TDD), инструментов исследования и контроля, а также комплексных сред разработки, таких как Jenkins и Gerrit, приводится пример формирования
потока сетевой автоматизации, включающий все элементы методики непрерывной интеграции;
Глава 11 «Формирование культуры автоматизации сети» объясняет, почему правильно сформированная культура чрезвычайно важна и почему культура является основополагающим элементом для автоматизации сети. Рассматривается процесс формирования такой культуры;
Приложение А «Дополнительная информация о поддержке сетевой среды в ОС Linux» продолжает обсуждение, начатое в главе 3, но с более подробными описаниями работы с сетевыми интерфейсами macvlan, организации сетей с помощью виртуальных машин (VM), работы с сетевыми пространствами имен и с сетями, использующими контейнеры Linux (включая и контейнеры Docker. Также рассматривается использование Open vSwitch (OVS);
Приложение Б «Использование NAPALM» представляет введение в использование библиотеки NAPALM (Network Automation and Programmability Abstraction Layer with Multi-vendor support), написанной на ЯП Python. Рассматривается применение NAPALM для управления конфигурацией, не зависящей от конкретных производителей, а также для извлечения данных из сетевых устройств. Кратко описываются возможности интеграции NAPALM с инструментальными средствами Ansible, Salt и StackStorm, которые подробно рассматривались в главе 9.

Отрывок из книги
ссылка

Похожие книги