Как автоматизировать развертывание сетевых сервисов через Ansible

Почему именно Ansible?
Для начала давайте разберёмся, почему именно Ansible так популярен среди системных администраторов. Этот инструмент выделяется простотой, гибкостью и мощностью. Всё, что вам нужно для начала работы — базовые знания YAML, доступ к управляемым устройствам и желание автоматизировать рутину.
Первое преимущество Ansible — это его агентская архитектура. Вам не нужно устанавливать дополнительное ПО на управляемые устройства. Достаточно иметь SSH-доступ к серверам или сетевому оборудованию, чтобы начать.
Второе преимущество — поддержка множества модулей. Например, Ansible может работать с Cisco, Juniper, F5 и другими известными сетевыми решениями. Если ваш сервис развёрнут на Linux-серверах, вы тоже можете автоматизировать задачи вроде установки NGINX или настройки брандмауэра.
Третье преимущество — декларативный подход. Вы описываете, каким должен быть конечный результат, а Ansible выполняет нужные шаги. Это делает ваши настройки более предсказуемыми и повторяемыми.
Первые шаги с Ansible
Прежде чем автоматизировать развертывание, убедимся, что у вас всё готово. Вот что нужно:
Во-первых, установите Ansible. Это можно сделать через стандартный менеджер пакетов, например apt или yum. Убедитесь, что вы используете актуальную версию, так как новые модули регулярно добавляются.
Во-вторых, создайте файл инвентаря. Это текстовый файл, где вы указываете устройства или серверы, с которыми Ansible будет работать. Простой пример файла инвентаря:
[web_servers]
192.168.1.10
192.168.1.11
Здесь мы указали группу серверов web_servers с их IP-адресами. Ansible будет использовать эту информацию для подключения.
В-третьих, напишите ваш первый плейбук. Это основной файл, где вы описываете задачи. Он пишется на YAML и выглядит примерно так:
- name: Установить и настроить NGINX
hosts: web_servers
tasks:
- name: Убедиться, что NGINX установлен
ansible.builtin.yum:
name: nginx
state: present
- name: Запустить NGINX
ansible.builtin.service:
name: nginx
state: started
Этот плейбук выполнит две задачи: установит NGINX на серверах из группы web_servers и запустит его.
Примеры развертывания сетевых сервисов
Теперь разберём несколько реальных примеров, чтобы вы почувствовали себя увереннее.
Пример 1: Настройка брандмауэра
Предположим, у вас есть группа серверов, и вы хотите закрыть все порты, кроме 80 (HTTP) и 443 (HTTPS). Вот как это сделать:
- name: Настройка брандмауэра
hosts: all
tasks:
- name: Установить iptables
ansible.builtin.yum:
name: iptables
state: present
- name: Открыть порты 80 и 443
ansible.builtin.command: iptables -A INPUT -p tcp --dport {{ item }} -j ACCEPT
with_items:
- 80
- 443
- name: Закрыть все остальные порты
ansible.builtin.command: iptables -A INPUT -j DROP
Пример 2: Настройка DHCP-сервера
Если вы хотите настроить DHCP-сервер на Linux, то Ansible справится с этим без проблем:
- name: Настройка DHCP-сервера
hosts: dhcp_servers
tasks:
- name: Убедиться, что пакет dhcp установлен
ansible.builtin.yum:
name: dhcp
state: present
- name: Настроить конфигурацию DHCP
ansible.builtin.copy:
src: /templates/dhcpd.conf
dest: /etc/dhcp/dhcpd.conf
- name: Перезапустить DHCP-сервер
ansible.builtin.service:
name: dhcpd
state: restarted
Пример 3: Настройка маршрутизации
Для сложных сетей может потребоваться настроить статические маршруты. С Ansible это легко:
- name: Настройка статической маршрутизации
hosts: routers
tasks:
- name: Добавить статический маршрут
ansible.builtin.command: ip route add 192.168.2.0/24 via 192.168.1.1
Комментарии