Эффективное администрирование большого количества оборудования.
Эффективное администрирование большого количества оборудования.
Необходимость обработки большого количества информации привело к совершенствованию программного обеспечения, технических возможностей серверного и телекоммуникационного оборудования. Современные информационные системы позволяют хранить и обрабатывать большие объемы данных и требуют больших вычислительных ресурсов.
Для эффективного администрирования большого количества оборудования существуют разные системы управления конфигурациями. Наиболее широко известны и популярны Ansible, Chef, Puppet и SaltStack.
Наше предприятие РГП «Государственная техническая служба» (далее – ГТС) занимается сопровождением высоконагруженных информационных систем, для работоспособности и отказоустойчивости которых используется большое количество серверного и сетевого оборудования.
В этой статье мы хотим поделиться опытом использования Ansible, и на примерах показать, как можно легко и быстро выполнить некоторые задачи.
Установка Ansible.
Для начала давайте рассмотрим пример установки Ansible на операционную систему CentOS 7. Процесс установки на версиях CentOS 6, 7 одинаков. На CentOS 8 используется менеджер пакетов DNF, но также можно пользоваться менежером пакетов YUM.
Ansible содержится в репозитории EPEL, и если пакет EPEL не установлен, требуется его установить:
[root@ansible ~]# yum install epel.release
После устанавливаем сам сервер Ansible:
[root@ansible ~]# yum install ansible
Схема реализации Ansible.
Ansible работает подключаясь к серверам, через протокол SSH и выдвигает к ним небольшие программы, называемые Ansible Modules. Затем Ansible выполняет и удаляет их после завершения. Поскольку эти модули являются простыми скриптами, написанные на языке программирования Python, а Ansible не содержит агентов, целевым хостам требуется только SSH-соединение и установленный Python.
Ansible позволяет не только выполнять единичные задачи, но и писать сценарии (playbooks), которые необходимо выполнить на управляемых серверах. Все сценарии в Ansible пишутся на языке YAML.
Начальная настройка и некоторые примеры.
В файл «hosts», который находится по пути /etc/ansible прописывается группа хостов, на которые будет произведена установка веб-сервера Nginx. В статье в качестве примера будут использованы 3 сервера с IP-адресами от 192.168.1.5 до 192.168.1.7:
[srv]
192.168.1.[5:7] ansible_ssh_user=ansible ansible_ssh_pass=password ansible_sudo_pass=password
После редактирования файла «hosts» можно выполнить проверку доступности серверов группы srv:
ansible -m ping srv
Результат выполнения модуля ping:
192.168.1.5 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.6 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
Для выполнения более сложных задач нужно написать playbook (плэйбук), т.е. сценарий выполнения, на языке YAML. Playbook рекомендуется хранить в определенной директории для их быстрого выполнения, например /etc/ansible/playbooks. Начинающие администраторы должны быть внимательны при написании playbook. Код playbook должен начинаться с трех символов тире “---” и не должен содержать лишних пробелов. Например, playbook по установке, конфигурации и запуска Nginx имеет следующий вид:
---
- hosts: srv
sudo: yes
tasks:
- name: install nginx
yum:
name: nginx
state: latest
- name: copy nginx.conf to server
copy:
src: /etc/ansible/nginx.conf
dest: /etc/nginx
- name: copy index.html to server
copy:
src: /etc/ansible/index.php
dest: /var/www/html
- name: start nginx
service:
name: nginx
state: started
В данном playbook на сервера группы srv (из файла hosts) выполнится сценарий из четырёх действий (tasks) – это установка Nginx», копирование уже сконфигурированного файла «nginx.conf» и «index.php» на сервера и запуск Nginx». Результат выполнения playbook:
PLAY [srv] ***************************************************************
…
PLAY RECAP **************************************************************
192.168.1.5 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.6 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.7 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
PLAY [srv] ***************************************************************
…
PLAY RECAP **************************************************************
192.168.1.5 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.6 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.7 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Результат «ok=5» информирует о том, что на серверах успешно выполнены 5 действий и «changed=1» сообщает, что произошло одно изменение – запуск Nginx.
Также с помощью Ansible можно проверить, что сервис nginx запущен и возвращает страницу:
[root@ansible ~]# ansible srv -m command -a "wget http://localhost"
В результате мы получим ответ:
HTTP request sent, awaiting response... 200 OK
Давайте рассмотрим пример архивирования конфигурационного файла Nginx:
---
- name: archive nginx.conf
hosts: localhost
sudo: yes
tasks:
- name: archive nginx.conf
archive:
path: /etc/nginx/nginx.conf
dest: /home/admin/backup/nginx.conf.tgz
Результат выполнения playbook:
PLAY [archive nginx.conf] ************************************************
…
PLAY RECAP ************************************************
192.168.35.95 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
В данном примере playbook архивирует сжатием файл «/etc/nginx/nginx.conf «в файл /home/admin/backup//nginx.conf.tgz.
Часто возникают случаи, когда необходимо настроить мониторинг серверов в системе мониторинга Zabbix, для чего на указанной группе серверов необходимо установить агентов Zabbix. Допустим, что агенты уже установлены. Теперь следует на агентах настроить корректный адрес сервера мониторинга. Пример замены IP-адреса 127.0.01 на 192.168.1.100 в конфигурационном файле «zabbix-agentd.conf» с помощью Ansible будет следующим:
---
- name: Change ip adress
hosts: srv
sudo: yes
tasks:
- name: change ip adress server
lineinfile:
path: /etc/zabbix/zabbix_agentd.conf
regexp: 'Server=127.0.0.1'
line: "Server=192.168.1.100
backrefs: yes
Результат выполнения playbook:
PLAY [Change ip adress] *********************************
…
PLAY RECAP ***************************************************
192.168.1.5 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.6 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.1.7 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Обеспечение информационной безопасности на сервере «Ansible»
Внедрение Ansible требует соблюдения мер информационной безопасности, так как сервер Ansible имеет ssh-доступ к промышленным серверам. Несанкционированный доступ к серверу Ansible влечет за собой риск подвергнуться хакерской атаке. Для защиты доступа к серверу Ansible необходимо выполнить как минимум базовые меры информационной безопасности:
• Сервер «Ansible» должен находиться в защищенном и ограниченном от доступа посторонних лиц, сетевом сегменте.
• учетные записи на сервере Ansible должны иметь только администраторы;
• Межсетевой экран операционной системы оборудования, на котором сервер Ansible должен быть корректно настроен. Доступ по протоколу SSH должен быть только с рабочих станций администраторов. Пример конфигурации межсетевого экрана на сервере Ansible с ОС СentOS 7 и 8:
firewall-cmd –permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="ip-adress администратора" port port="22" protocol="tcp" accept'
• SELinux должен быть в режиме «Enforcing».
• Рекомендуется настроить отправку логов Ansible по протоколу syslog в центр обеспечения безопасности для мониторига событий.
Заключение.
В последние годы идет тенденция в сторону автоматизации процессов внедрения и администрирования информационных систем. Ansible является наглядным примером того как можно эффективно администрировать большое количество оборудования.
Мы рассмотрели базовые вещи, связанные с Ansible. Более подробно можно ознакомиться с документацией Ansible по адресу https://docs.ansible.com