Puppet ist ein kostenloses und quelloffenes Konfigurationsmanagement-Tool, das Ihnen hilft, die Konfigurationen von Hunderten von Client-Systemen zentral bereitzustellen und zu verwalten. Es ist für GNU/Linux-, Mac-, BSD-, Solaris- und Windows-basierte Computersysteme verfügbar, veröffentlicht unter Apache-Lizenz, geschrieben in „Ruby“-Sprache. Diese Anleitung hilft Ihnen bei der Installation von Puppet unter CentOS 7 / RHEL 7.
Marionettenarchitektur:
Agent / Master:
In dieser Architektur führen ein oder mehrere Server die Puppet-Master-Anwendung aus, normalerweise als Rack-Anwendung, die von einem Webserver verwaltet wird (wie Apache mit Passenger), und die Puppet-Agent-Anwendung wird auf Client-Servern ausgeführt, normalerweise als Hintergrunddienst.
In regelmäßigen Abständen sendet der Puppet Agent Fakten an den Puppet Master und fordert einen Katalog an. Der Master kompiliert den Katalog dieses Knotens und gibt ihn zurück, wobei er mehrere Informationsquellen verwendet, auf die er Zugriff hat.
Die eigenständige Architektur:
In dieser Architektur führen Client-Server die Puppet Apply-Anwendung (eigenständige Kombination der Puppet Master- und Puppet Agent-Anwendungen) aus, normalerweise als geplante Aufgabe oder Cron-Job.
Umgebung:
Hier zeige ich Ihnen, wie Sie eine Marionette in der Master-/Agent-Architektur konfigurieren. In diesem Tutorial werde ich zwei CentOS 7-Systeme verwenden, wie unten erwähnt.
Puppenmeister:
Operating system : CentOS 7 Minimal IP Address : 192.168.12.10 HostName : server.itzgeek.local
Puppet-Client:
Operating System : CentOS 7 Minimal IP Address : 192.168.12.20 HostName : client.itzgeek.local
Voraussetzungen:
Konfigurieren Sie das EPEL-Repository auf CentOS 7 / RHEL 7.
Stellen Sie sicher, dass Ihr System (sowohl der Puppet-Server als auch der Client) in der Lage sind, den Hostnamen gegenseitig aufzulösen, indem Sie entweder die /etc/hosts-Datei verwenden oder DNS-Server .
Um ein produktionsreifes Puppet-Setup zu haben, müssen wir Apache mit Passenger verwenden. Um den Passagier zu erhalten, laden Sie die Repo-Datei herunter und platzieren Sie sie in /etc/yum.repos.d/
Hinweis:Nur auf dem Masterserver.
[root@server ~]# curl --fail -sSLo /etc/yum.repos.d/passenger.repo https://oss-binaries.phusionpassenger.com/yum/definitions/el-passenger.repo
Um den Puppet-Master/Agent zu installieren, müssten wir das Puppet-Repository auf allen Knoten einrichten. Aktivieren Sie das Puppet Labs-Repository, indem Sie es unter RPM installieren.
Hinweis:Führen Sie es sowohl auf Master- als auch auf Agent-Knoten aus.
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
Installieren und konfigurieren Sie Puppet unter CentOS 7:
Jetzt ist es an der Zeit, Puppet zu installieren. Installieren Sie den Puppet-Server mit dem folgenden Befehl.
[root@server ~]# yum -y install puppet-server
Wie bereits erwähnt, werden wir Puppet für die Master/Agent-Architektur konfigurieren. Dieser Knoten fungiert also als Master-Knoten. Bearbeiten Sie die Puppet-Konfigurationsdatei und ändern Sie die dns_alt_names .
[root@server ~]# vi /etc/puppet/puppet.conf [main] dns_alt_names = server,server.itzgeek.local certname = server.itzgeek.local
Wenn dieser Computer der einzige Puppet-Master in Ihrer Umgebung ist, führen Sie den folgenden Befehl aus, um das Puppet-Master-Zertifikat zu erstellen.
[root@server ~]# puppet master --verbose --no-daemonize Info: Creating a new SSL key for ca Info: Creating a new SSL certificate request for ca Info: Certificate Request fingerprint (SHA256): 81:C6:BB:8B:1D:71:4C:64:E1:13:54:1B:EC:CF:99:D8:85:90:D1:6C:E8:85:50:3E:03:41:BA:C5:47:A7:4C:E5 Notice: Signed certificate request for ca Info: Creating a new certificate revocation list Info: Creating a new SSL key for server.itzgeek.local Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for server.itzgeek.local Info: Certificate Request fingerprint (SHA256): FF:BE:D4:9B:E4:12:83:79:AE:BE:50:17:76:5F:F5:CD:5F:53:EA:5D:AA:5D:87:9E:7C:C4:BC:1B:8A:C6:FA:5C Notice: server.itzgeek.local has a waiting certificate request Notice: Signed certificate request for server.itzgeek.local Notice: Removing file Puppet::SSL::CertificateRequest server.itzgeek.local at '/var/lib/puppet/ssl/ca/requests/server.itzgeek.local.pem' Notice: Removing file Puppet::SSL::CertificateRequest server.itzgeek.local at '/var/lib/puppet/ssl/certificate_requests/server.itzgeek.local.pem' Notice: Starting Puppet master version 3.8.3
Sobald Sie „Hinweis:Starten der Puppet Master-Version
Konfigurieren Sie einen produktionsbereiten Webserver:
Puppet wird mit einem einfachen Puppet-Master-Webserver geliefert, der jedoch nicht für reale Lasten verwendet werden kann. Wir müssen einen Webserver in Produktionsqualität konfigurieren, bevor wir mit der Verwaltung unserer Knoten mit Puppet beginnen.
[root@server ~]# yum -y install httpd httpd-devel mod_ssl ruby-devel rubygems gcc gcc-c++ pygpgme curl
Passagier- und Apache-Modul installieren.
[root@server ~]# yum install -y mod_passenger
Erstellen Sie drei Verzeichnisse für die Anwendung (ein übergeordnetes Verzeichnis, ein „öffentliches“ Verzeichnis und ein „tmp“-Verzeichnis ), kopieren Sie die Datei ext/rack/config.ru aus dem Puppet-Quellcode in das übergeordnete Verzeichnis und legen Sie den Besitz der Datei config.ru fest.
[root@server ~]# mkdir -p /usr/share/puppet/rack/puppetmasterd [root@server ~]# mkdir /usr/share/puppet/rack/puppetmasterd/public /usr/share/puppet/rack/puppetmasterd/tmp [root@server ~]# cp /usr/share/puppet/ext/rack/config.ru /usr/share/puppet/rack/puppetmasterd/ [root@server ~]# chown puppet:puppet /usr/share/puppet/rack/puppetmasterd/config.ru
Fügen Sie einen virtuellen Host für Puppet hinzu, indem Sie die folgende Konfigurationsdatei erstellen.
[root@server ~]# vi /etc/httpd/conf.d/puppetmaster.conf
Fügen Sie den folgenden Inhalt in die virtuelle Hostdatei ein, ändern Sie das Grün Farbige Einträge entsprechend Ihrer Umgebung.
# you probably want to tune these settings PassengerHighPerformance on PassengerMaxPoolSize 12 PassengerPoolIdleTime 1500 # PassengerMaxRequests 1000 PassengerStatThrottleRate 120 Listen 8140 <VirtualHost *:8140> SSLEngine on SSLProtocol ALL -SSLv2 -SSLv3 SSLCipherSuite EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA SSLHonorCipherOrder on SSLCertificateFile /var/lib/puppet/ssl/certs/server.itzgeek.local.pem SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/server.itzgeek.local.pem SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem # If Apache complains about invalid signatures on the CRL, you can try disabling # CRL checking by commenting the next line, but this is not recommended. SSLCARevocationFile /var/lib/puppet/ssl/ca/ca_crl.pem # Apache 2.4 introduces the SSLCARevocationCheck directive and sets it to none # which effectively disables CRL checking; if you are using Apache 2.4+ you must # specify 'SSLCARevocationCheck chain' to actually use the CRL. # SSLCARevocationCheck chain SSLVerifyClient optional SSLVerifyDepth 1 # The `ExportCertData` option is needed for agent certificate expiration warnings SSLOptions +StdEnvVars +ExportCertData # This header needs to be set if using a loadbalancer or proxy RequestHeader unset X-Forwarded-For RequestHeader set X-SSL-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 / <Directory /usr/share/puppet/rack/puppetmasterd/> Options None AllowOverride None Order allow,deny allow from all </Directory> </VirtualHost>
Starten Sie den Apache-Server neu, um den virtuellen Puppet-Host zu übernehmen. Führen Sie dazu den folgenden Befehl auf dem Terminal aus.
[root@server ~]# systemctl restart httpd.service
Deaktivieren Sie den Puppet-Dienst und aktivieren Sie den Apache-Server, um beim Systemstart automatisch zu starten.
[root@server ~]# systemctl disable puppet.service [root@server ~]# systemctl enable httpd.service
Firewall:
Puppet lauscht auf Port Nr. 8140; Konfigurieren Sie die IP-Tabellen, um dies zuzulassen.
[root@server ~]# firewall-cmd --zone=public --add-port=8140/tcp --permanent [root@server ~]# firewall-cmd --reload
Puppet auf Agentenknoten installieren:
Installieren Sie auf Ihrem Client-Rechner Puppet Agent mit dem folgenden Befehl.
Hinweis:Sie müssen das Puppet-Repository auf den Agentenknoten konfiguriert haben.
[root@client ~]# yum -y install puppet
Bearbeiten Sie die Puppet-Konfigurationsdatei und legen Sie Puppet-Master-Informationen in der Client-Stanza fest.
Hinweis:Ändern Sie den Wert „Server“ gemäß Ihrer Umgebung. In meinem Fall ist der Server „server.itzgeek.local“
[root@client ~]# vi /etc/puppet/puppet.conf [agent] server = server.itzgeek.local
Starten Sie Puppet auf dem Agentenknoten und lassen Sie es automatisch beim Systemstart starten.
[root@client ~]# systemctl start puppet.service [root@client ~]# systemctl enable puppet.service
Sie würden die folgenden Ereignisse in den Protokollen erhalten.
Oct 21 05:46:45 client systemd: Starting Puppet agent... Oct 21 05:46:46 client systemd: Started Puppet agent. Oct 21 05:47:03 client systemd: Reloading. Oct 21 05:49:10 client puppet-agent[2694]: Did not receive certificate
Signieren Sie das Zertifikat des Agentenknotens auf dem Masterserver:
In einer Agent/Master-Bereitstellung muss ein Administrator eine Zertifikatsanforderung für jeden Agentenknoten genehmigen, bevor dieser Knoten Konfigurationen abrufen kann. Agentenknoten fordern Zertifikate an, wenn sie zum ersten Mal versuchen, sie auszuführen.
Melden Sie sich beim Puppet-Master-Server an und führen Sie den folgenden Befehl aus, um ausstehende Anfragen anzuzeigen.
[root@server ~]# puppet cert list "client.itzgeek.local" (SHA256) D4:88:EC:C5:0A:F7:5D:4E:32:C5:B3:61:E0:51:7B:0C:CD:B3:49:9E:68:0B:E7:5D:75:19:1D:0B:92:8A:E7:C1
Führen Sie puppet cert sign aus, um eine Anfrage zu signieren, oder puppet cert sign –all, um alle ausstehenden Anfragen zu signieren.
[root@server ~]# puppet cert sign client.itzgeek.local Notice: Signed certificate request for client.itzgeek.local Notice: Removing file Puppet::SSL::CertificateRequest client.itzgeek.local at '/var/lib/puppet/ssl/ca/requests/client.itzgeek.local.pem'
Führen Sie den folgenden Befehl auf dem Clientcomputer aus, um das Zertifikat zu prüfen
[root@client ~]# puppet agent -t Info: Caching certificate for client.itzgeek.local Info: Caching certificate_revocation_list for ca Info: Caching certificate for client.itzgeek.local Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1445401911' Info: Creating state file /var/lib/puppet/state/state.yaml Notice: Finished catalog run in 0.09 seconds
Das ist alles. Jetzt haben Sie Puppet Master und einen Agenten erfolgreich konfiguriert. Es ist an der Zeit, Manifeste zu erstellen (Client-Konfiguration). Bleiben Sie dran.
Dieses Tutorial ist für eine alte Version von Puppet Master, einige Links sind defekt und funktionieren möglicherweise nicht wie erwartet. Eine neue Version ist hier verfügbar:How to Install Puppet 4.x On CentOS 7 / RHEL 7.