Puppet scentralizowany system zarządzania systemami



Podobne dokumenty
Lalka w Chmurze. Alex Urbanowicz. Cel ćwiczenia. Opisanie konfiguracji

Puppet Jak zacząć? Marcin Piebiak Linux Polska sp. z o.o.

MikroTik Serwer OpenVPN

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Zabbix -Monitoring IT bez taśmy klejącej. Paweł Tomala Barcamp 15 czerwca 2015

Testy penetracyjne Przykłady programów

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

SAP BASIS Architektura systemu klient Server

System operacyjny Linux

Instrukcja obsługi User s manual

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Klastrowanie bazy IBM DB2. Adam Duszeńko

PODSTAWOWA KONFIGURACJA LINKSYS WRT300N

Bacula - howto. W sutuacji gdy posiadamy firewalla należy go odpowiednio zmodyfikować (na przykładzie iptables ):

Instalacja i konfiguracja serwera SSH.

Konfiguracja SO UNIX do komunikacji opartej o DNS (ang. Domain Name System).

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

Czym jest router?... 3 Vyatta darmowy router... 3 Vyatta podstawowe polecenia i obsługa... 3 Zarządzanie użytkownikami... 3 Uzupełnianie komend...

ROZSZERZAJĄC FUNKCJONALNOŚCI MEMCACHED

Programowanie i projektowanie obiektowe

Sample VNF Rack and VNF Descriptor Configuration File

LOTUS DOMINO 7. Użycie certyfikatów niekwalifikowanych w oprogramowaniu LOTUS DOMINO 7 serwer WWW / pocztowy

Jak zatrudnić słonie do replikacji baz PostgreSQL

Puk, puk! Kto tam? Eeeee... Spadaj!

Win Admin Replikator Instrukcja Obsługi

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Administracja serwerami

1.1 Podłączenie Montaż Biurko Montaż naścienny... 4

Integracja z systemem Nagios

Win Admin Replikator Instrukcja Obsługi

Wordpress. Wstęp do tworzenia pluginów. Piotr Wasilewski wasilewski.piotrek (at) gmail.com

podstawowa obsługa panelu administracyjnego

Instrukcja instalacji środowiska testowego na TestingCup wersja 1.0

Zadanie1: Wykorzystując serwis internetowy Wikipedii odszukaj informacje na temat usługi WINS.

Programowanie w Ruby

Usprawnienie procesu zarządzania konfiguracją. Marcin Piebiak Solution Architect Linux Polska Sp. z o.o.

Programowanie w Ruby

BACKUP BAZ DANYCH FIREBIRD

PROFESJONALNE SYSTEMY BEZPIECZEŃSTWA

Serwer DHCP (dhcpd). Linux OpenSuse.

Security Master Class Secure Configuration Life Cycle. Marcin Piebiak Senior Solutions Architect Linux Polska Sp. z o.o.

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

SSI Web 8. (badania.kozminski.edu.pl) Instrukcja logowania i uruchamiania ankiety

Administracja serwerami

Witaj, jeżeli przegladasz ten plik oznacza że chcesz stworzyć własnego masterka. No cóż koniec bełkotania bierzmy się za zrobienie mastera!

Instalacja i konfiguracja rouera ASMAX AR 904u. Neostrada, Netia

