Server Installation/Ansible: Unterschied zwischen den Versionen
Lars (Diskussion | Beiträge) (init) |
Lars (Diskussion | Beiträge) K (Formatierung) |
||
Zeile 78: | Zeile 78: | ||
== Variablen == | == Variablen == | ||
− | Host-spezifische, Rollen-spezifische oder globale Variablen können an verschiedenen Stellen mit unterschiedlicher Priorität definiert werden (siehe [http://docs.ansible.com/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable ansible-Dokumentation). | + | Host-spezifische, Rollen-spezifische oder globale Variablen können an verschiedenen Stellen mit unterschiedlicher Priorität definiert werden (siehe [http://docs.ansible.com/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable ansible-Dokumentation]). |
;Globale Variablen | ;Globale Variablen | ||
Zeile 86: | Zeile 86: | ||
;Host-spezifische Variablen | ;Host-spezifische Variablen | ||
:''host_vars/'' | :''host_vars/'' | ||
− | |||
= Übliche Aufgaben = | = Übliche Aufgaben = |
Version vom 18. Januar 2015, 19:31 Uhr
Inhaltsverzeichnis |
Überblick
ansible ist eine Konfigurationsmanagement-Software basierend auf Python. Es benötigt für die Client-Konfiguration lediglich eine ssh-Verbindung. Auf der Client-Seite ist keine spezifische Software erforderlich.
Innerhalb von Opennet setzen wir ansible für die Konfiguration der UGW-Server ein.
Die Konfigurationsverwaltung wird üblicherweise durch Server/heartofgold angewandt.
Konfigurationsverwaltung ist ein mächtiges Werkzeug, das durch unbedachte Nutzung großflächigen Schaden/Ausfälle produzieren kann. Siehe unseren Leitfaden für eine vorsichtige Nutzung. |
Konfiguration
- alle Details liegen im Home-Verzeichnis des Nutzers ansible auf Server/heartofgold unter
~/ansible
- zu verwaltende Server werden in der Datei hosts eingetragen und eventuell verschiedenen Gruppen zugeordnet
- einzelne Konfigurationsaufgaben werden in Playbooks zusammengefasst
- es findet keinerlei automatische Verteilung von Änderungen statt - die Anwendung von Playbooks erfolgt ausschließlich durch manuelle Auslösung
Ersteinrichtung
Die folgenden Schritte sind auszuführen, wenn die ansible-Konfigurationsverwaltung von einem neuen/zusätzlichen Host/Account aus durchgeführt werden soll.
- Paket installieren:
aptitude install ansible
(die darauffolgenden Aktionen können von einem Nutzer-Account durchgeführt werden) - auf allen zu konfigurierenden Servern muss der ssh-Schlüssel des ausführenden Nutzers importiert werden
- git-Repository auschecken:
git clone git@dev.on-i.de:ansible.git
- ansible-Konfiguration auf das git-Repository-Verzeichnis ausrichten:
-
cp /etc/ansible/ansible.cfg ~/.ansible.cfg
- die Pfade in den folgenden Einstellungen anpassen:
-
Einstellung | Beispielwert |
---|---|
hostfile | ~/ansible/hosts |
roles_path | ~/ansible/roles |
remote_user | root |
log_path | ~/ansible/ansible.log |
git-Repository
Die Konfiguration (Dateien, Schlüssel, Abläufe) wird in einem git-Repository (siehe Opennet DEV) verwaltet.
Das Repository enthält aktuell geheimhaltungsbedürftige Informationen (die OpenVPN-Server-Zertifikate und den geteilten DNSSEC-Schlüssel). Bis zur Auslagerung (oder Verschlüsselung) dieser Informationen ist die Freigabe des Repositories nicht möglich. Eine spätere Freigabe muss natürlich die git-Hostorie teilweise verwerfen, um diese Geheimnisse zu schützen. |
Verzeichnisstruktur
Im ansible-Verzeichnis gibt es mehrere Dateien und Unterverzeichnisse.
Globale Struktur
- hosts
- Diese Datei enthält das sogenannte Inventory von ansible.
- Hier werden alle Hosts und Gruppen, sowie globale Variable (in der Sektion
[all:vars]
) definiert. - playbook-*.yml
- Ein Playbook enthält Variablendefinitionen, sowie eine Liste von Aufgaben/Zuständen, die auf bestimmte Hosts angewandt werden sollen.
- Der Dateiname einer playbook-Datei spielt keine Rolle - die Playbooks werden ausschließlich manuell ausgeführt.
- host_vars/
- Für jeden Host kann hier eine gleichnamige Datei (
HOSTNAME.yml
) abgelegt werden, die Host-spezifische Einstellungen (vor allem: IPs und Interface-Namen) enthält. - roles/
- Eine Rolle ist in ansible eine Zusammenstellung von Konfigurationen, die auf gewisse Hosts angewandt werden sollen.
- Beispielsweise können alle notwendigen Einstellungen für den Betrieb eines DNS-Servers in einer eigenen Rolle zusammengefasst werden.
Rollen-spezifische Struktur
Unterhalb jedes roles-Unterverzeichnis ist die folgende Struktur üblich:
- defaults/main.yml
- Variablen, die innerhalb dieser Rolle für alle Hosts gelten sollen. Sie können durch Host-spezifische Variablen überschrieben werden.
- handlers/main.yml
- Im Anschluss an die Änderungen von Dateien müssen unter Umständen Dienste neugestartet werden. Diese Handler werden nur bei tatsächlichen Änderungen ausgeführt.
- files/
- Per Konvention werden in diesem Verzeichnis zu kopierende Dateien abgelegt. Das copy-Modul verwendet diesen Pfad automatisch als Präfix für relative Pfadangaben.
- templates/
- Per Konvention werden in diesem Verzeichnis Dateien abgelegt, die Template-Platzhalter enthalten. Das template-Modul verwendet diesen Pfad automatisch als Präfix für relative Pfadangaben.
- tasks/
- Per Konvention beinhaltet die Datei
main.yml
in diesem Verzeichnis include-Direktiven zum Einbinden weiterer Dateien in diesem Unterverzeichnis. - Die task-Dateien enthalten die Beschreibungen von herzustellenden Konfigurationen (vorhandene Pakete, Dateien, usw.).
Variablen
Host-spezifische, Rollen-spezifische oder globale Variablen können an verschiedenen Stellen mit unterschiedlicher Priorität definiert werden (siehe ansible-Dokumentation).
- Globale Variablen
- hosts-Datei in der [all:vars]-Sektion
- Rollen-spezifische Variablen für alle Hosts
- roles/*/defaults/
- Host-spezifische Variablen
- host_vars/
Übliche Aufgaben
- alle Konfigurationen anwenden:
ansible-playbook ~/ansible/playbook-ugw-server.yml
- einen einzigen Server konfigurieren:
ansible-playbook ~/ansible/playbook-ugw-server.yml --limit=HOSTNAME.on-i.de
- auf anwendbare Änderungen prüfen ohne sie auszuführen:
ansible-playbook ~/ansible/playbook-ugw.yml --limit=HOSTNAME.on-i.de --check
- Informationen (inkl. interner Variablen) eines Hosts anzeigen:
ansible -m setup HOSTNAME.on-i.de
- Dokumentation zu einem ansible-Modul anzeigen:
ansible-doc synchronize
- hübscher formatierte Doku im Netz
Anwendungspolicy
Folgende Schritte sind für eine sichere Verwendung des Werkzeugs Konfigurationverwaltung zu verwenden:
- kleinschrittige Änderungen vornehmen
- Änderungen im ersten Versuch nur auf einen einzigen Host anwenden (z.B.
ansible-playbook .... --limit HOSTNAME
) - die Ausgabe des ansible-Playbook-Laufs sorgfältig auf erwartete und unerwartete Änderungen prüfen
- die Wirksamkeit der Änderungen auf dem Host prüfen (funktionieren die Dienste noch?)
- Änderungen auf alle Hosts anwenden
- Wirksamkeit und Funktionsfähigkeit der Dienste prüfen
- Änderungen via git committen
Rollen-Details
basic
Diese Rolle ist für alle opennet-Server geeignet. Im Wesentlichen sorgt es für eine einfache Verteilung der ssh-Schlüssel von Administratoren und Maschinen-Accounts (Backup, Konfigurationsverwaltung).
Vorbereitung eines neuen Hosts
- ssh-Schlüssel des ansible-Nutzers manuell importieren
- Host in die hosts-Datei eintragen
Ablauf
- Übertragung von ssh-Schlüsseln
- typische Server-Pakete installieren
- munin-node für Monitoring vorkonfigurieren
ugw-server
Diese Rolle ist für die neuen UGW-Server (ab 2015) geeignet (zur Zeit: Server/erina und Server/megumi).
Vorbereitung eines neuen Hosts
- siehe basic-Rolle
- eine Datei für den Host unter host_vars/ erstellen (basierend auf einer vorhandenen UGW-Datei in diesem Verzeichnis)
- openvpn-Schlüssel und -Zertifikate erzeugen und unter files/openvpn/host-certs/ugw bzw. files/openvpn/host-certs/users anlegen (oder provisorisch die Verzeichnisse eines anderen Hosts symlinken)
Hinweise
Wähle einen geeigneten Zeitpunkt für die Anwendung dieser Konfiguration aus. Vor allem die Änderung der openvpn-Konfiguration führt zu einer kurzzeitigen Trennung aller Cliensts.
Ablauf
- Netzwerk-Konfiguration
- DNS-Server (bzw. Zonen-Slave)
- OLSRD
- Firewall
- OpenVPN (Konfiguration, Skripte, Zertifikate)
- OpenVPN-Statusseite (z.B. http://erina.opennet-initiative.de/vpnstatus)
- opennet-spezifische Munin-Plugins für UGW-Server
- Dateien für Download-Tests erzeugen