Während sich Teil 1 dieser Serie mit dem grundlegenden Aufbau eines HA Clusters mit Puppet und HAProxy beschäftigte, werden wir in diesem Artikel auf die Konfiguration der Systeme sowie die Reihenfolge in der die Konfiguration zu geschehen hat eingehen.

Installation und Konfiguration

Puppet Master

Für die Installation und Konfiguration der Puppet Master, muss für puppet00 und puppet01 (siehe Architekturdiagramm) teilweise unterschiedlich vorgegangen werden:

puppet00puppet01
Installation von Puppetmaster mit Passenger:

Löschen der standardmäßig erzeugten CA auf beiden Systemen:
Anlegen einer neuen CA und Generierung von Serverzertifikaten für puppet00 und puppet01:
Nun mussen die folgenden Dateien von puppet00 auf puppet01 kopiert werden:

Anschließend werden die Berechtigungen gesetzt:
Anpassen der /etc/puppet/puppet.conf, so dass alternative DNS Namen möglich sind und die vom Load Balancer gesetzten HTTP Request Header Daten zur Authentifizierungausgelesen werden.
Da puppet00 unsere CA sein wird, muss die CA Funktion auf puppet01 deaktiviert werden.
/etc/puppet/puppet.conf
Auf beiden Systemen muss nun die Apache2 Konfiguration angepasst werden. Zum einen muss SSL deaktiviert werden, da der Load Balancer die Anfragen unverschlüsselt weiterleiten wird. Zum anderen muss Apache die gesetzten HTTP Request Header auswerten und an Puppetmaster weitergeben.
/etc/apache2/sites-available/puppetmaster.conf

HAProxy

Um HAProxy für SSL Terminierung zu konfigurieren ist eine Version größer oder gleich 1.5 erforderlich. Der einfachste Weg unter Ubuntu sieht wie folgt aus:

SSL Terminierung

Um die SSL Verbindung auf dem HAProxy zu terminieren muss HAProxy mit einem Zertifikat sowie Public und Private Key ausgestattet sein, wordurch es ihm möglich wird die eingehende verschlüsselte Verbindung vom Puppet Agent zu entschlüsseln. Dieses Zertifkat muss natürlich von derselben CA signiert sein wie das des Master und des Agents.

puppetlbpuppet00
Zunächst muss auf dem CA Server ein Zertifikat für den Load Balancer ausgestellt werden. Dieser wird für den Client mit dem Namen “puppetlb” erreichbar sein. Das Zertifikat muss natürlich dementsprechend benannt werden:
Nun übertragen wir die folgenden Dateien von puppet00 auf puppetlb:

HAProxy verlangt bei der Konfiguration der SSL Terminierung ein sog. “combined PEM” welches das Zertifikat sowie den Private beinhaltet. Dieses kann nun leicht erzeugt werden:

Konfiguration von HAProxy

In diesem Beispiel fungiert HAProxy als LoadBalancer. Wir terminieren die SSL Verbindung wie oben beschrieben in HAProxy selbst, damit wir Anfragen an die CA zum richtigen Puppet Master senden können.

Dazu legen wir in der Konfigurationsdatei von HAproxy (/etc/haproxy/haproxy.cfg) ein Frontend an, welches sich um die SSL Terminierung und Weiterleitungsauswahl kümmert, sowie zwei verschiedene Backends:

  • “puppet-backend”: alle Puppet Master, die Agents mit Konfigurationen versorgen
  • “puppet-ca-backend”: beinhaltet nur den CA Master

Die Auswahl des Backends erfolgt über eine ACL (Access Control List), welche die vom Agent angefragte URL auf das Vorkommen von “certificate” überprüft.

Wichtig ist auch die Option “verify optional”: Bei der ersten Kontaktaufnahme des Agents zu HAProxy, soll diese zur CA weitergeleitet werden um eine Signierung des Client Zertifikats zu ermöglichen. Hat man hier “verify” auf “required” gesetzt, ist dies natürlich nicht möglich – das Zertifikat ist ja noch nicht signiert. Setzt man “verify” auf “none” kann im Folgenden die Kommunikation mit den Puppet Mastern nicht erfolgen. “Optional” hingegen erlaubt beide Kommunikationsarten.

Puppet Agent

Wenn in der Umgebung kein DNS Server vorhanden ist, muss in /etc/hosts ein Eintrag gemacht werden, damit ein Auflösen der DNS Namen möglich ist.

Installation von Puppet Agent

 

Die /etc/puppet/puppet.conf muss nun so angepasst werden, dass Puppet Agent weiß wie der Puppet Master für ihn erreichbar ist. Hier tragen wir den Namen des Load Balancers ein.

Der Puppet Agent ist standardmäßig deaktiviert. Um dies zu ändern, aktualisiert man die Konfigurationsdatei /etc/default/puppet und setzt den Wert für START von “no” auf „yes“:

Generieren und signieren von Zertifikaten

puppetagentpuppet00
Erstanmeldung des Agents am Puppet Master:

Es wird ein Fehler ausgegeben, die besagt, dass kein Zertifikat gefunden wurde. Dieser Fehler ist, weil das generierte Zertifikat von dem CA Server zu genehmigt werden muss.
Beispielausgabe:
Nun meldet man sich an dem CA Server and und kann sich mit

eine Liste noch zu signierender Zertifikate anzeigen lassen.
Um sicher zu sein den richten Server zu signieren, kann man den Fingerprint des Clients an dieser Stelle nochmal abgleichen.
Kehrt man zurück auf den puppetagent, führt man den folgenden Befehl erneut aus:

Am Output des Puppet Agent kann man erkennen, dass der Puppet Run erfolgreich durchgelaufen ist. Nachfolgende Anfragen werden nun über die zwei verfügbaren Load Balancer verteilt.