Rozpoczęcie przewodnika po zarządzaniu serwerami za pomocą Puppet

Rozpoczęcie przewodnika po zarządzaniu serwerami za pomocą Puppet

Wstęp

Puppet to narzędzie zarządzania konfiguracją open source umożliwiające użytkownik automatycznie, a jeśli jest to wymagane, również zdalnie zarządzać wieloma systemami i jego konfiguracją. Puppet jest deklaratywna, co oznacza, że ​​użytkownik musi tylko żądać stanu usługi lub zasobu A tak naprawdę nie zastanów się, jak ten stan zostanie osiągnięty.

Innymi słowy, wyobraź sobie, że jesteś administratorem systemu zarządzającym setkami systemów i musisz upewnić się, że pewne zasoby takie Witam Pakiet jest zainstalowany. Aby to osiągnąć w tradycyjny sposób administracji systemu, użytkownik administratora będzie musiał przejść wiele kontroli, takich jak bieżący stan instalacji opakowania, rodzaj platformy systemu operacyjnego, polecenie instalacyjne, które ma być używane przed faktyczną instalacją pakietu. Będąc lalką deklaracją, użytkownik musi tylko zdefiniować stan pożądanego pakietu, a Puppet zajmie się resztą. W przypadku, gdy nasz pakiet „Hello” zostanie zainstalowany Puppet nie podejmie żadnych działań, podczas gdy jeśli pakiet nie zostanie zainstalowany, zainstaluje go.

Scenariusz

W naszym scenariuszu nie będziemy uruchamiać setek systemów operacyjnych i próbujemy je zarządzać. Nasz cel będzie znacznie prostszy. W rzeczywistości uruchomimy tylko dwa oddzielne systemy uruchomione master marionetki i agenta marionetki. Zatem za pośrednictwem głównego serwera marionetki spróbujemy skonfigurować zdalny węzeł i zainstalować pakiet „Hello” za pomocą agenta Puppet. Zostanie to zrobione z absolutną konfiguracją.

Terminologia

  • Puppet Master - Central Server, który hostuje i kompiluje wszystkie manifestacje konfiguracji agenta
  • Agent Puppet - Usługa, która działa w węźle i okresowo sprawdzaj status konfiguracji z głównym serwerem marionetkowym i pobiera aktualną aktualną manifest konfiguracyjny
  • Manifest - Plik konfiguracyjny, który jest wymieniany między marionetkowym agentem i agentem marionetkowym
  • Węzeł - system operacyjny, na którym działa usługa marionetka

Ustawienia scenariuszy

Przez cały ten samouczek będę odwołać się do obu gospodarzy po prostu jako gospodarz I Node1. System operacyjny używany w obu gospodarz I Node1 Instancje to Debian 8 Jessie. Ubuntu Linux może być również używany jako alternatywa do przestrzegania tego samouczka. Podstawowa konfiguracja sieci jest nieistotna. Oczekuje się jednak Node1 może rozwiązać gospodarz host po nazwie i oba hosty są podłączone i stosowane są odpowiednie ustawienia zapory ogniowej, aby umożliwić marionetkę gospodarz I Node1 agent do komunikacji:

root@node1:/# ping -c 1 master ping master (172.17.0.1): 56 bajtów danych 64 bajtów od 172.17.0.1: ICMP_SEQ = 0 ttl = 64 czas = 0.083 MS --- Master Ping Statistics --- 1 Przesyłane pakiety, 1 Pakiety Otrzymane, 0% utrata pakietu Min/AVG/Max/stddev = 0.083/0.083/0.083/0.000 ms 

NOTATKA: Przeczytaj załącznik na temat tego, jak bez wysiłku skonfigurować powyższy scenariusz z Dockerem.

Instalacja i konfiguracja Master Pepper

Zacznijmy od instalacji Puppet Master:

root@master: ~# apt-get Zainstaluj Puppetmaster-Passenger 

Powyższe polecenie zainstaluje Puppet wraz z Apache i pasażerem. Zatem zamiast korzystać z typowego serwera Webrick, będziemy zaangażować pasażera Apache do uruchomienia Puppet Master na porcie 8140. Domyślny i automatycznie generowany plik konfiguracyjny pasażera Apache może być zlokalizowany w ramach /etc/apache2/witryn-dostępny/marionetkowy.conf:

# Ta wirtualna konfigura. Zobacz # http: // dokumenty.Puppetlabs.com/przewodniki/pasażer.HTML, aby uzyskać więcej informacji. # Możesz także użyć dołączonej konfiguracji.plik Ru do uruchomienia marionetki z innymi serwerami Rack # zamiast pasażera. # Prawdopodobnie chcesz dostroić te ustawienia pasażerskimi najemnik na pasainmaxPoolSize 12 pasażerPoolidletime 1500 # PasengerMaxRequests 1000 PasengerStthrottleRate 120 Słuchaj 8140 SSLENGINE na SSLPROTOCOL ALL -SSLV2 -SSLV3 SSLCIPHERSUITE EDH+CAMELLIASA: EDH+ARSA: EECDH+ARSASA+ARSSA. EECDH+ARSA+SHA256: EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLV3:!anull:!Enall:!NISKI:!3DES:!MD5:!DO POTĘGI:!PSK:!DSS:!RC4:!NASIONKO:!POMYSŁ:!ECDSA: KEDH: CAMELLIA256-SHA: AES256-SHA: CAMELLIA128-SHA: AES128-SHA SSLHONORCIPHERORGER ON SSLCERTIFIDEFILE/VAR/LIB/PUPPET/SSL/CERTS/Master.PEM SSLCertificateKeKeyFile/var/lib/puppet/ssl/private_keys/master.PEM SSLCertificateChainfile/var/Lib/Puppet/SSL/certs/ca.PEM SSLCACTIFIFATEFILE/VAR/Lib/Puppet/SSL/Certs/Ca.PEM # Jeśli Apache narzeka na nieprawidłowe podpisy na CRL, możesz spróbować wyłączyć sprawdzanie # CRL, komentując następny wiersz, ale nie jest to zalecane. SslcarevocationFile/var/lib/puppet/ssl/ca/ca_crl.PEM # Apache 2.4 Wprowadza dyrektywę SSLCAREVocationCheck i ustawia ją na Brak #, która skutecznie wyłącza sprawdzanie CRL; Jeśli używasz Apache 2.4+ musisz # określić „łańcuch sslcarevocationCheck”, aby faktycznie użyć CRL. # SslcarevocationCheck łańcuch sslverifyClient opcjonalny sslverifydepth 1 # # ExportCertData ”jest potrzebna do certyfikatu agenta Ostrzeżenia wygaśnięcia Ssloptions +Stdenvvars +ExportCertData # Ten nagłówek musi być ustawiony -Subject %ssl_client_s_dn e set requestheader x-client-dn %ssl_client_s_dn e requestheader set zestaw x-client-weryf Brak Zamów, pozwól, odmówić zezwolić od wszystkich   

Patrząc na powyższy plik konfiguracyjny, możemy zauważyć liczbę certyfikatów SSL automatycznie generowanych na podstawie nazwy hosta systemu. Potwierdź, że wszystkie wymienione ścieżki certyfikatów wskazują na prawidłowe certyfikaty SSL marionetki. W przeciwnym razie należy wygenerować nowe certyfikaty SSL. Jeśli musisz najpierw wygenerować nowe certyfikaty, usuń bieżące certyfikaty:

root@master: ~# rm -rf/var/lib/puppet/ssl 

Następnie uruchom Puppet na pierwszym planie, aby zobaczyć swoje nowe certyfikaty, aby uzyskać wygenerowanie. Po zakończeniu zatrzymaj proces za pomocą kombinacji klucza CTRL+C:

root@master: ~# Puppet Master --verbose-No-Daemonize Informacje: Tworzenie nowego klawisza SSL dla CA 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 Uwaga: Podpisane żądanie certyfikatu Informacje CA: Tworzenie nowego listy odwołania certyfikatu Informacje: Tworzenie nowego klucza SSL dla informacji głównych: Plik CSR_ATTRUBUTES Załadowanie/etc/Puppet/Csr_Attributes.INFORMACJE JAML: Tworzenie nowego żądania certyfikatu SSL Informacje główne: Prośba o certyfikat odcisk palca (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 Uwaga: Master ma wniosek o certyfikat oczekiwania: Podpisane żądanie certyfikatu na powiadomienie Master: Usuwanie pliku Puppet :: SSL :: Certiftaterequest Master at '/var/lib/puppet/ssl/ca/requests/master.PEM '.PEM '.7.2 ^cnotice: Caught Int; Zadzwoń do stop 

