Guide de démarrage pour la gestion des serveurs à l'aide de marionnettes

Guide de démarrage pour la gestion des serveurs à l'aide de marionnettes

Introduction

Puppet est un utilitaire de gestion de configuration open source permettant à l'utilisateur de gérer automatiquement et si nécessaire, gérez également à distance plusieurs systèmes et sa configuration. La marionnette est déclarative, ce qui signifie que l'utilisateur doit seulement demander un état du service ou des ressources et ne réfléchissent pas vraiment à la façon dont cet état sera réalisé.

En d'autres termes, imaginez que vous êtes un administrateur système gérant des centaines de systèmes et que vous devez vous assurer que certaines ressources comme Bonjour le package est installé. Afin d'y parvenir d'une manière traditionnelle d'administration du système, l'utilisateur de l'administrateur devra subir plusieurs vérifications telles que l'état actuel de l'installation du package, le type de plate-forme du système d'exploitation, la commande d'installation à utiliser avant l'installation réelle du package. Étant la marionnette comme déclarative, l'utilisateur n'a besoin que de définir l'état du package et de la marionnette souhaités s'occupera du reste. Dans un cas où notre package «Hello» est installé que la marionnette ne prendra aucune mesure, alors que si le package n'est pas installé, il l'installera.

Scénario

Dans notre scénario, nous n'allons pas exécuter des centaines de systèmes d'exploitation et tenter de les gérer. Notre objectif sera beaucoup plus simple que ça. En fait, nous allons exécuter seulement deux systèmes distincts exécutant un maître de marionnettes et un agent de marionnette. Ainsi, via le serveur de marionnettes maître, nous tenterons de configurer un nœud distant et d'installer un package «Hello» à l'aide de l'agent de marionnettes. Cela se fera avec une configuration minimale nue possible.

Terminologie

  • Puppet Master - Serveur central qui héberge et compile tous les manifestes de configuration de l'agent
  • Agent de marionnette - Un service qui s'exécute sur le nœud et vérifie périodiquement un état de configuration avec Master Puppet Server et récupère un manifeste de configuration actuel à jour
  • Manifeste - Fichier de configuration qui est échangé entre Muster Puppet et agent de marionnette
  • Node - Un système d'exploitation sur lequel le service de marionnettes fonctionne

Paramètres de scénario

Tout au long de ce tutoriel, je ferai référence aux deux hôtes simplement maître et node1. Système d'exploitation utilisé sur les deux maître et node1 Instances est Debian 8 Jessie. Ubuntu Linux peut également être utilisé comme alternative pour suivre ce tutoriel. La configuration du réseau sous-jacente n'est pas pertinente. Cependant, il est prévu que node1 peut résoudre le maître L'hôte par son nom et les deux hôtes sont connectés et des paramètres de pare-feu appropriés sont appliqués pour permettre à la marionnette maître et node1 agent pour communiquer:

root @ node1: / # ping -c 1 maître ping maître (172.17.0.1): 56 octets de données 64 octets de 172.17.0.1: icmp_seq = 0 ttl = 64 Time = 0.083 ms --- Statistiques de ping maître --- 1 paquets transmis, 1 paquets reçus, 0% de perte de paquets aller-retour min / avg / max / stddev = 0.083/0.083/0.083/0.000 ms 

NOTE: Lisez l'annexe sur la façon de configurer le scénario ci-dessus sans effort avec Docker.

Pupper Master Installation et configuration

Commençons par l'installation de Puppet Master:

root @ maître: ~ # apt-get install puppetmaster-passager 

La commande ci-dessus installera la marionnette à côté d'Apache et du passager. Ainsi, au lieu d'utiliser le serveur WeBrick typique, nous impliquerons le passager Apache pour exécuter Puppet Master sur le port 8140. Le fichier de configuration du passager APACH par défaut et automatique peut être situé sous / etc / apache2 / sites-disponible / puppetmaster.confli:

# Cette configuration d'hôte virtuelle Apache 2 montre comment utiliser la marionnette comme application de rack # via le passager. Voir # http: // docs.puppetlabs.com / guides / passager.HTML pour plus d'informations. # Vous pouvez également utiliser la configuration incluse.Fichier RU pour exécuter la marionnette avec d'autres serveurs de rack # au lieu du passager. # Vous voulez probablement régler ces paramètres PassengerHighPormance sur PassergeraxPoolSize 12 PassengerPoolidleTime 1500 # PASSERGERMAXREQUESS 1000 PASSENGERSTTATTHROTLERATE 120 ÉCOUTER 8140 SSLENGINE SUR SSLPROTOCOL ALL -SSLV2 -SSLV3 SSLCIPHER EECDH + ARSA + SHA256: EECDH: + CAMELLIA256: + AES256: + CAMELLIA128: + AES128: + SSLV3:!anull:!ENULL:!FAIBLE:!3des:!MD5:!Exp:!PSK:!DSS:!RC4:!GRAINE:!IDÉE:!ECDSA: KEDH: CAMELLIA256-SHA: AES256-SHA: CAMELLIA128-SHA: AES128-SHA SSLHONORCIPHERORDORDOR sur SSLCertificatefile / var / lib / puppet / ssl / certs / maître.pem sslcertificatekeyfile / var / lib / puppet / ssl / private_keys / maître.pem sslcertificatechainfile / var / lib / marionnet / ssl / certs / ca.pem sslcacertificatefile / var / lib / marionnet / ssl / certs / ca.PEM # Si Apache se plaint des signatures non valides sur le CRL, vous pouvez essayer de désactiver la vérification # CRL en commentant la ligne suivante, mais ce n'est pas recommandé. Sslcarevocationfile / var / lib / puppet / ssl / ca / ​​ca_crl.pem # apache 2.4 introduit la directive SSLCareVocationCheck et le définit à aucun # qui désactive efficacement la vérification CRL; Si vous utilisez Apache 2.4+ Vous devez # spécifier «la chaîne SSLCarevocationChecheck» pour utiliser réellement le CRL. # Sslcarevocationchecheck chaîne sslverifyClient sslverifyDepth 1 # L'option `` ExportCertData '' est nécessaire pour les avertissements d'expiration du certificat d'agent. -Subject% ssl_client_s_dn e requestHeader set x-client-dn% ssl_client_s_dn e requestHeader set x-client-verify% ssl_client_verify e documentroot / usr / share / puppet / rack / puppetmasterd / public / rackbaseuri / Options newoverride / puppetrider Aucune ordonnance autorise, nier l'autoriser à tous   

En regardant le fichier de configuration ci-dessus, nous pouvons remarquer un certain nombre de certificats SSL générés en fonction du nom d'hôte du système. Confirmez que tous les chemins de certificat répertoriés indiquent un certificat SSL de marionnettes correctes. Sinon, de nouveaux certificats SSL devront être générés. Si vous devez d'abord générer de nouveaux certificats, supprimez les certificats actuels:

root @ maître: ~ # rm -rf / var / lib / marionnet / ssl 

Ensuite, exécutez la marionnette au premier plan pour voir vos nouveaux certificats pour être généré. Une fois terminé, arrêtez le processus avec la combinaison de touches Ctrl + C:

root @ maître: ~ # puppet maître --verbose --no-daemonize info: Création d'une nouvelle clé SSL pour CA Info: Création d'une nouvelle demande de certificat SSL pour CA Info: Demande de certificat Imprimée digitale (SHA256): FA: D8: 2A: 0F: B4: 0B: 91: 8C: 01: AD: 71: B4: 49: 66: 1F: B1: 38: BE: A4: 4E: AF: 76: 16: D2: 97: 50: C8: A3: 8f: 35: CC: F2 AVIS: Demande de certificat signé pour CA Info: Création d'une nouvelle liste de révocation de certificat Informations: Création d'une nouvelle clé SSL pour les informations principales: CSR_ATTRIBUTES Chargement de fichiers à partir de / etc / puppet / csr_attributes.INFO YAML: Création d'une nouvelle demande de certificat SSL pour Master Info: Demande de certificat Empreinte digitale (SHA256): 43: 67: 42: 68: 64: 73: 83: F7: 36: 2b: 2e: 6f: 06: 20: 65: 87: AB: 61: 96: 2A: EB: B2: 91: A9: 58: 8E: 3F: F0: 26: 63: C3: 00 Avis: Master a une demande de certificat d'attente AVIS: Demande de certificat signé pour avis maître: Suppression du fichier Puppet :: SSL :: CertificateRequest Master à '/ var / lib / puppet / ssl / ca / ​​requêtes / maître.PEM 'AVIS: Suppression du fichier Puppet :: SSL :: CertificateRequest Master à' / var / lib / puppet / ssl / certificate_requests / maître.PEM 'AVIS: Démarrage de Puppet Master Version 3.7.2 ^ cnotice: capturé int; Appel à l'appel 

Avant de démarrer notre maître de marionnettes, nous devons d'abord créer un manifeste de configuration à blanc par défaut:

root @ maître: ~ #> / etc / marionnette / manifestes / site.pp 

Tout est prêt à permettre à Puppet Master de commencer après le redémarrage:

root @ maître: ~ # systemctl Activer Apache2 Synchronisation de l'état pour apache2.Service avec sysvinit en utilisant la mise à jour-rc.d… exécuter / usr / sbin / update-rc.d apache2 par défaut Exécution / usr / sbin / update-rc.d apache2 activer 

