Автоматизируем FreeIPA: как устанавливать клиентов с помощью Ansible и управлять DNS записями через Terraform

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


У нас в Altenar собралась достаточно большая и продвинутая команда разработчиков. За эти годы внутри компании накоплен разнообразный опыт в создании и развитии высоконагруженных систем. Поэтому время от времени коллегам хочется поделиться с миром своими знаниями. Регистрироваться на Хабре они пока не готовы, зато совсем не против материализовываться на моей странице. Надеюсь острой аллергии это у вас не вызывает. Если будут вопросы к материалу, смело оставляйте их в комментариях, обещаю молниеносно перенаправлять авторам статьи. Добро пожаловать за кат.



Привет, меня зовут Денис, и я около двух лет работаю DevOps инженером в компании Altenar. Наша инфраструктура располагается как в Google Cloud, так и в собственном облаке на базе VMWare, в котором находится более 200 серверов и виртуальных машин.

Когда количество Linux машин в компании достаточно велико, то рано или поздно возникает необходимость в централизованном управлении доступом к серверам и если в случае с Windows использование AD является индустриальным стандартом, то, когда дело доходит до Linux приходится использовать такие инструменты как FreeIPA.

FreeIPA (Free Identity, Policy and Audit) ─ это open-source решение для Linux (аналогичное MS Active Directory), которое обеспечивает централизованное управление учетными записями и централизованную аутентификацию.

Необходимо отметить, что у RedHat есть решение IdM, которое является частью RHEL. Они технически идентичны с FreeIPA и, можно сказать, что FreeIPA является upstream версией для IdM на которой обкатываются новые фичи (как Fedora для RHEL).

FreeIPA использует клиент-серверную модель. Клиентом может быть любая Linux машина, которая настроена для взаимодействия с FreeIPA (IdM) контроллером домена. Клиент осуществляет взаимодействие с помощью Kerberos, NTP, DNS сервисов и сертификатов.



Как настроить решение с репликацией из двух FreeIPA серверов с DNS можно почитать в этой статье, а для установки FreeIPA клиентов нам понадобится:
● Функционирующий FreeIPA контроллер с настроенным DNS сервером
● Один CentOS 7 сервер по крайней мере с 1GB памяти.
● Ansible version: 2.8+
● Terraform version: 0.13+

Конечно, можно устанавливать FreeIPA клиентов вручную. Это можно сделать в 3 шага:
1) Установить пакет yum install ipa-client
2) Запустить скрипт установки ipa-client-install
3) Пройти по шагам, ответив на вопросы установщика.

Но я уверен, что все прекрасно понимают плюсы автоматизации, поэтому мы пойдем немного другим путём. В Altenar мы используем два основных инструмента автоматизации ─ Ansible и Terraform. В данному случае мы решили использовать Ansible и взяли роль из официального репозитория freeipa.org с минимальным набором переменных в дополнение к перечисленным в /ipaclient/defaults/main.yml.

ipaclient_domain: nix.altenar.com
ipaserver_domain: nix.altenar.com
ipaserver_realm: NIX.ALTENAR.COM
ipaclient_realm: NIX.ALTENAR.COM
ipaclient_no_ntp: yes
ipaclient_mkhomedir: yes

Playbook для запуска роли выглядит так:

---
- name: Playbook to configure IPA clients
  hosts:
  - linux
  - tag_linux
  become: yes
  gather_facts: True
  roles:
  - { role: freeipa/ipaclient, state: present }


Изначально мы также использовали ansible для создания DNS записей.

tasks:
- ipa_dnsrecord:
    ipa_host: ipa.nix.altenar.com
    ipa_pass: <removed>
    state: present
    zone_name: nix.altenar.com
    record_name: "{{inventory_hostname}}"
    record_type: 'A'
    record_value: "{{ansible_host}}"
    validate_certs: no
    ipa_user: user

При этом возникала проблема: чтобы создать dns запись необходимо было сначала явно указать IP адрес "{{ansible_host}}" в inventory файле, что было не очень удобно.

[linux]
xknm0.nix.altenar.com ansible_host=10.10.10.243


И так как мы используем в том числе Terraform в нашем частном облаке и стараемся придерживаться подхода IaC был найден terraform-provider-freeipa, который позволил нам добавлять DNS записи при создании виртуальных машин.

terraform {
  required_providers {
    freeipa = {
      source = "camptocamp/freeipa"
      version = "0.7.0"
    }
  }
}
 
provider freeipa {
  host = "ipa.nix.altenar.com" # or set $FREEIPA_HOST
  username = "admin" # or set $FREEIPA_USERNAME
  password = "<removed>" # or set $FREEIPA_PASSWORD
  insecure = true
}
 
resource freeipa_dns_record "test" {
  dnszoneidnsname = "nix.altenar.com."
  idnsname = "test"
  records = ["10.10.10.10"]
  type = "A"
}

В результате мы получаем готовую DNS запись при создании виртуальной машины.



И ничто нам не мешает продолжить установку FreeIPA клиента с помощью Ansible роли.

Так выглядит процесс создания DNS записей и установки FreeIPA клиентов у нас в Altenar. Надеюсь, что наш опыт был вам полезен, ну а мы в свою очередь продолжим делиться лайфхаками.

P.S. Если есть вопросы или вы хотели бы рассказать о своем опыте по заявленной теме, смело приходите в комментарии.
Источник: https://habr.com/ru/post/568524/


Интересные статьи

Интересные статьи

Продолжение серии публикаций по модельно-ориентированному проектированию. Ранее я рассказывал о моделировании на земле, (системы управления АЭС), в воздухе (Коптер, ...
Зодиак (неопознанный американский серийный убийца, действовавший в 60-х и 70-х годах прошлого века) отправил множество издевательских писем в прессу города Сан-Франциско....
Для начала немного новостей. Как вы можете помнить, в 2018 году я опубликовал статью Как нам удалось прочитать рукопись, найденную в 80-х возле третьего крематория в Аушвице-Би...
Привет, Хабр. Эта статья будет в немного «пятничном» формате, сегодня мы займемся NLP. Не тем NLP, про который продают книжки в подземных переходах, а тем, который Natural Language Processing ...
Некоторое время назад я наваял систему для оценки жизнеспособности офисных UPS. Оценка основана на долгосрочном мониторинге. По результатам использования систему допилил и узнал много интересного...