Negli articoli precedenti relativi a Puppet, è stato discusso come installare e configurare Puppet server, PuppetDB e Foreman.
La maggior parte delle configurazioni sono state effettuate per mezzo dei cataloghi di Puppet.
È possibile inserire le configurazioni dei nodi su Foreman, in modo da poterle gestire dalla web UI.
In questo articolo verrà discusso come inserire i parametri della ENC di Puppet su Foreman e come gestire efficacemente le Organizations, le Locations e gli Host Groups.
ARCHITETTURA
Per l’installazione di Puppet server, PuppetDB, PostgreSQL e Foreman sono stati utilizzati quattro container LXC con Debian 11.
PREREQUISITI
Si suppone che si abbia già installato e configurato Puppet server, PuppetDB, PostgreSQL e Foreman.
GESTIONE DELLE ORGANIZATIONS E DELLE LOCATIONS
Le Organizations su Foreman permettono la divisione delle risorse in gruppi logici, che possono essere organizzati in base alle proprie esigenze.
Ad esempio, è possibile organizzare i gruppi logici in base ai propri team, oppure in base alle proprie VLAN.
Tramite le organizzazioni è possibile la segregazione dei permessi ed il multi tenancy.
È possibile assegnare le risorse ad una o più organizzazioni.
Le Locations hanno una funzione simile alle Organizations, però vengono utlizzate per organizzare le risorse in base alla loro posizione fisica e/o geografica.
È possibile creare organizzazioni e locations innestate, in questo caso le risorse assegnate al parent vengono ereditate anche dai children.
Foreman, in fase di installazione, crea un’organizzazione e una location di default; se non viene specificato diversamente, esse vengono assegnate automaticamente ai nuovi host.
È possibile rinominare l’organizzazione e la location di default, tuttavia, soprattutto in caso di multi tenancy, si consiglia di creare delle organizzazioni e delle locations nuove, senza modificare quelle di default.
Per effettuare le seguenti operazioni, è necessario accedere a Foreman con un’utenza amministrativa.
In alto, accanto al logo di Foreman, è possibile selezionare il contesto.
Quando si necessità di fare delle modifiche amministrative, si consiglia di selezionare Any Organization e Any Location
CREAZIONE DELLA STRUTTURA DI ORGANIZZAZIONI
In questo esempio, sfrutteremo le organizations per effettuare una divisione degli host per VLAN.
Creeremo una struttura con tre organizzazioni: PIZZA, PIZZA/LAN e PIZZA/DMZ.
Andare su Administer > Organizations
Cliccare su New Organization
Inserire le informazioni relative alla nuova organizzazione e salvare
Nel menù a sinistra, selezionare Smart Proxies e cliccare su 01.puppet.pizza.it per spostarlo nella lista degli smart proxies selezionati
In alternativa, se all’organizzazione appartengono tutti gli smart proxies, è possibile spuntare All smart proxies
Nel menù a sinistra, selezionare Locations e aggiungere Default Location all’organizzazione
In caso di multitenancy, se non si aggiungesse la location di default all’organizzazione, è possibile che non vengano visualizzati gli host aggiunti da Puppet.
Analogamente a come è stato mostrato con le locations e gli smart proxies, è possibile assegnare le altre risorse all’organizzazione.
Salvare, cliccando su Submit
Ora andreamo a creare l’organizazione DMZ.
Sempre in Organizations, cliccare su New Organization ed inserire le informazioni relative alla nuova organizzazione.
Tramite la voce Parent, è possibile innestare le organizzazioni.
Nel menù a sinistra, selezionare Domains e aggiungere i domini di DMZ
Se necessario, è possibile assegnare le altre risorse all’organizazione.
Analogamente a come è stato mostrato per PIZZA/DMZ, è possibile aggiungere l’organizzazione PIZZA/LAN.
CREAZIONE DELLA STRUTTURA DI LOCATIONS
In questo esempio creremo un’unica location, ciononostante in modo simile a come è stato effettuato per le organizzazioni, è possibile creare locations innestate.
Andare su Administer > Locations
Cliccare su New Location
Inserire le informazioni della nuova location e cliccare su Submit per salvare
Assegnare le organizzazioni alla location
Analogamente a come è stato fatto per le organizzazioni, è possibile aggiungere le altre risorse alla location.
ASSEGNAZIONE DELLO SMART PROXY ALLE ORGANIZZAZIONI E ALLE LOCATIONS
Andare su Infrastracture > Smart Proxies
Selezionare lo smart proxy
Cliccare su Edit
Aggiungere le locations
Aggiungere le organizzazioni
Salvare cliccando su Submit
ASSEGNAZIONE DEGLI ENVIRONMENTS DI PUPPET ALLE ORGANIZZAZIONI E ALLE LOCATIONS
Andare su Configure > Environments
Selezionare production
Aggiungere le locations
Aggiungere le organizzazioni
Salvare cliccando su Submit
ASSEGNAZIONE DEI DOMINI E DELLE SUBNETS ALLE ORGANIZZAZIONI E ALLE LOCATIONS
Analogamente a come è stato mostrato per gli smart proxies e gli environments, è possibile assegnare i domini e le subnets alle organizzazioni e alle locations.
Foreman è in grado di assegnare autonomamente le risorse alle organizzazioni e alle locations per correggere i mismatch.
ASSEGNAZIONE DEGLI HOST ALLE ORGANIZZAZIONI E ALLE LOCATIONS
Andare su host > All host
Selezionare gli host, cliccare su Select Action ed assegnare l’organizzazione e la location
Tramite il flag Fix Location on Mismatch, è possibile far correeggre da Foreman le incorenze tra le risorse, le organizzazioni e le locations.
In alternativa è possibile lasciare selezionato il flag Fails on Mismatch, in questo caso se ci fossero delle incorenze Foreman mostrerà un errore.
Nella documentazione di Foreman viene consigliato di utilizzare il flag Fix Location on Mismatch, poiché potrebbe accadere che venga mostrato comunque un errore, nonostante non ci siano effettive incoerenze.
Assigning a Host to a Specific Location
GESTIONE DEGLI HOST GROUPS
Gli host groups vengono utilizzati per organizzare gli hosts in base alle configurazioni.
È possibile assegnare un solo host group per ogni nodo, tuttavia attraverso l’ereditarietà degli host groups è possibile condividere le configurazioni tra i nodi che appartengono a gruppi diversi.
Le configurazioni assegnate ad un host group vengono eridatate anche dai suoi sottogruppi, se non sono presenti delle configurazioni più specifiche.
CREAZIONE DI UNA STRUTTURA DI HOST GROUPS
Andare su Configure > Host Groups
Cliccare Create Host Group
Inserire le informazioni dell’host group e selezionare gli smart proxies per Puppet
Andare nella sezione Organizations e aggiungere l’organizzazione PIZZA
È possibile assegnare gli environments, locations, subnets e le altre risorse ai sottogruppi.
Sempre nella sezione Host Groups, cliccare su Create Host Group
Aggiungere l’host group con i nodi di produzione, selezionando l’environment corretto
Analogamente a come è sono stati creati i due host grops Pizza e Pizza/Prod, è possibile ricreare la struttura di host groups in figura
In questo esempio, assegneremo la location Datacenter Torino al gruppo Pizza/Prod/Servers
ATTENZIONE: La struttura di host groups proposta in questa guida è a scopo dimostrativo. Essa è stata fatta di proposito complessa, con diversi livelli di innestamento, allo scopo di mostrare l’ereditarietà delle configurazioni.
Si consiglia di ridurre i livelli di innestamento allo stretto necessario, onde evitare eccessivi problemi di mismatch tra le risorse.
ASSEGNAZIONE DEGLI HOST GROUPS AI NODI
Andare su host > All host
Selezionare gli host, cliccare su Select Action ed assegnare l’host group corretto
A questo punto i due componenti di Puppet, PostgreSQL e Foreman dovrebbero essere in quattro gruppi dedicati.
GESTIONE DELLA ENC DI PUPPET
Tramite la ENC di Foreman, è possibile distribuire i parametri delle classi di Puppet.
La distribuzione dei parametri può essere organizzata in base al dominio, l’OS, hostgroup e l’FQDN.
I parametri sono tipizzati, i tipi più utilizzati sono: le stringhe, i valori booleani, gli array e gli hash.
Esempio di array: [“item01″,”item02″,”item03”]
Esempio di hash: key01: “Example 01” key02: [“Example 02”] key03: false
MODIFICARE I PARAMETRI DELLE CLASSI DI PUPPET TRAMITE FOREMAN
A scopo dimostrativo, importeremo su Foreman alcuni parametri utilizzati nelle configurazioni discusse nelle precedenti guide riguardo a Puppet.
[sottolineato-begin]Perché funzioni tutto correttamente, è necessario importare tutti i parametri inseriti nei cataloghi presenti sul Puppet master in /etc/puppetlabs/code/environments/production/manifests.
È possible assegnare alcuni parametri tramite host groups, ma altri, come per esempio i nomi dei certificati, è necessario assegnarli tramite FQDN.
Andare su Configure > Smart Class Parameters
Cercare e selezione il nome della classe da importare, in questo caso puppetdb::server
Selezionare il parametro ed abilitare l’override
A questo punto, in fondo alla pagina, sarà possibile inserire i valori del parametro.
In questo caso assegnermo il valore del parametro a tutti gli host che appartengono all’host group Pizza/Prod/Server/Linux/LAN/PuppetDB o ai suoi sotto gruppi
Per modificare il valore distribuito di default per un determinato parametro, è necessario modificarlo nella tab Default Behavior.
In questo caso il parametro è di tipo booleano, perciò è anche necessario selezionare il tipo corretto nella box Parameter Type.
Nel prossimo esempio modificheremo un parametro di tipo hash.
Come valore di default impostare che venga distribuito un hash vuoto, invece per gli host appartenenti all’host group Pizza/Prod/Server/Linux/LAN/PuppetDB (e i suoi sottogruppi), impostare che venga distribuito un hash con due elementi.
ASSEGNAZIONE DELLE CLASSI DI PUPPET TRAMITE FOREMAN
Andare su Configure > Host Groups
Selezionare l’hostgroup a cui si vuole assegnare la classe di Puppet.
ATTENZIONE: Quando si assegna una classe ad un hostgroup, la classe viene assegnata anche ai suoi sotto gruppi.
Andare nella tab Puppet ENC e premere il + accanto ai nomi dei moduli per espandere la voce e visualizzare le classi.
Selezionare le classi da assegnare all’hostgroup scelto e cliccare su Submit per salvare
ATTENZIONE: Se si importa la classe, però i parametri non sono configurati correttamente, si rischia di fare dei danni sugli host impattati.
Si consiglia di fare particolare attenzione quando si configurano le classi di Foreman e Puppet DB, perché una configurazione errata potrebbe causare la compromissione dell’accesso alla web UI o addirittura dell’utilizzo di Puppet server.
Quando si assegna una classe su Foreman, assicurarsi che essa non sia già stata assegnata al nodo tramite un catalogo sul Puppet master.
Per verificare che le configurazioni siano corrette, è possibile eseguire su richiesta il Puppet agent sui nodi il seguente comando:
0 |
/opt/puppetlabs/bin/puppet agent -t |
0 Comments