Zanim zaczniemy nasz Master Puppet, najpierw musimy utworzyć domyślny manifest konfiguracji pustej:

root@master: ~#>/etc/puppet/manifests/strona.pp 

Wszystko jest gotowe, aby umożliwić Puppet Master zacząć po ponownym uruchomieniu:

root@master: ~# Systemctl Włącz stan synchronizacji Apache2 dla apache2.usługa z Sysvinit za pomocą aktualizacji-RC.D… Wykonanie/usr/sbin/aktualizacja-RC.D apache2 domyślnie wykonywanie/usr/sbin/aktualizacja-rc.d Apache2 Włącz 

i uruchom Puppet Master, uruchamiając Apache Webserver:

root@master: ~# Service Apache2 Start [OK] Uruchamianie serwera WWW: Apache2. root@master: ~# 

Potwierdź, że Puppet działa

# Ps Aux użytkownik PID %CPU %MEM VSZ RSS TTY STAT STAT Time Time Command 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 start 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 pasażerhelperagent nikogo 1466 0.0 0.0 226648 4892 ? SL 12:40 0:00 pasażerloggingagent 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 

i słuchanie na porcie 8140:

# Netstat -ant Aktywne połączenia internetowe (serwery i ustalone) Proto recv-q send-q adres lokalny 0 :: 443 :::* Słuchaj 

Konfiguracja węzłów marionetkowych

W tej chwili nasz serwer główny działa i oczekuje żądań od agenta marionetki i dlatego nadszedł czas, aby zainstalować nasz agent marionetki Node1:

# apt-get instaluj marionetkę 

Następnie musimy skonfigurować Puppet, aby działał jako agent, usuwając dowolne domyślne dyrektywy serwera głównego z jego pliku konfiguracyjnego /etc/marionetka/marionetka.conf:
Z:

[Main] logDir =/var/log/puppet vardir =/var/lib/puppet ssldir =/var/lib/puppet/ssl rundir =/var/run/puppet factpath = $ vardir/lib/fcter prerun_command =/etc//etc//etc/etc//etc//etc//etc/ Puppet/Etckeeper-Commit-Pre Postrun_Command =/etc/Puppet/Etckeeper-Commit-Post [Master] # są potrzebne, gdy Puppetmaster jest prowadzony przez pasażera # i można go bezpiecznie usunąć, jeśli używany jest Webrick. ssl_client_header = ssl_client_s_dn ssl_client_verify_header = ssl_client_verify 

DO:

[Main] logDir =/var/log/puppet vardir =/var/lib/puppet ssldir =/var/lib/puppet/ssl rundir =/var/run/puppet factpath = $ vardir/lib/fcter prerun_command =/etc//etc//etc/etc//etc//etc//etc/ Puppet/etckeeper-commit-pre postsrun_command =/etc/puppet/etckeeper-commit-post [agent] server = master 

Powyższa dyrektywa serwer = Master definiuje serwer główny, z którym będzie połączony przez agenta Puppet. Gdzie słowo gospodarz W naszym przypadku jako nazwa hosta, która postanawia master adres IP serwera:

# ping -c 1 mistrz ping (172.17.0.43): 56 bajtów danych 64 bajtów od 172.17.0.43: icmp_seq = 0 ttl = 64 czas = 0.226 MS --- Master Ping Statistics --- 1 Przesyłane pakiety, 1 Pakiety Otrzymane, 0% utrata pakietów w obie strony Min/AVG/MAX/STDDEV = 0.226/0.226/0.226/0.000 ms 

Część instalacyjna jest gotowa, a to, co pozostało, aby umożliwić Puppet rozpoczęcie po ponownym uruchomieniu i uruchomienie marionetki:

# SystemCtl Włącz stan synchronizacji marionetki dla marionetki.usługa z Sysvinit za pomocą aktualizacji-RC.D… Wykonanie/usr/sbin/aktualizacja-RC.d Puppet domyślnie wykonywanie/usr/sbin/aktualizacja-RC.d marionetka Włącz root@node1:/# serwis Puppet Start [OK] początkowa agent marionetki. 

Ponadto, domyślnie agent jest wyłączony po instalacji na nowych, niezręcznych hostach. Aby włączyć agenta Puppet, musimy uruchomić:

root@node1:/# Puppet Agent -Uneble 

Podpisanie certyfikatu agenta

