Puppet eignet sich eigentlich ziemlich gut für Umgebungen mit mehreren Mastern, mit Vorbehalten. Der wichtigste? Viele Teile von Puppet möchten zentralisiert werden. Die Zertifizierungsstelle, die Inventarisierungs- und Dashboard- / Berichtsservices, das Filebucketing und gespeicherte Konfigurationen - alle sind am besten in einem Setup (oder benötigen es einfach), in dem es nur einen Ort gibt, an dem sie sich unterhalten können.
Es ist jedoch durchaus praktikabel, viele dieser sich bewegenden Teile in einer Umgebung mit mehreren Mastern zum Laufen zu bringen, wenn Sie mit dem Verlust einiger Funktionen einverstanden sind, wenn Sie Ihre primäre Site verloren haben.
Beginnen wir mit der Basisfunktionalität, um einen Knoten an einen Master zu melden:
Module und Manifeste
Dieser Teil ist einfach. Versionskontrolle sie. Wenn es sich um ein verteiltes Versionskontrollsystem handelt, zentralisieren und synchronisieren Sie es einfach und ändern Sie Ihren Push / Pull-Fluss nach Bedarf auf der Failover-Site. Wenn es sich um Subversion handelt, möchten Sie wahrscheinlich svnsync
das Repo auf Ihre Failover-Site durchführen.
Zertifizierungsstelle
Eine Möglichkeit besteht darin, die Zertifizierungsstellendateien einfach zwischen den Mastern zu synchronisieren, sodass alle dasselbe Stammzertifikat verwenden und Zertifikate signieren können. Das hat mich immer als "falsch gemacht" empfunden;
- Sollte ein Master wirklich sein eigenes Zertifikat in der Client-Authentifizierung für eine eingehende Verbindung von einem anderen Master als gültig anzeigen?
- Funktioniert das zuverlässig für den Inventarservice, das Dashboard usw.?
- Wie können Sie später weitere gültige DNS-ALT-Namen hinzufügen?
Ich kann nicht ehrlich sagen, dass ich diese Option gründlich getestet habe, da sie schrecklich erscheint. Puppet Labs scheinen diese Option jedoch nicht zu fördern, wie in der Anmerkung hier angegeben .
Sie müssen also einen zentralen CA-Master haben. Alle Vertrauensstellungen funktionieren weiterhin, wenn die Zertifizierungsstelle inaktiv ist, da alle Clients und anderen Master das Zertifizierungsstellenzertifikat und die Zertifikatsperrliste zwischenspeichern (obwohl sie die Zertifikatsperrliste nicht so oft aktualisieren, wie sie sollten). Sie können jedoch erst neue Zertifikate signieren Sie sichern den primären Standort oder stellen den CA-Master von Sicherungen am Failover-Standort wieder her.
Sie wählen einen Master als CA aus und lassen ihn von allen anderen Mastern deaktivieren:
[main]
ca_server = puppet-ca.example.com
[master]
ca = false
Dann möchten Sie, dass dieses zentrale System den gesamten zertifikatsbezogenen Datenverkehr abruft. Hierfür gibt es einige Optionen.
- Verwenden Sie die
SRV
Unterstützung für neue Datensätze in 3.0, um alle Agentenknoten auf die richtige Stelle für die Zertifizierungsstelle zu verweisen._x-puppet-ca._tcp.example.com
- Richten Sie die
ca_server
Konfigurationsoption in puppet.conf
allen Agenten ein
Übertragen Sie den gesamten Verkehr für CA-bezogene Anforderungen von Agenten an den richtigen Master. Wenn Sie beispielsweise alle Master in Apache über Passenger ausführen, konfigurieren Sie dies auf den Nicht-CAs:
SSLProxyEngine On
# Proxy on to the CA.
ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-ca.example.com:8140/$1
# Caveat: /certificate_revocation_list requires authentication by default,
# which will be lost when proxying. You'll want to alter your CA's auth.conf
# to allow those requests from any device; the CRL isn't sensitive.
Und das sollte es tun.
Bevor wir zu den Nebendienstleistungen übergehen, eine Randnotiz;
DNS-Namen für Master-Zertifikate
Ich denke, das hier ist der überzeugendste Grund, auf 3.0 umzusteigen. Angenommen, Sie möchten einen Knoten auf "einen alten Arbeitsmaster" verweisen.
Unter 2.7 benötigen Sie einen generischen DNS-Namen puppet.example.com
, und alle Master benötigen diesen in ihrem Zertifikat. Das bedeutet Einstellung dns_alt_names
in ihrer Konfiguration, Re-Ausgabe das CERT , dass sie hatten , bevor sie als Master konfiguriert wurden, erneut die Ausgabe wieder das CERT , wenn Sie einen neuen DNS - Namen in die Liste hinzufügen müssen (wie , wenn Sie mehr DNS - Namen wollten Agenten bevorzugen Master in ihrer Site) .. hässlich.
Mit 3.0 können Sie SRV
Datensätze verwenden. Geben Sie all Ihren Kunden dies;
[main]
use_srv_records = true
srv_domain = example.com
Dann werden für die Master keine speziellen Zertifikate benötigt - fügen Sie einfach einen neuen Datensatz zu Ihrer SRV
RR hinzu _x-puppet._tcp.example.com
und schon ist es ein Live-Master in der Gruppe. Besser noch, Sie können die Master-Auswahllogik auf einfache Weise verfeinern. "Jeder alte Arbeitsmeister, aber bevorzugen Sie den in Ihrer Site", indem Sie verschiedene SRV
Datensätze für verschiedene Sites einrichten. nicht dns_alt_names
benötigt.
Berichte / Dashboard
Dieser funktioniert am besten zentral, aber wenn Sie bei Ausfall Ihrer primären Site darauf verzichten können, ist dies kein Problem. Konfigurieren Sie einfach alle Ihre Master mit der richtigen Position, um die Berichte zu platzieren.
[master]
reports = http
reporturl = https://puppetdash.example.com/reports/upload
..und Sie sind fertig. Das Fehlschlagen des Uploads eines Berichts ist für den Konfigurationslauf nicht schwerwiegend. Es geht nur verloren, wenn der Toast des Dashboard-Servers erfolgt.
Fact Inventory
Eine weitere schöne Sache, die Sie in Ihr Dashboard geklebt haben, ist der Inventarservice. Mit dem facts_terminus
Satz , rest
wie in der Dokumentation empfohlen, würde dies tatsächlich Konfiguration läuft brechen , wenn der zentrale Bestands Dienst nicht verfügbar ist. Der Trick dabei ist, den inventory_service
Terminus auf den nicht zentralen Mastern zu verwenden, was ein elegantes Versagen ermöglicht.
facts_terminus = inventory_service
inventory_server = puppet-ca.example.com
inventory_port = 8140
Stellen Sie Ihren zentralen Inventarserver so ein, dass die Inventardaten entweder über ActiveRecord oder PuppetDB gespeichert werden. Er sollte immer auf dem neuesten Stand sein, wenn der Dienst verfügbar ist.
Also - wenn Sie mit einer hübschen Konfigurationsverwaltungsumgebung mit Barebones zufrieden sind, in der Sie nicht einmal die Zertifizierungsstelle verwenden können, um das Zertifikat eines neuen Knotens zu signieren, bis es wiederhergestellt ist, kann dies gut funktionieren - auch wenn es wirklich nett wäre wenn einige dieser Komponenten ein wenig vertriebsfreundlicher wären .