Puppet (instalace)
Většina linuxových distribucí má obě části Puppetu - klienta i server ve svých repozitářích a umožňuje tak provést instalaci přes standardní balíčkovací systém.
Výchozí konfigurace - tj. nastavení cest k adresářům, atp. - však nemusí být všude stejná a může se mírně lišit. Následující postupy a příklady byly realizovány v rámci distribuce Debian wheezy amd64, s aktuální verzí Puppetu 2.7.18.
Pro archivaci veškerých změn při úpravách manifestů na serveru je vhodné používat nějaký verzovací systém. Obecně je doporučován git. Pokud je na stroji nainstalován etckeeper, tak v podstatě není třeba nic víc řešit, pouze je třeba po každé úpravě provést uložení aktuálních změn, včetně komentáře a v případě certifikátů přidat odpovídající nově vzniklé soubory do repozitáře. |
master
Abychom mohli Puppet používat, musíme mít stroj který bude fungovat jako server - master. S ním pak budou komunikovat agenti z ostatních nodů.
Serverová část Puppetu je v Debianu součástí balíku, který se jmenuje puppetmaster. Nainstalovat ji lze přes APT, který by se měl postarat o splnění potřebných závislostí[1]:
root@master~# apt-get install puppetmaster
|
http://www.thingsidoinlinuxwhenbored.info/?p=38
U výchozí konfigurace serveru na Debianu je úložiště SSL certifikátů v adresáři /var/lib/puppet/ssl . Puppet však používá - není-li uvedeno jinak - jako výchozí adresář /etc/puppet/ssl .
Je-li obsah |
Spouštění serverové části aplikace
To zda démon puppetmaster opravdu běží můžete ověřit buď přímo dotazem přes init skript
root@master~# /etc/init.d/puppetmaster status
[ ok ] master is running.
|
nebo tím, že zkontrolujete zda-li proces master běží
root@master~# ps -ef | grep master
puppet 1849 1 0 srp02 ? 00:16:28 /usr/bin/ruby1.8 /usr/bin/puppet master
|
Pokud master neběží, tak se musí předtím, než se začne pracovat s klientem nahodit. A to buď přes init skript
root@master~# /etc/init.d/puppetmaster start
|
nebo manuálně příkazem na řádce[2] - chceme-li mít server spuštěný v ladícím režimu:
root@master~# puppet master --verbose --debug
|
agent
Stroje, které chceme spravovat přes Puppet musí mít nainstalovaného agenta, který bude komunikovat se strojem master. V Debianu se balík s agentem jmenuje puppet. I jeho instalaci lze provést jednoduše přes APT:
root@master~# apt-get install puppet
|
Agent je nainstalován i na stroji, který v rámci Puppetu funguje jako master, pokud jej chceme rovněž puppetizovat'. Protože na něm běží démon, který pak komunikuje s ostatními agenty, tak jej obvykle začínáme puppetizovat jako první.
Žádost klienta o certifikát
Proces puppetizace začíná tím, že si vystavíme přes agenta SSL certifikát, který se musí na stroji master podepsat. Tímto cesrtifikátem se pak bude šifrovat jejich vzájemná komunikace.
Podepsání certifikátu na straně serveru
Výpis seznamu žádostí, čekajících na podepsání na stroji master:
master (KVM) :~# puppet cert list
"stroj.felk.cvut.cz" (93:44:BC:C1:9F:1D:7E:6D:83:BD:24:E7:9A:0A:B3:82)
|
Podepsání čekající žádosti na stroji master:
Aby vzájemná komunikace neskončila chybou, musí se po podepsání certifikátu v manifestu vytvořit - nemá-li dosud nakonfigurován výchozí nod default - příslušný nod pro hostname nového klienta.
nod 'stroj' {
}
|
Pokud se v síti může objevit více nodů se stejným hostname, které se liší pouze doménou, je třeba k tomu aby se manifest neaplikoval na všechny, uvést jméno nodu plným doménovým jménem. |
Ověření zda agent komunikuje se strojem master
Je-li u stroje, na kterém běží server pro Puppet v souboru /etc/hosts
uveden alias puppet
, nebo je-li tento server nastaven v konfiguraci agenta, pak na příkazové řádce nemusí být uváděn parametr --server
.
root@stroj:/etc# puppet agent --noop --test --verbose --server master.felk.cvut.cz
info: Caching catalog for stroj.felk.cvut.cz
info: Applying configuration version '1353687981'
|
Pokud proběhlo podepsání certifikátu v pořádku, tak proběhne komunikace bez chybových zpráv.
Ve výchozí konfiguraci je automatické spouštění agenta v souboru /etc/default/puppet zakázáno (v proměnné START). Povolte ho, až když budete mít připravený použitelný manifest.
|
Zavržení (revokace) certifikátu
Se aplikuje tehdy, pokud chceme zcela zamezit agentu ze stroje pro který byl certifikát původně vydán přístup ke stroji master.
Při revokaci totiž zůstává informace o původním certifikátu zachována a master případnou novou žádost ze stroje se stejným jménem na jejím základě odmítne přijmout.
Při revokaci nestačí uvést pouze jméno nodu, jak ho vrací operace list, ale musí být uvedeno i pořadové číslo certifikátu který chceme odvolat. To však lze zjistit pouze přes operaci print
U zavrženého certifikátu se pak bude při výpisu místo znaménka plus zobrazovat mínus.
Pro to, aby master přestal se zavrženým strojem komunikovat, se musí démon restartovat. |
Pokud by se vám omylem povedlo revokovat (tak jako mě) všechny certifikáty, tak pokud máte udržován přes git také adresář s Puppetími SSL certifikáty, tak si vytáhněte původní obsah souboru /etc/puppet/ssl/ca/ca_crl.pem a nahraďte stávající obsah tím původním.
|
Odstranění certifikátu
Odstranění certifikátu je operace, která používá pro..
- Odstranění čekajících a dosud nepodepsaných žádostí strojů, které nechceme spravovat přes Puppet.
- Zneplatnění a zrušení již podepsaných certifikátů strojů, které prošly reinstalací, nebo byly zrušeny. Podepsaný certifikát se nejprve zneplatní a následně se neplatný klíč odstraní z úložiště.
Vydání nového certifikátu
Pokud chceme z nějakého důvodu vydat certifikát nový - kupř. když u stávajícího certifikátu vypršela platnost, nebo došlo k diskreditaci klienta, musí se nejprve na stroji master odstranit původní podepsaný certifikát a teprve pak na klientském stroji, kde běží agent odstranit z úložiště SSL certifikátů původní podepsaná žádost o certifikát, která se nalézá v adresáři ./puppet/ssl/certificate_requests
i vydaný klíč (v adresáři ./puppet/ssl/certs
)
Teprve pak je možné vydat novou žádost o certifikát, kterou bude možné na stroji master podepsat.
- ↑ Ale nemusí. Nastavení potřebných závislostí je totiž u Debianu záležitostí maintainera balíku, který mohl nějaký balík opomenout.
- ↑ http://docs.puppetlabs.com/man/master.html - viz manuálová stránka