Главная

Friday, 10 July 2020

Ansible и его соединения.

Всем привет.

Вы знаете Ansible  как одну из систем управления конфигурациями (оркестратор).

Особенность Ansible в наличии управляющего сервера (master), с которого отправляются команды или наборы инструкций (playbooks) на удаленные хосты посредством протокола SSH, или HTTPS.

Ansible решает следующие задачи:

  • правильная и быстрая настройка серверов до нужной конфигурации;
  • управление развертыванием облачных серверов (через API, с помощью Docker);
  • установка и обновление приложений;
  • координация звеньев инфраструктуры для выполнения развертываний;
  • централизованный сбор логов.

Ansible не требует установки на удаленные хосты клиента, так как подключается к ним по протоколу SSH за исключением настройки службы WinRM где подключение идет по HTTPS.

Но хватит теории. Волею случая мне довелось проверить все возможности соединения с помощью Ansible. В моем тесте участвовали:

  • Homediver, Desktop Windows 10
  • ec2-54-197-120-211.compute-1.amazonaws.com, AWS MS Server 2019
  • ec2-54-88-28-8.compute-1.amazonaws.com, AWS Ubuntu
  • appliance, VirtualBox CentOS 8
  • Ansible master, VirtualBox Debian 9




При работе с AWS ключи доступа для Windows-хостов находятся в файле credentials директории C:\Users\Username\.aws. У меня, к примеру их надо обновлять для каждой сессии. Само собой Ansible master находится на Linux-хосте поэтому он требует экспорта переменных (ключей) отдельно:

export AWS_ACCESS_KEY_ID='etcxxx'
export AWS_SECRET_ACCESS_KEY='xxxetc'
export AWS_SESSION_TOKEN='xxxetc'

Далее пробуем объединить вся и все. И при этом все должно еще и работать.)

Первым смотрим файл конфигурации Ansible-мастера.
Файл ansible.cfg:

[defaults]
inventory = ./myhosts
ask_pass = False
host_key_checking=False
gathering = explicit

#remote_user = ubuntu
private_key_file = Mykey.pem

Обращаю ваше внимание на закомментированную строку  #remote_user = ubuntu которая говорит о том, что пользователем, т.е. тем под которым Ansible-мастер захочет подсоединиться к удаленной системе может быть и другой. Поэтому укажем его в другом месте.

Строка private_key_file = Mykey.pem явно указывает на файл ключа, который был получен при создании инстанса в AWS.



Вторым шагом правим наш файл инвентаризации Ansible-мастера.
Файл myhosts:

[Local]
localhost

[windows]
Homediver

[windows:vars]
ansible_user=adminka
ansible_password='xxххххх'
ansible_port=5986
ansible_connection=winrm
ansible_winrm_scheme=https
ansible_winrm_server_cert_validation=ignore

[windowsAWS]
ec2-54-197-120-211.compute-1.amazonaws.com

[windowsAWS:vars]
ansible_user=Administrator
ansible_password='2uGk57F=U&ylknWL;ET8l93p5'
ansible_port=5986
ansible_connection=winrm
ansible_winrm_scheme=https
ansible_winrm_server_cert_validation=ignore

[linux]
ec2-54-88-28-8.compute-1.amazonaws.com ansible_ssh_user=ubuntu
appliance ansible_ssh_user=adminq

где в секцию [windows] попал хост из домашней сети, а в секцию [windowsAWS] облачный Windows-сервер. Назначение параметров vars для них весьма схоже. В AWS для управления Windows-хостами через Ansible используется технология winrm https, так что не забудьте открыть соответствующие порты.

Что касается секции [linux] то вначале надо перенести файл ключа Mykey.pem c AWS на Ansible-мастер. И поменять ему права:
chmod 400 Mykey.pem

А после проверить ssh-соединение так:
ssh -i "Mykey.pem" ubuntu@ec2-54-88-28-8.compute-1.amazonaws.com

Linux-хосты AWS можно указывать двумя спобосами - так как выше традиционно с параметром ansible_ssh_user или просто как
ubuntu@ec2-54-88-28-8.compute-1.amazonaws.com

Для проверки всего используем простой пинг:



Случается так что для Linux надо принудительно вызвать запрос пароля:


Никакой оптимизации управляющих файлов Ansible не проводилось. Это еще впереди. Продолжение следует.

No comments:

Post a Comment

А что вы думаете по этому поводу?