Server Installation/Ansible

Aus Opennet
Wechseln zu: Navigation, Suche

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.


Vorbereitung

Die folgenden Schritte sind auszuführen, um die ansible-Konfigurationsverwaltung auf einen oder mehrere Hosts anzuwenden.

  1. Paket installieren (nur diese Aktion erfordert root-Rechte): aptitude install ansible
  2. git-Repository auschecken: git clone git@dev.on-i.de:ansible.git (siehe Opennet DEV)
  3. den eigenen ssh-Schlüssel auf allen zu konfigurierenden Servern importieren

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 aufgeführt, sowie Gruppen zugeordnet.
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


Anwendungspolicy

Folgende Abfolge von Schritten ist für eine sichere Verwendung des Werkzeugs Konfigurationverwaltung zu empfehlen:

  1. kleinschrittige Änderungen vornehmen
  2. Änderungen im ersten Versuch nur auf einen einzigen Host anwenden (z.B. ansible-playbook .... --limit HOSTNAME)
    1. idealerweise beim ersten Versuch mit den zusätzlichen Optionen --checkk --diff (keine Änderungen; Unterschiede anzeigen)
  3. die Ausgabe des ansible-Playbook-Laufs sorgfältig auf erwartete und unerwartete Änderungen prüfen
  4. die Wirksamkeit der Änderungen auf dem Host prüfen (funktionieren die Dienste noch?)
  5. Änderungen auf alle Hosts anwenden
  6. Wirksamkeit und Funktionsfähigkeit der Dienste prüfen
  7. Änderungen via git committen


Rollen-Details

basic-server

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 (z.B. Backup).

Vorbereitung eines neuen Hosts

  1. eigenen ssh-Schlüssel manuell importieren
  2. 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

  1. siehe basic-server-Rolle
  2. eine Datei für den Host unter host_vars/ erstellen (basierend auf einer vorhandenen UGW-Datei in diesem Verzeichnis)
  3. TODO: Zertifikate erzeugen (Schlüssel und Zertifikat müssen aktuell per Hand erzeugt und auf den Server übertragen werden)

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 Clients.

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

DNS-Server

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge