Workstation für das Konfigurations-Management mit Chef bereitstellen

    Chef WorkstationNach dem erfolg­reichen Setup eines Chef-Automate Servers folgt die Instal­lation einer Chef-Work­station. Sie ist zu­ständig für das Er­stellen, Hoch­laden und schließ­lich das An­wenden von Konfi­gura­tionen in Form von Rezepten. In Frage kommen für diese Funktion sowohl Windows- als auch Linux-PCs und Macs.

    Für die Aufgaben auf einer Chef-Workstation steht eine Reihe von Chef-Tools zur Verfügung, allen voran das Chef Development Kit. Dieses enthält alle benötigten Komponenten, darunter auch das Tool Knife. Es wird sowohl für das Hochladen und Aktualisieren von Cookbooks auf den Chef-Automate-Server verwendet, als auch für das Bootstrappen von Chef-Knoten.

    Das ChefDK steht wie alle übrigen Chef-Werkzeuge auf der Chef-Downloadseite zur Verfügung. Wer bereits eine Linux-Workstation, VM oder EC2-Instanz zur Hand hat, kann das ChefDK zum Beispiel unter Red Hat oder Amazon Linux recht schnell und einfach mit

    wget https://packages.chef.io/files/stable/chefdk/2.4.17/el/7/chefdk-2.4.17-1.el7.x86_64.rpm

    sudo yum install -y chefdk-2.4.17-1.el7.x86_64.rpm

    installieren, und seinen Linux-Host damit quasi zur Chef-Workstation ausbauen.

    Bei Verwendung von Chef-Automate auf Basis von AWS-Opsworks bietet sich eine EC2-Instanz als Chef-Workstation natürlich an, weil dann sämtliche beteiligten Tools sicher in einer VPC betrieben werden.

    Aufbau einer Chef-Umgebung auf AWS OpsWork

    Das schließt, wie schon erwähnt, nicht aus, dass Chef auch virtuelle oder physische Server im On-Premises-Rechen­zentrum bootstrappen kann, sofern dort der Chef-Agent und der Chef-Client installiert sind.

    Für Windows steht das ChefDK als MSI-Installer-Paket zum Download zur Verfügung. Alternativ kann man aber auch das komplette Chef-Workstation-Paket für Windows, Linux der MacOS herunterladen und installieren.

    Installation einer Chef-Workstation unter Windows

    Beides, die Installation des ChefDK und oder das vollständige Bereitstellen des Chef-Workstation-Paketes unter Windows, basiert auf einem entsprechenden PowerShell-Modul. Dafür steht eine entsprechend konfigurierte PowerShell als Desktop-Icon zur Verfügung.

    StarterKit und ChefDK konfigurieren

    Zur Konfiguration des ChefDK, welches schließlich die Kommunikation zwischen Chef Workstation und ChefServer ermöglicht, müssen wir etwas ausholen. Wie schon im vorherigen Teil erläutert, stellt AWS zu diesem Zweck neben den bereits verwendeten Sign-in Credentials für den Chef Server auch ein so genanntes StarterKit zum Download bereit.

    Dieses enthält eine Readme-Datei mit Beispielen, eine Konfigurations­datei knife.rb und einen privaten Schlüssel für den primären oder pivotalen Benutzer. Jedes Mal, wenn Sie das Starter Kit herunter­laden, wird ein neues Schlüssel­paar erstellt und der alte Schlüssel zurückgesetzt.

    Das Key-File findet sich im Unterverzeichnis ".chef", das zugehörige root-ca-File im Sub-sub-Folder "ca_certs", beide im pem-Format.

    Verzeichnisse, in denen Chef den Key und das root-ca-File speichert

    Ein optionaler SSH-Key hätte bereits bei der Bereitstellung des Chef-Automate-Servers erstellt oder (sofern vorhanden) angegeben werden können. Allerdings ist ein SSH-Key für die Verbindung zum Chef-Server weder erforderlich und auch nicht empfehlenswert, weil man für die meisten Verwaltungs­aufgaben das knife-Kommando verwendet.

    Ein EC2-Schlüsselpaar ist nur dann nützlich, wenn man beispielsweise das Passwort zum Anmelden beim Chef Automate-Dashboard vergessen hat.

    Das Dienst­programm knife ist Teil des ChefDK und benötigt zur sicheren Kommunikation mit dem Chef-Automate-Server den oben erwähnten pivotalen Chef-Schlüssel. Dieser wird beim Einrichten des Servers automatisch erstellt und beim Download des Starter Kits im versteckten Unterverzeichnis .chef bereitgestellt (siehe Abbildung).

    Tipp: Wer den Chef-Automate-Server per CLI erstellt, kann bei der Ausführung des create-server-Kommandos auch einen zuvor mittels OpenSSL lokal erstellt Key angeben. Man muss dann AWS bzw. Chef Automate nicht blind vertrauen:

    umask 077
    openssl genrsa -out "pivotal" 2048
    openssl rsa -in "pivotal" -pubout

    Standardkonfiguration für Knife anpassen

    Ferner enthält das Unterverzeichnis .chef/knife.rb eine vorbereite Knife-Konfigurations­datei (knife.rb). Sie ist so konfiguriert, dass alle knife-Operationen in der beschriebenen Weise über den AWS OpsWorks for Chef Automate-Server laufen, weil in diesem die erwähnten Keys entsprechend eingetragen sind.

    Standardlkonfiguration für Knife

    Neben den Anmelde­informationen, die nur für den neuen Server gültig sind, enthält das Starter Kit ein einfaches Beispiel für ein Chef-Repository, das mit beliebigen Chef Automate-Servern (nicht nur aus AWS) funktioniert.

    Im Chef-Repository werden Cookbooks, Rollen, Konfigurations­dateien und andere Artefakte zur Verwaltung der Knoten mit Chef gespeichert. Unter DevOps-Gesichts­punkten ist es sogar sinnvoll, dieses Repository in einem Versions­kontrollsystem wie Git abzulegen und als Quellcode zu behandeln.

    Passwort zurücksetzen

    Wer die Anmelde­informationen vergessen hat, kann jederzeit neue erstellen, oder wie folgt das Anmeldepasswort zurücksetzen (dadurch verliert man dann aber seine bestehende Konfiguration). Dazu bedarf es der Instance-ID des Chef-Automate Servers.

    Mit diesem (ermittelbar über die EC2-Console) bewaffnet, gibt man dann folgendes Kommando ein:

    aws ssm send-command --document-name "AWS-RunShellScript" --comment "reset admin password" --instance-ids "instance_id" --parameters commands="sudo delivery-ctl reset-password enterprise_name user_name new_password" --region region_name --output text

    Hierbei ersetzt man enterprise_name durch den Namen des Unternehmens bzw. der Organisation, user_name durch den IAM-Benutzernamen eines Admini­strators auf dem Server, new_password durch das gewünschte Passwort und region_name durch die Region des Servers. Gibt man keinen Unternehmens­namen an, erhält das Unternehmen den Namen default.

    Keine Kommentare