Obaj gospodarze gospodarz I Node1 są gotowe. Ostatnim zestawem konfiguracji wymaganej do uzyskania zarówno mówienia głównego, jak i agenta jest podpisanie Node1Prośba o certyfikat. Po uruchomieniu agenta marionetki Node1 Wydano żądanie podpisania certyfikatu gospodarz serwer:

root@master:/# Puppet Cert Cert „Node1” (SHA256) 2C: 62: B3: A4: 1a: 66: 0a: 14: 17: 93: 86: e4: f8: 1c: e3: 4e: 25: f8: f8: f8: f8: f8: f8: f8 : 7a: 7c: FB: FC: 6B: 83: 97: F1: C8: 21: DD: 52: E4: 91 

Domyślnie każde żądanie podpisania certyfikatu musi zostać podpisane ręcznie:

root@master:/# Puppet Cert znak Node1.pem ' 

Na tym etapie nasz Mistrz powinien hostować dwa podpisane certyfikaty:

 root@master:/# Puppet Cert List --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: Fe: Fe: Fe: Fe: Fe: Fe: Fe: Fe: Fe: 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: D9 : 2a 

Uruchamianie żądania konfiguracji marionetki

Czas utworzyć pierwszą manifest konfiguracyjny. Jak już wspomniano powyżej Witam jest dostępny na Node1. Otwórz domyślny manifest /etc/marionetka/manifesty/strona.pp plik na gospodarz hosty i dodaj następującą uproszczoną konfigurację węzła:

pakiet „hello”: upewnij się => „zainstalowany” 

Nasz agent Node1 jest ustawione domyślnie, aby odzyskać konfigurację Master co 30 minut. Jeśli nie chcemy czekać, możemy ręcznie uruchomić żądanie konfiguracji:

root@node1:/# hello bash: hello: nie znaleziono polecenia 

Pakiet Hello jest obecnie niedostępny Node1. Ręcznie uruchomić nowe żądanie konfiguracji:

root@node1:/# Puppet Agent -TEST [Hello]/Upewnij się: Upewnij się, że zmieniono „Oczyszczone” na „Przedstawianie” informacji: Tworzenie pliku stanu/var/lib/puppet/state/stan.Uwaga YAML: Gotowy katalog bieg w 4.00 sekundy 

Z powyższego wyjścia widać, że zastosowano nową konfigurację, a pakiet „Hello” jest już dostępny:

root@node1:/# cześć cześć, świat! 

Wniosek

Powyższy tekst pokazał uproszczoną procedurę konfiguracji marionetek. Powinien jednak służyć jako punkt wyjścia dla wdrożeń wielopartecznych. Aby dodać więcej węzłów, po prostu ponownie odwiedzaj powyżej Sekcja konfiguracji węzłów marionetkowych I Podpisanie certyfikatu agenta Sekcje tego artykułu.

Rozwiązywanie problemów

Apache2: Nie można wiarygodnie określić w pełni kwalifikowanej nazwy domeny serwera, używając 172.17.0.43. Ustaw dyrektywę „Servername” na całym świecie, aby stłumić tę wiadomość

# echo "Servername 'hostName'" >>/etc/apache2/apache2.conf 

UWAGA: Pomijanie klienta konfiguracji marionetki; Wyłączone administracyjne (powód: „Domyślnie wyłączony na nowych lub niekonfigurowanych starych instalacjach”);
Użyj „agenta marionetki -nable” do ponownego włączenia.

root@node1:/# Puppet Agent -Uneble 

Załącznik

Szybkie ustawienia scenariuszy za pomocą Dockera

LinuxConfig/Sandbox to obraz Docker zawierający podstawowe narzędzia do edycji tekstu i sieci, które pomogą Ci skonfigurować i rozwiązywać problemy Master and Agent.
Pierwszy początek Puppet Master:

# Docker Run -it -h Master --name = Master LinuxConfig/Sandbox/Bin/Bash 

Po uruchomieniu mistrza marionetki start Node1:

# Docker Run -it -h Node1 --Name = Node1 - -Link Master: Master LinuxConfig/Sandbox/Bin/Bash 

Powiązane samouczki Linux:

  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Wyrażenia regularne Pythona z przykładami
  • Skrypt bash: Hello World Przykład
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Jak skonfigurować serwer OpenVPN na Ubuntu 20.04
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Jak wykonywać operacje administracyjne z Ansible…
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Obsługa danych wejściowych użytkownika w skryptach Bash
  • Jak usunąć bluatware z Samsung Android Mobile…