PRZETWARZANIE ROZPROSZONE ZADAN` Mariusz Gil 4Developers 2012, Poznań

podstawowa obsługa panelu administracyjnego

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Warsztaty ewon. efive

Bazy Danych i Usługi Sieciowe

CMS Admin instrukcja administratora

System. Instalacja bazy danych MySQL. Autor : Piotr Zielonka tel Piotrków Tryb., sierpień 2018r.

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Konfiguracja klienta Lotus Notes R6 z certyfikatami i kluczami na karcie kryptograficznej lub w pliku.

Bezpieczeństwo systemów informatycznych

System operacyjny Linux

Zarządzanie sieciami komputerowymi - wprowadzenie

Administracja bazami danych

Win Admin Replikator Instrukcja Obsługi

SVN sojusz, partnerstwo, współpraca

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Zapoznanie się z konfiguracją i zarządzaniem serwerem Samba.

Tworzenie maszyny wirtualnej

SQL injection. Metody włamań do systemów komputerowych p. 1/13. Bogusław Kluge, Karina Łuksza, Ewa Makosa

Wybrane działy Informatyki Stosowanej

Wstęp. Modele rejestrowania zdarzeń systemu

Instalacja platformy Magento CE wersja szybka

Projektowanie Bezpieczeństwa Sieci Łukasz Jopek Projektowanie Bezpieczeństwa Sieci - Laboratorium. Konfiguracja NAP Network Access Protection

Serwery LDAP w środowisku produktów w Oracle

Administracja serwerami

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

Zadanie OUTSIDE /24. dmz. outside /24. security- level /16

Bazy danych i usługi sieciowe

ZADANIE.02 Podstawy konfiguracji (interfejsy) Zarządzanie konfiguracjami 1,5h

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

DBPLUS Data Replicator Subtitle dla Microsoft SQL Server. dbplus.tech

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Named template parameters

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

PROFESJONALNE USŁUGI BEZPIECZEŃSTWA

Krótka instrukcja instalacji

Jak skonfigurować bezpieczną sieć bezprzewodową w oparciu o serwer RADIUS i urządzenia ZyXEL wspierające standard 802.1x?

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Wykaz zmian w programie SysLoger

Sieci komputerowe Warstwa aplikacji

INSTRUKCJA OBSŁUGI DLA SIECI

trainxx tramxx

Jarosław Kuchta Administrowanie Systemami Komputerowymi. Internetowe Usługi Informacyjne

Linux -- u mnie działa!

Baza danych sql. 1. Wprowadzenie

Środowiska wirtualne i zarządzanie zależnościami w Pythonie. Piotr Grzesik

Win Admin Replikator Instrukcja Obsługi

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

Transkrypt:

Puppet scentralizowany system zarządzania systemami Piotr Stolc piotr@stolc.pl Zimowisko TLUG 2010

Problem wzorców coraz większa liczba systemów (maszyny fizyczne i wirtualne) czasochłonność wprowadzania zmian na wielu maszynach (np. prosta zmiana hasła roota na wszystkich maszynach) identyczne kopie systemów na wielu serwerach - farmy WWW, bazy danych itd. problem odtwarzania systemu problem synchronizacji wprowadzanych zmian wersjonowanie i logowanie zmian konfiguracji

Wzorce - rozwiązania cały system spakowany do.tgz skrypty do update ów konfigurowanie systemu przez tworzenie indywidualnych paczek cfengine puppet

Puppet - założenia instalacja minimalistycznej wersji systemu PXE rulez! instalację reszty systemu i jego konfigurację załatwia Puppet brak wyjątków - wszystko musi być w Puppecie regułki Puppeta trzymane w repozytorium SVN

Puppet http://reductivelabs.com/products/puppet/ scentralizowany system do automatycznego zarządzania systemami open source :) (GPL) napisany w Ruby wieloplatformowy bardzo elastyczny i dający wiele możliwości definiuje prosty i intuicyjny język do konfigaracji zasobów (obiekty) pozwala każdą rzecz zdefiniować tylko w jednym miejscu używany przez wiele dużych firm, organizacji i uczelni na całym świecie

Składniki facter - program do zbierania informacji o systemie puppet puppetd - klient można odpalić jako daemon można odpalać ręcznie gdy potrzeba puppetmasterd - serwer puppetca - program do zarządzania certyfikatami

facter pstolc@puppet-test-1.lab ~ $ facter architecture => x86_64 domain => lab facterversion => 1.5.7 fqdn => puppet-test-1.lab hardwareisa => x86_64 hardwaremodel => x86_64 hostname => puppet-test-1 id => pstolc interfaces => eth0,eth1,sit0 ipaddress => 192.168.0.10 ipaddress_eth0 => 192.168.0.10 is_virtual => true kernel => Linux kernelmajversion => 2.6 kernelrelease => 2.6.18-128.7.1.el5.centos.plus kernelversion => 2.6.18 lsbdistcodename => Final lsbdistdescription => CentOS release 5.3 (Final) lsbdistid => CentOS lsbdistrelease => 5.3 lsbmajdistrelease => 5 [...]

Jak to działa?

Jak to działa? puppetd (klient)

Jak to działa? puppetd (klient) puppetmaster (serwer)

Jak to działa? puppetd (klient) Komunikacja z serwerem certyfikaty, HTTP (XMLRPC) puppetmaster (serwer)

Jak to działa? puppetd (klient) Komunikacja z serwerem certyfikaty, HTTP (XMLRPC) puppetmaster (serwer) Synchronizacja lokalnej kopii pluginów (facter)

Jak to działa? facter Zebranie danych o systemie puppetd (klient) Komunikacja z serwerem certyfikaty, HTTP (XMLRPC) puppetmaster (serwer) Synchronizacja lokalnej kopii pluginów (facter)

Jak to działa? facter Zebranie danych o systemie puppetd (klient) Komunikacja z serwerem certyfikaty, HTTP (XMLRPC) puppetmaster (serwer) Synchronizacja lokalnej kopii pluginów (facter) Zapytanie o regułki przesłanie danych z factera

Jak to działa? facter Zebranie danych o systemie puppetd (klient) Komunikacja z serwerem certyfikaty, HTTP (XMLRPC) puppetmaster (serwer) Synchronizacja lokalnej kopii pluginów (facter) Zapytanie o regułki przesłanie danych z factera Przesłanie skompilowanych regułek Kompilacja uwzględnia nazwę node a oraz informacje z factera

Pierwsze uruchomienie puppet-test-1.lab ~ # /usr/sbin/puppetd --onetime --test --server wzorce.lab info: Creating a new SSL key for puppet-test-1.lab warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session info: Creating a new SSL certificate request for puppet-test-1.lab warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session warning: peer certificate won't be verified in this SSL session Exiting; no certificate found and waitforcert is disabled puppet-test-1.lab ~ #

Podpisanie klucza wzorce.lab ~ # /usr/sbin/puppetca --list puppet-test-1.lab wzorce.lab ~ # /usr/sbin/puppetca --sign puppet-test-1.lab puppet-test-1.lab notice: Signed certificate request for puppet-test-1.lab notice: Removing file Puppet::SSL::CertificateRequest puppet-test-1.lab at '/ var/lib/puppet/ssl/ca/requests/puppet-test-1.lab.pem' wzorce.lab ~ #

Już działa :) puppet-test-1.lab ~ # /usr/sbin/puppetd --onetime --test --server wzorce.lab warning: peer certificate won't be verified in this SSL session info: Caching certificate for puppet-test-1.lab info: Retrieving plugin info: Loading facts in arch info: Loading facts in arch info: Caching catalog for puppet-test-1.lab info: Applying configuration version '1263709623' notice: //test_case/file[/tmp/plik_test_case]/ensure: created notice: //www::php/file[/etc/php.d]/checksum: checksum changed '{mtimesat Jan 16 08:39:24 +0100 2010' to '{mtimesat Jan 16 09:35:03 +0100 2010' info: //www::php/file[/etc/php.d]: Scheduling refresh of Service[httpd] notice: //www::apache/service[httpd]: Triggering 'refresh' from 1 dependencies notice: Finished catalog run in 24.07 seconds puppet-test-1.lab ~ #

Struktura konfiguracji Nie do końca aktualna ;) /etc/puppet/ puppet.conf manifests/ site.pp modules.pp nodes/*.pp modules/ nazwa_modulu/ files/ manifests/ plugins/ templates/ konfiguracja serwera i klienta główne reguły główny konfig - import pozostałych plików itd. import modułów konfiguracja node ów moduły pliki statyczne regułki wtyczki szablony

Język - type type (typ?) - coś jak funkcja przyjmuje parametry używane do definiowania rzeczy powtarzalnych Puppet posiada kilkadziesiąt wbudowanych typów cron, exec, file, group, host, mount, package, service, user itd. itp. można pisać własne - jako bardziej zaawansowane pluginy albo proste regułki nie można wywołać dwukrotnie typu o tej samej nazwie można w wielu miejscach definiować standardowe wartości parametrów

Przykład 1 user { admin : ensure => present, uid => 31337, gid => 31337, name => admin, comment => admin user, home => /home/admin, shell => /bin/bash, password => $1$A37...,

Przykład 2 file { /home/admin : ensure => directory, owner => admin, group => admin, mode => 0700, require => User[ admin ], file { /home/admin/.bashrc : owner => admin, group => admin, mode => 0600, source => puppet:///modul/bashrc, require => [ User[ admin ], File[ /home/admin ] ],

Język - class class (klasy) - używane do definiowania rzeczy niepowtarzalnych dziedziczenie możliwość wywołania wielokrotnie tej samej klasy (brak kolizji) brak możliwości przekazywania parametrów należy korzystać ze zmiennych mimo wszystko w przypadku definicji niepowtarzalnych warto pisać klasy zamiast typów gdyż korzystanie z nich jest bardziej elastyczne niż korzystanie z typów

Przykład 3 class admin::user { user { admin : ensure => present, uid => 31337, gid => 31337, name => admin, comment => admin user, home => /home/admin, shell => /bin/bash, password => $1$A37..., file { /home/admin : ensure => directory, owner => admin, group => admin, mode => 0700, require => User[ admin ],

Przykład 4 class admin::user::bashrc inherits admin::user { file { /home/admin/.bashrc : owner => admin, group => admin, mode => 0600, source => puppet:///modul/bashrc, require => [ User[ admin ], File[ /home/admin ] ],

Język - node node - definicje przypisane dla danego hosta nazwa node a to po prostu hostname dziedziczenie node ów można zdefiniować basenode ale lepiej zrobić to na klasach :) - zmienne idealna konfiguracja node a zawiera tylko definicje zmiennych i include y klas w praktyce jednak z node a wywołujemy bezpośrednio niektóre typy

Przykład 5 node maszyna_admina { $jakas_wartosc = 50 $nazwa = Maszyna dla admina $hostgroup = admin # zmienne należy zdefiniować przed załączeniem klas które # z tych zmiennych korzystają include basesystem include admin::user::bashrc

Język - zmienne możemy definiować zmienne ;) możemy korzystać ze zmiennych zdefiniowanych przez factera zmienne możemy wykorzystywać w instrukcjach warunkowych zmienne możemy wykorzystywać w parametrach typów zmienne możemy wykorzystywać w template ach

Przykład 6 file { "/data": ensure => $hostgroup? { www" => "/www/", "cache" => "/cache/", "db" => directory,, force => true,

Przykład 7 główna konfiguracja site.pp ustawienie standardowych wartości dla typów exec i package - w tym drugim na bazie zmiennej $operatingsystem # /etc/puppet/manifests/site.pp import "modules" import "nodes" import "nodes/*.pp" #filebucket { main: server => puppetmaster #File { backup => main Exec { path => "/usr/bin:/usr/sbin:/bin:/sbin" Package { provider => $operatingsystem? { centos => yum

Przykład 8 class admin::user::bashrc inherits admin::user { file { /home/admin/.bashrc : owner => admin, group => admin, mode => 0600, source => [ puppet:///modul/bashrc.$hostname, puppet:///modul/bashrc.default, ], require => [ User[ admin ], File[ /home/admin ] ],

Język - wirtualny zasób wirtualny zasób definiuje się raz, a można go uaktywnić wielokrotnie bardzo przydatne do uniknięcia konfliktów przy wielokrotnym definiowaniu typu o takiej samej nazwie

Przykład 9 @file { "/data": ensure => $hostgroup? {, force www" "cache" "db" => true, realize (File[ /data ]) => "/www/", => "/cache/", => directory,

Język - template y pozwalają na generowanie zawartości plików na podstawie zmiennych

Przykład 10 file { /etc/memcached.conf : owner => root, group => root, mode => 0600, content => template( modul/memcached.conf.erb ),

Przykład 11 # memcached.conf.erb # # plik tworzony przez Puppeta # nie edytowac recznie! # -m <%= size %> #User to run as -u <%= user %> #Specify maximum number of concurrent connections #1024 is default -c <%= conns %> #Listen for connections on what port? -p <%= port %> #Other Options -v

Przykład 12 # httpd.conf.erb [...] <% if has_variable?("config_www_mod_perl") then %>LoadModule perl_module modules/mod_perl.so <% end %><% if has_variable?("config_www_ldap") then %>LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so <% end %><% if has_variable?("config_www_ssl") then %>LoadModule ssl_module modules/mod_ssl.so <% end %> [...]

Język - pluginy pluginy do puppeta pluginy do factera można znaleźć w sieci dużo ciekawych rozwiązań np. moduł puppet-mysql z pluginami, do zarządzania użytkownikami i uprawnieniami w mysql

Przykład 13 # plugins/facter/arch.rb libdir = case Facter.value('operatingsystem') when "CentOS" case Facter.value('architecture') when "x86_64" then "/usr/lib64" else "/usr/lib" end else "/usr/lib" end Facter.add("libdir") do setcode do libdir end end

Przykłady z życia

Przykład - node node 'www02' { $config_ldap_group = "www" $config_sec = 1 $config_logrotate = 1 $config_www = 1 $hostgroup = "www" include base include storage::setup_client include www::server::gr::farma network-conf { "network-conf": hostname => "www02", gateway => "192.168.1.1", gatewaydev => "eth0" interface-conf { "eth0": ipaddr => "192.168.1.2", netmask => "255.255.255.0", network => "10.0.0.0", nrpeconf { "nrpeconf": listen => "192.168.1.2", allowedhosts => "192.168.1.10", baseipmi { "baseipmi": basehp { "basehp":

Przykład - klasa nginx class www::nginx { package { "nginx": ensure => present realize(sysuser::add["www"]) file { "/etc/nginx": ensure => directory, recurse => true, purge => true, force => true, backup => false, owner => root, group => root, mode => 644, source => [ "puppet:///www/$hostname/nginx", "puppet:///www/$hostgroup/nginx", "puppet:///www/default/nginx", ], require => Package["nginx"], notify => Service["nginx"], service { "nginx": enable => true, ensure => true, restart => "/etc/init.d/nginx configtest && /etc/init.d/nginx reload", require => [ File["/etc/nginx"], Sysuser::Add["www"] ],

Przykład - inny node node 'memcache01' { $config_ldap_group = "memcache" include base include memcache::farma network-conf { "memcache01": hostname => "memcache01", snmpconf { "snmpconf": networks => [ "192.168.1.0/24" ] nrpeconf { "nrpeconf": listen => "192.168.1.3", allowedhosts => "192.168.1.10" resolv_conf { "resolv_conf": domainname => "domena.pl", searchpath => ['domena.pl'], nameservers => ['192.168.1.5', 192.168.1.6 ] sudoersconf { "sudoersconf": baseipmi { "baseipmi": basehp { "basehp": memcache::instance { "memcache_dla_projektu_x": name => "memcache_dla_projektu_x", size => 1024, port => 12345, ensure => present,

Przykład - memcached class memcache { package { "memcached": ensure => present group { "memcached": ensure => present, gid => 151, name => "memcached", user { "memcached": ensure => present, uid => 151, gid => "memcached", name => "memcached", comment => "User memcached", home => "/nonexistent", shell => "/sbin/nologin",

Przykład - memcached define memcache::instance ($name, $size, $user="memcached", $conns="1024", $port, $ensure="present") { case $ensure { default : { err ("unknown ensure value ${ensure") present: { file { "/etc/init.d/memcached.$name": ensure => "/etc/init.d/memcached" file { "/etc/memcached/$name": owner => root, group => root, mode => 644, content => template("memcache/config.erb"), service { "memcached.$name": enable => true, ensure => true, require => [ File["/etc/memcached/$name"], File["/etc/init.d/memcached.$name"] ], absent: { service { "memcached.$name": enable => false, ensure => stopped, file { "/etc/memcached/$name": ensure => absent, file { "/etc/init.d/memcached.$name": ensure => absent,

Wady wydajność bezpieczeństwo inni admini muszą kumać bazę czas poświęcony na tworzenie i rozszerzanie reguł zależy od tego jak napisaliśmy reguły

Zalety wszystko w jednym miejscu historia zmian (SVN) kontrola nad tym co się dzieje bardzo łatwo można wprowadzać duże zmiany na setkach maszyn

Rady ;) myśleć obiektowo a nie liniowo! trzymać porządek :) rozdzielać wszystko na małe klasy i typy

Pytania? :)