et démarrez Puppet Master en démarrant Apache Webserver:

root @ maître: ~ # service apache2 start [ok] Démarrage du serveur Web: apache2. root @ maître: ~ # 

Confirmez que la marionnette fonctionne

# PS AUX USER PID% CPU% MEM VSZ RSS TTY STAT START TIME ROOT ROOT 1 0.0 0.0 20228 2016 ? SS 11:53 0:00 / Bin / Bash Root 1455 0.0 0.0 98272 4600 ? SS 12:40 0:00 / USR / SBIN / APACHE2 -K ROOT ROOT 1458 0.0 0.0 223228 1920 ? SSL 12:40 0:00 PassengerwatchDog Root 1461 0.0 0.0 506784 4156 ? Sl 12:40 0:00 Passengerhelperagent Personne 1466 0.0 0.0 226648 4892 ? Sl 12:40 0:00 PassengerloggingAgent-www-data 1476 0.0 0.0 385300 5116 ? Sl 12:40 0:00 / USR / SBIN / APACHE2 -K START www-data 1477 0.0 0.0 450880 5608 ? Sl 12:40 0:00 / USR / SBIN / APACHE2 -K START ROOT 1601 0.0 0.0 17484 1140 ? R + 12:44 0:00 ps Aux 

Et écouter sur le port 8140:

# netStat -ant des connexions Internet actives (serveurs et établis) proto recv-q send-q adresse locale d'adresse étrangère état tcp6 0 0 ::: 8140 ::: * Écoutez TCP6 0 0 ::: 80 ::: * Écoutez TCP6 0 0 ::: 443 ::: * Écoutez 

Configuration du nœud de marionnettes

Pour le moment, notre serveur maître exécute et s'attend à des demandes de l'agent de marionnettes et il est donc temps d'installer notre agent de marionnette sur node1:

# Puppet d'installation apt-get 

Ensuite, nous devons configurer Puppet pour agir en tant qu'agent en supprimant toutes les directives par défaut du serveur maître de son fichier de configuration / etc / marionnette / marionnette.confli:
DEPUIS:

[Main] logdir = / var / log / puppet vardir = / var / lib / puppet sslir = / var / lib / puppet / ssl rundir = / var / run / puppet factPath = $ vardir / lib / facter prérun_command = / etc / Puppet / etckeeper-commit-prue postrun_command = / etc / marionnet / etckeeper-commit-post [maître] # Ceux-ci sont nécessaires lorsque le marionnet est exécuté par le passager # et peut être supprimé en toute sécurité si Webbrick est utilisé. ssl_client_header = ssl_client_s_dn ssl_client_verify_header = ssl_client_verify 

POUR:

[Main] logdir = / var / log / puppet vardir = / var / lib / puppet sslir = / var / lib / puppet / ssl rundir = / var / run / puppet factPath = $ vardir / lib / facter prérun_command = / etc / Puppet / etckeeper-commit-prue postrun_command = / etc / puppet / etckeeper-commit-post [agent] server = maître 

La directive ci-dessus serveur = maître Définit un serveur maître à connexion par l'agent de marionnettes. Où le mot maître Dans notre cas en tant que nom d'hôte qui se résout à l'adresse IP de Master Server:

# Ping -C 1 Master Ping Master (172.17.0.43): 56 octets de données 64 octets de 172.17.0.43: icmp_seq = 0 ttl = 64 Time = 0.226 ms --- Master Ping Statistics --- 1 paquets transmis, 1 paquets reçus, 0% de perte de paquets aller-retour min / avg / max / stddev = 0.226/0.226/0.226/0.000 ms 

La pièce d'installation est terminée et ce qui reste est de permettre à Puppet de commencer après le redémarrage et de démarrer la marionnette:

# SystemCTL Activer l'état de synchronisation des marionnettes pour Puppet.Service avec sysvinit en utilisant la mise à jour-rc.d… exécuter / usr / sbin / update-rc.D Puppet par défaut Exécution / USR / SBIN / UPDATE-RC.D Puppet Activer root @ node1: / # Service Puppet Start [OK] Démarrer l'agent de marionnette. 

De plus, par défaut, l'agent est désactivé après l'installation sur de nouveaux hôtes non officés. Pour activer l'agent de marionnettes, nous devons courir:

root @ node1: / # Agent de marionnette --enable 

Certificat d'agent de signature

Les deux hôtes maître et node1 sont opérationnels. Le dernier ensemble de configuration requis pour faire parler à la fois maître et agent est de signer node1Demande de certificat. Après avoir commencé l'agent de marionnettes sur node1 Une demande de panneau de certificat a été publiée à maître serveur:

