Skip to content

Commit

Permalink
🔄 Update "Installation and configuration of Puppet Master and Agent" (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
svenja11 authored Jul 31, 2024
1 parent 63707f1 commit 0c9a71d
Show file tree
Hide file tree
Showing 2 changed files with 292 additions and 147 deletions.
224 changes: 147 additions & 77 deletions tutorials/install-and-configure-puppet-master-and-agent/01.de.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
SPDX-License-Identifier: MIT
path: "/tutorials/install-and-configure-puppet-master-and-agent/de"
slug: "install-and-configure-puppet-master-and-agent"
date: "2021-05-27"
date: "2024-07-31"
title: "Installation und Konfiguration von Puppet Master und Agent"
short_description: "Dieses Tutorial vermittelt die Basisschritte um eine Puppet Master / Agent Umgebung auf Ubuntu 20.04 aufzusetzen."
short_description: "Dieses Tutorial vermittelt die Basisschritte um eine Puppet Master / Agent Umgebung auf Ubuntu 24.04 aufzusetzen."
tags: ["Ubuntu", "Puppet"]
author: "Nadine Metzger"
author_link: ""
Expand All @@ -20,147 +20,217 @@ cta: "cloud"

[Puppet](https://puppet.com) 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](https://puppet.com/docs/puppet/7/puppet_index.html)
Das heißt, mit Puppet kann man auf einem Hauptserver ("Master") Anweisungen erstellen, die festlegen, wie andere Server eingerichtet werden sollen. Diese Anweisungen werden automatisch von allen anderen Servern ("Agenten") übernommen.

**Vorraussetzungen**
Dieses Tutorial vermittelt die Basisschritte, um eine Puppet Master / Agent Umgebung auf Ubuntu 24.04 aufzusetzen. Dieses Tutorial geht nicht in Gänze auf die Master / Agent Konfigurationsmöglichkeiten ein, auch die Puppet Module werden nicht behandelt. Für weitere Informationen, siehe die [offizielle Dokumentation](https://www.puppet.com/docs/puppet/8/puppet_index.html).

* 2 Ubuntu 20.04 Server
**Voraussetzungen**

* 2 Server mit Ubuntu 24.04
* Zugriff auf den root-Benutzer oder einen Benutzer mit sudo-Rechten
* Benutzen eines [NTP Service](https://community.hetzner.com/tutorials/install-public-ntp-server-on-debian-ubuntu) (Zeitunterschiede können zu Problemen führen)
* Port 8140 in der [Firewall](https://community.hetzner.com/tutorials/iptables) 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)

**Beispiel-Benennungen**

* <u>Server 1:</u>

Hostname: `puppetmaster`<br>
Auf diesem Server wird Puppet **Master** installiert.

* <u>Server 2:</u>

Hostname: `puppetagent`<br>
Auf diesem Server wird Puppet **Agent** installiert.

## Schritt 1 - Hostnamen hinzufügen

Bevor Puppet installiert wird, muss auf beiden Servern ein Eintrag für die Hostnamen hinzugefügt werden. Bearbeite dafür auf beiden Servern diese Datei:

```bash
sudo nano /etc/hosts
```
10.0.0.20 puppetmaster.example.com
10.0.0.21 puppetagent.example.com
```

## Schritt 1 - Puppet Master installieren
<br>

* **Auf dem Server, auf dem Puppet Master installiert werden soll**

» Füge in der Zeile, in der "localhost" steht zusätzlich "puppet" hinzu.

» Füge eine neue Zeile ein, in der die IP-Adresse vom Server steht, auf dem Puppet Agent installiert werden soll, gefolgt von "puppetagent".
```bash
127.0.0.1 localhost puppet
<ip_of_agent_server> puppetagent
```

<br>

Mit den folgenden Befehlen wird der Puppet Master installiert, dabei wird das Paket direkt von Puppetlabs in der aktuellsten Version bezogen.
* **Auf dem Server, auf dem Puppet Agent installiert werden soll**

» Füge eine neue Zeile ein, in der die IP-Adresse vom Server steht, auf dem Puppet Master installiert werden soll, gefolgt von "puppet".
```bash
<ip_of_master_server> puppet
```

<br>

## Schritt 2 - Puppet Master installieren

> Dieser Schritt muss ausschließlich auf Server 1 (`puppetmaster`) ausgeführt werden.
Mit den folgenden Befehlen wird der Puppet Master installiert. Dabei wird das Paket direkt von Puppet in der aktuellsten Version für Ubuntu 24.04 (noble) bezogen.

```bash
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
wget https://apt.puppet.com/puppet-release-noble.deb
sudo dpkg -i puppet-release-noble.deb
sudo apt update
sudo apt install puppetserver
```

Um den Puppetserver zu starten und auch nach Neustart automatisch starten zu lassen werden die folgenden Befehle genutzt.
Prüfe mit `puppetserver --version`, ob Puppet Master erfolgreich installiert wurde. Als nächstes kann der Puppetserver mit diesen Befehlen gestartet werden. Zusätzlich soll der Puppetserver auch nach einem Reboot automatisch gestartet werden. Anschließend sollte der Status geprüft werden, um sicherzugehen, dass es keine Fehlermeldungen gibt.

```bash
sudo systemctl start puppetserver
sudo systemctl enable puppetserver
sudo systemctl status 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:
Solltest du beim Starten des Puppetservers folgende Fehlermeldung erhalten:
> 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.

```bash
sudo vim /etc/default/puppetserver
sudo nano /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.
Bei Problemen mit dem Zertifikat, kann mittels `sudo puppetserver ca setup` ein Neues erstellt werden.

## Schritt 2 - Puppet Agent installieren
## Schritt 3 - Puppet Agent installieren

> Dieser Schritt muss ausschließlich auf Server 2 (`puppetagent`) ausgeführt werden.
Um den Puppet Agent zu installieren, nutze folgende Befehle:

```bash
wget https://apt.puppet.com/puppet-release-noble.deb
sudo dpkg -i puppet-release-noble.deb
sudo apt update
sudo apt install puppet-agent
```

Um den Puppet Agent zu installieren gehen Sie ähnlich vor:
Prüfe mit `puppet --version`, ob Puppet Agent erfolgreich installiert wurde. Wenn ja, muss in der Puppet Agent Konfiguration der Puppet Master angegeben werden. In dieser Datei kann auch ein Intervall für die Puppet Runs definiert werden. Mit dem unteren Beispiel, wird der Puppet Run alle 30 Minuten ausgeführt (siehe "[runinterval](https://www.puppet.com/docs/puppet/8/configuration.html#runinterval)").

```bash
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
sudo nano /etc/puppet/puppet.conf
```

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`
Füge folgenden Inhalt hinzu:

```ini
[main]
certname = puppetagent.example.com
server = puppetmaster.example.com
certname = puppetagent
server = puppet
runinterval = 30m
```

Auch hier starten Sie Puppet und aktivieren den automatischen Start beim Bootvorgang.
Wie zuvor, starte nun Puppet, richte ein, dass Puppet auch nach einem Reboot automatisch startet und prüfe ob der Service ohne Fehler starten konnte.

```bash
sudo systemctl start puppet
sudo systemctl enable puppet
sudo systemctl status puppet
```
`sudo systemctl status puppet` bestätigt wieder den erfolgreichen Start des Dienstes.

## Schritt 3 - Zertifikate signieren
## Schritt 4 - 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
Nun da Puppet Master und Puppet Agent installiert und konfiguriert sind, geht es an die Kommunikation zwischen 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. Offene Zertifikatsanfragen können wie folgend beschrieben verwaltet werden.

`sudo puppetserver ca list`
<br>

Beispielausgabe:
* Auf `puppetmaster`

Alle offenen Zertifikatsanfragen anzeigen:
```bash
sudo puppetserver ca list
```
Beispielausgabe:
```
Requested Certificates:
puppetagent (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 werden alle anfragenden Agents gelistet. Achte darauf, nur Zertifikate zu signieren die dir bekannt sind.
```bash
sudo puppetserver ca sign --certname <name>
```

```
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
```
<br>

In der Ausgabe sehen Sie alle anfragenden Agents, hier sollten Sie darauf achten nur Ihnen bekannte Zertifikate zu signieren.
* Auf `puppetagent`

Ob die Verbindung zwischen Puppet Master und Agent funktioniert, lässt sich mit folgendem Befehl prüfen:

```bash
puppet ssl bootstrap
```
Die Ausgabe sollte ungefähr so aussehen:
```
Info: csr_attributes file loading from /home/holu/.puppet/etc/csr_attributes.yaml
Info: Creating a new SSL certificate request for puppetagent
Info: Certificate Request fingerprint (SHA256): 2F:2D:8F:94:82:F9:1B:B7:E3:C8:80:DB:99:29:B4:64:AC:BA:F9:E1:D6:79:4C:5F:26:0B:23:8A:1A:78:59:FF
Info: Downloaded certificate for puppetagent from https://puppet:8140/puppet-ca/v1
Notice: Completed SSL initialization
```

```bash
sudo puppetserver ca sign --certname puppetagent.example.com
```
Sollte eine Fehlermeldung wie `Couldn't fetch certificate from CA server` angezeigt werden, verbinde dich erneut mit Server 1 `puppetmaster`, liste alle offenen Zertifikatanfragen und signiere das Zertifikat falls nötig erneut.

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`
<br>

Die Ausgabe sollte beim ersten Mal ungefähr so aussehen
Du kannst nun anfangen deine Server via Puppet automatisiert zu managen.

```
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
```
<br>

## Schritt 5 - Beispieldatei erstellen

Sie können nun anfangen Ihre Server via Puppet automatisiert zu managen.
Um eine Systemkonfiguration zu beschreiben, werden sogenannte Manifeste benötigt. In diesem Tutorial wird ein einfaches Beispiel verwendet, um die Basisfunktion zu zeigen.

Möchten Sie ein Zertifikat wieder entfernen können Sie dies wie folgt tun:
Verbinde dich mit `puppetmaster` und erstelle ein neues Manifest:

```bash
sudo puppetserver ca clean --certname puppetagent.example.com
sudo mkdir -p /etc/puppet/code/environments/production/manifests
sudo nano /etc/puppet/code/environments/production/manifests/site.pp
```

## 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:
Füge folgenden Inhalt hinzu:

```puppet
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 'puppetagent' { # will be executed only for this node; use hostname
file { '/tmp/example-hello': # resource type and filename
ensure => present, # must be present
mode => '0644', # file permission
content => "Hello World!\n", # file content
}
}
node default {} # wird für alle, nicht explizit erwähnten Nodes ausgeführt
node default {} # will be executed for all nodes not mentioned explicitly
```

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.
Mit dem nächsten automatischen Puppet Run, wird auf dem `puppetagent` eine neue Datei erstellt. In "Schritt 3" wurde der Puppet Run auf alle 30 Minuten eingerichtet (`runinterval = 30m`). Um sofort einen Puppet Run durchlaufen zu lassen, verbinde dich mit `puppetagent` und nutze diesen Befehl, um den Puppet Run manuell zu starten:

```bash
sudo /usr/bin/puppet agent --test
```

Nachdem der Puppet Run erfolgreich durchlaufen ist, solltest du den Output "Hello World!" bekommen, wenn du diesen Befehl auf `puppetagent` ausführst:

```bash
cat /tmp/example-hello
```

## Ergebnis

Puppet sollte nun installiert sein und du kannst direkt mit deinen eigenen Manifesten loslegen!

##### License: MIT

Expand Down
Loading

0 comments on commit 0c9a71d

Please sign in to comment.