Einleitung
Puppet ist ein Open-Source Konfigurationsmanagement Tool, welches es dem Benutzer erlaubt eine beliebige Anzahl an Servern automatisiert zu konfigurieren.
Dieses Tutorial vermittelt die Basisschritte um eine Puppet Master / Agent Umgebung auf Ubuntu 20.04 aufzusetzen. Dieses Tutorital geht nicht in Gänze auf die Master / Agent Konfigurationsmöglichkeiten ein, auch die Puppet Module werden nicht behandelt. Weiterführende Informationen finden Sie hier
Vorraussetzungen
- 2 Ubuntu 20.04 Server
- Benutzen eines NTP Service (Zeitunterschiede können zu Problemen führen)
- Port 8140 in der Firewall für eingehenden Traffic freigeben (INPUT chain)
- DNS Einträge der Server. Fehlen diese müssen sie jeweils in die /etc/hosts Datei geschrieben werden: (IP und Hostnamen aus dem Beispiel bitte passend ersetzen)
10.0.0.20 puppetmaster.example.com
10.0.0.21 puppetagent.example.com
Schritt 1 - Puppet Master installieren
Mit den folgenden Befehlen wird der Puppet Master installiert, dabei wird das Paket direkt von Puppetlabs in der aktuellsten Version bezogen.
wget https://apt.puppetlabs.com/puppet-release-focal.deb
sudo dpkg -i puppet-release-focal.deb
sudo apt-get update
sudo apt-get install puppetserver
Um den Puppetserver zu starten und auch nach Neustart automatisch starten zu lassen werden die folgenden Befehle genutzt.
sudo systemctl start puppetserver
sudo systemctl enable puppetserver
sudo systemctl status puppetserver
sollte eine passende Ausgabe liefern und zeigen das der Service erfoglreich gestartet wurde.
Erhalten Sie beim Starten des Puppetservers folgende Fehlermeldung:
Job for puppetserver.service failed because the control process exited with error code
Kann das auf mangelnden RAM hinweisen. Hier kann es helfen in der Puppet Konfiguration die Arbeitsspeichergröße anzupassen, bspw. auf 1g.
sudo vim /etc/default/puppetserver
JAVA_ARGS="-Xms1g -Xmx1g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
Sollten Sie Probleme mit dem Zertifikat feststellen können Sie die CA mittels sudo rm -r /etc/puppetlabs/puppet/ssl/
löschen und mit sudo puppetserver ca setup
neu erstellen.
Schritt 2 - Puppet Agent installieren
Um den Puppet Agent zu installieren gehen Sie ähnlich vor:
wget https://apt.puppetlabs.com/puppet-release-focal.deb
sudo dpkg -i puppet-release-focal.deb
sudo apt-get update
sudo apt-get install puppet-agent
In der Puppet Agent Konfiguration muss der Puppet Master angegeben werden. Hier können Sie u.a. auch ein Intervall für die Puppet runs definieren:
sudo vim /etc/puppetlabs/puppet/puppet.conf
[main]
certname = puppetagent.example.com
server = puppetmaster.example.com
runinterval = 30m
Auch hier starten Sie Puppet und aktivieren den automatischen Start beim Bootvorgang.
sudo systemctl start puppet
sudo systemctl enable puppet
sudo systemctl status puppet
bestätigt wieder den erfolgreichen Start des Dienstes.
Schritt 3 - Zertifikate signieren
Nun da Puppet Master und Puppet Agent installliert und konfiguriert sind, geht es an den Austausch unter den Beiden. Hierzu verwendet Puppet Zertifikate, welche vom Puppet Master signiert werden müssen. Durch den Start des Puppet Agents wurde bereits eine Zertifikatsanfrage an den Puppet Master gestellt. Alle offenen Zertifikatsanfragen können Sie auf dem Puppet Master wie folgt anzeigen lassen
sudo puppetserver ca list
Beispielausgabe:
Requested Certificates:
puppetagent.example.com (SHA256) 55:F3:8B:8D:E8:41:25:0D:A1:CC:0C:D9:73:98:99:6E:73:77:83:97:9D:30:98:03:14:62:3B:F8:7A:25:35:41
In der Ausgabe sehen Sie alle anfragenden Agents, hier sollten Sie darauf achten nur Ihnen bekannte Zertifikate zu signieren.
sudo puppetserver ca sign --certname puppetagent.example.com
Ob die Verbindung zwischen Puppet Master und Agent funktioniert können Sie auf dem Puppet Agent mittels folgendem Befehl überprüfen:
sudo /opt/puppetlabs/bin/puppet agent --test
Die Ausgabe sollte beim ersten Mal ungefähr so aussehen
Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for puppetagent.example.com
Info: Certificate Request fingerprint (SHA256): 55:F3:8B:8D:E8:41:25:0D:A1:CC:0C:D9:73:98:99:6E:73:77:83:97:9D:30:98:03:14:62:3B:F8:7A:25:35:41
Info: Downloaded certificate for puppetclient from https://puppetmaster.example.com:8140/puppet-ca/v1
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetclient
Info: Applying configuration version '1621334490'
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml
Notice: Applied catalog in 0.01 seconds
Sie können nun anfangen Ihre Server via Puppet automatisiert zu managen.
Möchten Sie ein Zertifikat wieder entfernen können Sie dies wie folgt tun:
sudo puppetserver ca clean --certname puppetagent.example.com
Schritt 4 - Beispieldatei erstellen
Um eine Systemkonfiguration zu beschreiben werden sogenannte Manifeste benötigt. An dieser Stelle sei ein einfaches Beispiel genannt um die Basisfunktion zu zeigen.
Das Puppet Standard Manifest findet sich unter /etc/puppetlabs/code/environments/production/manifests/site.pp
.
Sollte die Datei noch nicht existieren, legen Sie sie an. Dieses Beispiel zeigt, wie Sie auf den Puppet Agent eine Datei anlegen können:
node 'puppetagent.example.com' { # wird nur für diesen Node ausgeführt / FQDN verwenden
file {'/tmp/example-hello': # Ressourcen Typ und Dateiname
ensure => present, # muss vorhanden sein
mode => '0644', # Zugriffsrechte
content => "Hello World!\n", # Datei Inhalt
}
}
node default {} # wird für alle, nicht explizit erwähnten Nodes ausgeführt
Wenn nun auf dem Puppet Agent der automatisierte Puppet run läuft wird diese Datei erstellt. Alternativ können Sie auch sudo /opt/puppetlabs/bin/puppet agent --test
auf dem Puppet Agent ausführen. Nach einem erfolgreichen Puppet run sollte cat /tmp/example-hello
die Ausgabe Hello World!
liefern.