Root @ Master: / # Puppet CERT Liste "Node1" (Sha256) 2C: 62: B3: A4: 1A: 66: 0A: 14: 17: 93: 86: E4: F8: 1C: E3: 4E: 25: F8 : 7A: 7C: FB: FC: 6B: 83: 97: F1: C8: 21: DD: 52: E4: 91 

Par défaut, chaque demande de panneau de certificat doit être signée manuellement:

root @ maître: / # puppet Cert Sign node1 node: Signed Certificate Demande de node1 Nove: Suppression du fichier Puppet :: ssl :: CertificateRequest node1 à '/ var / lib / puppet / ssl / ca / ​​requêtes / node1.pem ' 

À ce stade, notre maître devrait accueillir deux certificats signés:

 Root @ Master: / # Puppet CERT Liste - All + "Master" (Sha256) EE: E0: 0A: 5C: 05: 17: FA: 11: 05: E8: D0: 8C: 29: FC: D2: 1F : E0: 2F: 27: A8: 66: 70: D7: 4B: A1: 62: 7E: BA: F4: 7C: 3D: E8 + "Node1" (Sha256) 99: DC: 41: BA: 26: Fe : 89: 98: DC: D6: F0: 34: 64: 7A: DF: E2: 2F: 0E: 84: 48: 76: 6d: 75: 81: BD: EF: 01: 44: CB: 08: D9 : 2a 

Déclatement de la demande de configuration des marionnettes

Il est temps de créer un premier manifeste de configuration. Comme déjà mentionné ci-dessus, nous allons maintenant nous assurer que ce package Bonjour est disponible sur node1. Ouvrez un manifeste par défaut / etc / marionnette / manifestes / site.pp fichier sur le maître hôtes et ajouter la configuration de nœud simpliste suivante:

Package "Hello": assure => "installé" 

Notre agent sur node1 est défini par défaut pour récupérer la configuration de Master toutes les 30 minutes. Si nous ne souhaitons pas attendre, nous pouvons déclencher la demande de configuration manuellement:

root @ node1: / # Hello Bash: Bonjour: commande introuvable 

Le package bonjour n'est actuellement pas disponible sur node1. Déclenchez manuellement la nouvelle demande de configuration:

root @ node1: / # Agent de marionnet - Test Info: Caching Certificate_Revocation_List pour CA Info: Récupération des pluginfacts Info: Récupération du plugin Info: Catalogue de mise en cache pour Node1 Info: Application de la version de configuration '1434159185' [Bonjour] / Assurez-vous: assurez-vous des informations «purgées» modifiées à des informations «présentes»: création de fichiers d'état / var / lib / marionnette / état / état.AVIS YAML: Catalogue fini en 4.00 secondes 

À partir de la sortie ci-dessus, nous pouvons voir que une nouvelle configuration a été appliquée et que le package «bonjour» est maintenant disponible:

root @ node1: / # bonjour bonjour, monde! 

Conclusion

Le texte ci-dessus illustré une procédure de configuration de marionnette simpliste. Cependant, il devrait servir de point de départ pour les déploiements multi-nœuds. Pour ajouter plus de nœuds simplement revisiter ci-dessus Section de configuration du nœud de marionnette et Certificat d'agent de signature sections de cet article.

Dépannage

apache2: n'a pas pu déterminer de manière fiable le nom de domaine entièrement qualifié du serveur, en utilisant 172.17.0.43. Définissez la directive «ServerName» à l'échelle mondiale pour supprimer ce message

# echo "servername 'hostname'" >> / etc / apache2 / apache2.confli 

AVIS: Sauter de l'exécution du client de configuration de marionnettes; Désactivé administrativement (raison: «désactivé par défaut sur les anciennes installations nouvelles ou non configurées»);
Utilisez «l'agent de marionnettes -enable» pour réactiver.

root @ node1: / # Agent de marionnette --enable 

annexe

Paramètres de scénario rapide utilisant Docker

Le LinuxConfig / Sandbox est une image Docker contenant un montant de l'édition et des outils de réseautage de texte de base pour vous aider à configurer et à dépêcher votre maître et agent de marionnettes.
Démarrer d'abord le maître des marionnettes:

# docker run -it -h maître --name = maître linuxconfig / sandbox / bin / bash 

Une fois que le maître de marionnette est opérationnel, commencez node1:

# docker run -it -h node1 --name = node1 - link maître: maître linuxconfig / sandbox / bin / bash 

Tutoriels Linux connexes:

  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Python Expressions régulières avec des exemples
  • Bash Script: Hello World Exemple
  • Choses à installer sur Ubuntu 20.04
  • Comment configurer un serveur OpenVPN sur Ubuntu 20.04
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Comment effectuer des opérations d'administration avec Ansible…
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Gestion de la saisie des utilisateurs dans les scripts bash
  • Comment éliminer les bloatware de votre mobile Android Samsung…