Ansible ist eines der beliebtesten Tools zur Automatisierung der IT-Infrastruktur. Es ermöglicht die Verwaltung von Servern, Netzwerken und Anwendungen auf einfache Weise, ohne dass Agenten auf den Zielsystemen erforderlich sind. Die Konfiguration von Ansible ist ein wesentlicher Schritt, um das Tool effizient nutzen zu können und sicherzustellen, dass es den spezifischen Anforderungen Ihrer Umgebung entspricht.
In diesem Blogbeitrag werfen wir einen detaillierten Blick darauf, wie Ansible konfiguriert wird, welche Konfigurationsdateien verwendet werden und welche wichtigen Einstellungen vorgenommen werden müssen.
1. Grundlegende Verzeichnisstruktur
Bevor wir uns mit der eigentlichen Konfiguration von Ansible beschäftigen, sollten wir die Verzeichnisstruktur verstehen, die von Ansible verwendet wird. In der Regel befindet sich die Ansible-Installation im Verzeichnis /etc/ansible
. Die wichtigsten Dateien und Verzeichnisse dort sind:
/etc/ansible/hosts
: Die Standard-Inventardatei, die alle zu verwaltenden Hosts enthält./etc/ansible/ansible.cfg
: Die globale Konfigurationsdatei von Ansible./etc/ansible/roles/
: Das Verzeichnis, in dem Ansible-Rollen gespeichert werden.
2. Ansible-Konfigurationsdatei (ansible.cfg
)
Die Datei ansible.cfg
ist die Hauptkonfigurationsdatei für Ansible. Sie kann global unter /etc/ansible/ansible.cfg
abgelegt sein oder auf Playbook-Ebene in einem lokalen Projektverzeichnis. In dieser Datei können Sie verschiedene Einstellungen vornehmen, die Ansible beeinflussen.
Ein Beispiel für eine grundlegende ansible.cfg
:
[defaults]
inventory = ./inventory
remote_user = ansible
private_key_file = ~/.ssh/id_rsa
host_key_checking = False
retry_files_enabled = False
timeout = 30
[privilege_escalation]
become = True
become_method = sudo
become_user = root
Wichtige Sektionen in ansible.cfg
:
[defaults]
: Hier werden die allgemeinen Einstellungen vorgenommen, die Ansible betreffen. Dazu gehören das Inventory, der Standardbenutzer und andere Standardoptionen.inventory
: Legt fest, welches Inventory verwendet wird. Standardmäßig ist dies die Datei/etc/ansible/hosts
. Es kann aber auch eine eigene Datei oder ein dynamisches Inventory angegeben werden.remote_user
: Der Benutzer, mit dem sich Ansible auf den Zielsystemen anmeldet. Hier kann z. B. der Benutzer „ansible“ oder „root“ festgelegt werden.host_key_checking
: Setzt die Überprüfung des SSH-Schlüssels für Hosts aus. Bei „False“ wird die Überprüfung deaktiviert, was hilfreich ist, um Fehlermeldungen bei neuen Hosts zu vermeiden.retry_files_enabled
: Diese Einstellung deaktiviert die Erstellung von Retry-Dateien, die bei fehlgeschlagenen Playbooks automatisch angelegt werden. Sie kann deaktiviert werden, um das Verzeichnis sauber zu halten.[privilege_escalation]
: Hier werden die Einstellungen für die Rechteausweitung konfiguriert. Die häufigste Methode istsudo
, um administrative Aufgaben durchzuführen. Mitbecome
kann festgelegt werden, dass Ansible automatisch Root-Rechte anfordert.
3. Inventory-Konfiguration
Das Inventory ist eine wichtige Komponente in Ansible, da es die zu verwaltenden Hosts enthält. Standardmäßig verwendet Ansible eine einfache Textdatei unter /etc/ansible/hosts
, aber es gibt auch die Möglichkeit, dynamische Inventories zu verwenden.
Statisches Inventory
Ein einfaches statisches Inventory könnte so aussehen:
[webserver]
web1.example.com
web2.example.com
[dbserver]
db1.example.com
[all:vars]
ansible_user=ansible
ansible_ssh_private_key_file=~/.ssh/id_rsa
- Gruppen: Hosts können in Gruppen unterteilt werden, z. B.
webserver
oderdbserver
, um ähnliche Maschinen zu gruppieren. - Variablen pro Gruppe oder Host: Über die
[all:vars]
-Sektion können globale Variablen für alle Hosts definiert werden, wie z. B. der SSH-Benutzer und der Pfad zum privaten Schlüssel.
Dynamisches Inventory
Wenn Sie Cloud-Umgebungen (wie AWS, Google Cloud, Azure) oder Container-Umgebungen verwalten, bietet sich ein dynamisches Inventory an. Dies wird in der Regel durch ein Skript oder eine API abgerufen, um Hosts dynamisch zu erfassen.
Beispiel für ein AWS-basiertes dynamisches Inventory:
ansible-playbook -i aws_ec2.yaml playbook.yml
Hierbei stellt aws_ec2.yaml
die dynamische Inventory-Konfiguration dar, die über eine API die Liste der aktuellen EC2-Instanzen abruft.
4. SSH-Konfiguration für Ansible
Da Ansible SSH verwendet, um mit den Zielhosts zu kommunizieren, ist es wichtig, die SSH-Konfiguration korrekt einzurichten. Dazu gehört die Schlüsselbasierte Authentifizierung, damit Ansible ohne manuelle Passwort-Eingabe arbeiten kann.
Schlüsselbasierte Authentifizierung einrichten
Um Ansible so zu konfigurieren, dass es sich per SSH-Schlüssel authentifiziert, führen Sie folgende Schritte aus:
- SSH-Schlüssel generieren:
ssh-keygen -t rsa
2. Öffentlichen Schlüssel auf die Zielmaschine kopieren:
ssh-copy-id ansible@web1.example.com
Dadurch wird der öffentliche Schlüssel des Ansible-Servers in die ~/.ssh/authorized_keys
des Zielhosts geschrieben.
SSH-Konfiguration in der ansible.cfg
anpassen:
In der Konfigurationsdatei ansible.cfg
stellen Sie sicher, dass Ansible den privaten Schlüssel verwendet:
private_key_file = ~/.ssh/id_rsa
5. Umgang mit sensiblen Daten: Ansible Vault
Ansible Vault ist ein Werkzeug zur Verschlüsselung sensibler Daten, wie Passwörter oder API-Schlüssel. Mit Vault können Sie sicherstellen, dass diese Daten nicht im Klartext in Playbooks oder Variablen-Dateien stehen.
Eine Datei mit Vault verschlüsseln
Um eine Datei mit sensiblen Daten zu verschlüsseln, können Sie folgendes Kommando verwenden:
ansible-vault encrypt geheime_daten.yml
Zum Entschlüsseln verwenden Sie:
ansible-vault decrypt geheime_daten.yml
Verschlüsselte Daten in Playbooks verwenden
Ein verschlüsseltes Vault-Passwort kann wie eine normale Variable in Playbooks verwendet werden. Hier ein Beispiel für die Verwendung eines Vault-verschlüsselten API-Schlüssels:
---
- hosts: webserver
vars_files:
- geheime_daten.yml
tasks:
- name: API-Schlüssel verwenden
debug:
msg: "Der API-Schlüssel lautet: {{ api_key }}"
6. Einstellungen für Performance und Fehlersuche
Für große Infrastrukturen oder komplexe Aufgaben kann es notwendig sein, einige Performance-Optimierungen vorzunehmen oder die Fehlersuche zu vereinfachen.
- Verbindungspooling mit SSH: Ansible kann SSH-Verbindungen zwischenspeichern, um die Geschwindigkeit zu erhöhen. Dies kann mit
ControlPersist
in der SSH-Konfiguration aktiviert werden.
[defaults]
transport = ssh
ssh_args = -o ControlMaster=auto -o ControlPersist=60s
Debugging aktivieren: Um detaillierte Fehlermeldungen zu erhalten, kann der Debug-Modus aktiviert werden:
ansible-playbook playbook.yml -vvv
Die zusätzlichen v
-Optionen erhöhen den Detailgrad der Ausgabe.
Fazit
Die Konfiguration von Ansible ist flexibel und ermöglicht es, das Verhalten von Ansible an Ihre speziellen Anforderungen anzupassen. Durch das Verständnis der zentralen Konfigurationsdateien wie ansible.cfg
und das richtige Einrichten des Inventories sowie SSH können Sie die Leistungsfähigkeit von Ansible optimal nutzen. Tools wie Ansible Vault sorgen dafür, dass sensible Daten sicher verwendet werden können.
Mit dieser Grundlage sind Sie bestens gerüstet, um Ansible in Ihrer Umgebung zu konfigurieren und zu betreiben.