Skip to content

Commit bd799cc

Browse files
New Crowdin updates (#3057)
* New translations tor_onion_service.md (Ukrainian) * New translations tor_onion_service.md (Italian) * New translations tor_onion_service.md (German) * New translations php.md (Italian) * New translations 10_1.md (Italian) * New translations 04_advanced_provisioning.md (Italian) * New translations 9_0.md (Italian) * New translations index.md (Italian) * New translations 8_7.md (Italian) * New translations 8_5.md (Italian) * New translations 9_1.md (Italian) * New translations 8_9.md (Italian) * New translations 9_4.md (Italian) * New translations 8_10.md (Italian) * New translations 9_5.md (Italian) * New translations 9_6.md (Italian) * New translations 10_0.md (Italian) * New translations 05_image_builders_perspective.md (Italian) * New translations 10_1.md (German) * New translations 06_troubleshooting.md (Italian) * New translations 07_contributing.md (Italian) * New translations index.md (Italian) * New translations lab3-system_utilities.md (Italian) * New translations lab5-networking.md (Italian) * New translations lab6-user_and_group_management.md (Italian) * New translations php.md (Italian)
1 parent 2b1832d commit bd799cc

25 files changed

+1750
-732
lines changed
Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
---
2+
title: 4. Provisioning avanzato
3+
author: Wale Soyinka
4+
contributors: Steven Spencer
5+
tags:
6+
- cloud-init
7+
- rocky linux
8+
- cloud
9+
- automation
10+
- networking
11+
---
12+
13+
## Networking e multi-part payload
14+
15+
Nel capitolo precedente si è imparato a utilizzare i moduli principali di `cloud-init` per la gestione di utenti, pacchetti e file. Ora è possibile creare un server ben configurato in modo dichiarativo. Ora è il momento di esplorare tecniche più avanzate che ci consentano un controllo ancora maggiore sulla configurazione della vostra istanza.
16+
17+
Questo capitolo tratta due argomenti avanzati e molto importanti:
18+
19+
1. Configurazione di rete dichiarativa: come andare oltre il DHCP e definire configurazioni di rete statiche per le tue istanze.
20+
2. Payload MIME multiparte: come combinare diversi tipi di dati utente, come script di shell e file `#cloud-config`, in un unico potente payload.
21+
22+
## 1) Configurazione per rete dichiarativa
23+
24+
Per impostazione predefinita, la configurazione della maggior parte delle immagini cloud prevede l'acquisizione di un indirizzo IP tramite DHCP. Sebbene sia comodo, molti ambienti di produzione richiedono che i server abbiano indirizzi IP statici. Il sistema di configurazione di rete `cloud-init` offre un modo dichiarativo e indipendente dalla piattaforma per gestire tutto questo.
25+
26+
Le specifiche delle configurazioni di rete sono contenute in un documento YAML separato dal `#cloud-config` principale. I processi `cloud-init` provengono entrambi dallo stesso file e utilizzano il separatore standard dei documenti YAML (`---`) per distinguerli.
27+
28+
!!! note "Come `cloud-init` applica lo stato della rete"
29+
30+
Su Rocky Linux, `cloud-init` non configura direttamente le interfacce di rete. Agisce invece come un traduttore, convertendo la sua configurazione di rete in file che **NetworkManager** (il servizio di rete predefinito) è in grado di comprendere. Quindi passa il controllo a NetworkManager per applicare la configurazione. È possibile ispezionare i profili di connessione risultanti in `/etc/NetworkManager/system-connections/`.
31+
32+
### Esempio 1: Configurazione di un singolo IP statico
33+
34+
In questo esercizio configureremo la macchina virtuale con un indirizzo IP statico, un gateway predefinito e server DNS personalizzati.
35+
36+
1. **Creare `user-data.yml`:**
37+
38+
Questo file contiene due documenti YAML distinti, separati da `---`. Il primo è il `#cloud-config` standard. Il secondo definisce lo stato della rete.
39+
40+
```bash
41+
cat <<EOF > user-data.yml
42+
#cloud-config
43+
# Possiamo comunque includere i moduli standard.
44+
# Installiamo uno strumento per la risoluzione dei problemi di rete.
45+
packages:
46+
- traceroute
47+
48+
---
49+
50+
# Questo secondo documento definisce la configurazione di rete.
51+
network:
52+
version: 2
53+
ethernets:
54+
eth0:
55+
dhcp4: no
56+
addresses:
57+
- 192.168.122.100/24
58+
gateway4: 192.168.122.1
59+
nameservers:
60+
addresses: [8.8.8.8, 8.8.4.4]
61+
EOF
62+
```
63+
64+
2. **Spiegazione delle Key directives:**
65+
66+
- `network:`: Chiave di primo livello per la configurazione di rete.
67+
- `versione: 2`: specifica che stiamo utilizzando la sintassi moderna, simile a Netplan.
68+
- `ethernets:`: un dizionario delle interfacce di rete fisiche da configurare, ordinate in base al nome dell'interfaccia (ad esempio, `eth0`).
69+
- `dhcp4: no`: Disabilita il DHCP per IPv4 su questa interfaccia.
70+
- `indirizzi`: un elenco di indirizzi IP statici da assegnare, specificati in notazione CIDR.
71+
- `gateway4`: Il gateway predefinito per il traffico IPv4.
72+
- `nameservers`: un dizionario contenente un elenco di indirizzi IP per la risoluzione DNS.
73+
74+
3. _Boot e verifica._\*
75+
76+
La verifica è diversa questa volta, poiché la VM non otterrà un indirizzo IP dinamico. È necessario connettersi direttamente alla console della VM.
77+
78+
```bash
79+
# Utilizzare un nuovo disco per questo esercizio
80+
qemu-img create -f qcow2 -F qcow2 -b Rocky-10-GenericCloud.qcow2 static-ip-vm.qcow2
81+
82+
virt-install --name rocky10-static-ip \
83+
--memory 2048 --vcpus 2 \
84+
--disk path=static-ip-vm.qcow2,format=qcow2 \
85+
--cloud-init user-data=user-data.yml,hostname=network-server \
86+
--os-variant rockylinux10 \
87+
--import --noautoconsole
88+
89+
# Connettere la virtual console
90+
virsh console rocky10-static-ip
91+
92+
# Loggarsi dentro e controlloare l'IP
93+
[rocky@network-server ~]$ ip a show eth0
94+
```
95+
96+
L'output dovrebbe mostrare che `eth0` ha l'indirizzo IP statico `192.168.122.100/24`.
97+
98+
### Esempio 2: Configurazione multi-interfaccia
99+
100+
Uno scenario comune nel mondo reale è un server con più interfacce di rete. Qui creeremo una VM con due interfacce: `eth0` utilizzerà DHCP, mentre `eth1` avrà un IP statico.
101+
102+
1. **Create `user-data.yml` per due interfacce:**
103+
104+
```bash
105+
cat <<EOF > user-data.yml
106+
#cloud-config
107+
packages: [iperf3]
108+
109+
---
110+
111+
network:
112+
version: 2
113+
ethernets:
114+
eth0:
115+
dhcp4: yes
116+
eth1:
117+
dhcp4: no
118+
addresses: [192.168.200.10/24]
119+
EOF
120+
```
121+
122+
2. **Boot di una VM con due schede di rete:** aggiungiamo un secondo flag `--network` al comando `virt-install`.
123+
124+
```bash
125+
virt-install --name rocky10-multi-nic \
126+
--memory 2048 --vcpus 2 \
127+
--disk path=... \
128+
--network network=default,model=virtio \
129+
--network network=default,model=virtio \
130+
--cloud-init user-data=user-data.yml,hostname=multi-nic-server \
131+
--os-variant rockylinux10 --import --noautoconsole
132+
```
133+
134+
3. **Verifica:** esegure SSH all'indirizzo assegnato dal DHCP su `eth0`, quindi controlla l'IP statico su `eth1` con `ip a show eth1`.
135+
136+
## 2) Unificazione dei payload con MIME multi-part
137+
138+
A volte è necessario eseguire uno script di configurazione _prima_ dell'esecuzione dei moduli principali `#cloud-config`. I file multi-part MIME sono la soluzione ideale, poiché consentono di raggruppare diversi tipi di contenuti in un unico payload ordinato.
139+
140+
È possibile visualizzare la struttura di un file MIME come segue:
141+
142+
```
143+
+-----------------------------------------+
144+
| Main Header (multipart/mixed; boundary) |
145+
+-----------------------------------------+
146+
|
147+
| --boundary |
148+
| +-------------------------------------+
149+
| | Part 1 Header (e.g., text/x-shellscript) |
150+
| +-------------------------------------+
151+
| | Part 1 Content (#/bin/sh...) |
152+
| +-------------------------------------+
153+
|
154+
| --boundary |
155+
| +-------------------------------------+
156+
| | Part 2 Header (e.g., text/cloud-config) |
157+
| +-------------------------------------+
158+
| | Part 2 Content (#cloud-config...) |
159+
| +-------------------------------------+
160+
|
161+
| --boundary-- (closing) |
162+
+-----------------------------------------+
163+
```
164+
165+
### Hands-on: uno script per il controllo preventivo
166+
167+
Creeremo un file composto da più parti che prima esegue uno script shell e poi procede al `#cloud-config` principale.
168+
169+
1. **Creare il file multiparte `user-data.mime`:**
170+
171+
Si tratta di un file di testo con un formato speciale che utilizza una stringa “di delimitazione” per separare le parti.
172+
173+
```bash
174+
cat <<EOF > user-data.mime
175+
Content-Type: multipart/mixed; boundary="//"
176+
MIME-Version: 1.0
177+
178+
--//
179+
Content-Type: text/x-shellscript; charset="us-ascii"
180+
181+
#!/bin/sh
182+
echo "Running pre-flight checks..."
183+
# In a real script, you might check disk space or memory.
184+
# If checks failed, you could 'exit 1' to halt cloud-init.
185+
echo "Pre-flight checks passed." > /tmp/pre-flight-status.txt
186+
187+
--//
188+
Content-Type: text/cloud-config; charset="us-ascii"
189+
190+
#cloud-config
191+
packages:
192+
- htop
193+
runcmd:
194+
- [ sh, -c, "echo 'Main cloud-config ran successfully' > /tmp/main-config-status.txt" ]
195+
196+
--//--
197+
EOF
198+
```
199+
200+
!!! note "Informazioni sul delimitatore MIME"
201+
202+
```
203+
La stringa di delimitazione (in questo caso `//`) è una stringa arbitraria che non deve comparire nel contenuto di nessuna parte. Viene utilizzata per separare le diverse sezioni del file.
204+
```
205+
206+
2. _Boot e verifica._\*
207+
208+
Questo file viene passato a `virt-install` allo stesso modo di un file `user-data.yml` standard.
209+
210+
```bash
211+
# Use a new disk image
212+
qemu-img create -f qcow2 -F qcow2 -b Rocky-10-GenericCloud.qcow2 mime-vm.qcow2
213+
214+
virt-install --name rocky10-mime-test \
215+
--memory 2048 --vcpus 2 \
216+
--disk path=mime-vm.qcow2,format=qcow2 \
217+
--cloud-init user-data=user-data.mime,hostname=mime-server \
218+
--os-variant rockylinux10 \
219+
--import --noautoconsole
220+
```
221+
222+
Dopo il boot, accedere alla VM tramite SSH e verificare che entrambe le parti siano state eseguite cercando i file che hanno creato:
223+
224+
```bash
225+
cat /tmp/pre-flight-status.txt
226+
cat /tmp/main-config-status.txt
227+
```
228+
229+
!!! tip "Altri tipi di contenuti Multi-part"
230+
231+
`cloud-init` supporta altri tipi di contenuto per casi d'uso avanzati, come `text/cloud-boothook` per script iniziali di boot o `text/part-handler` per l'esecuzione di codice Python personalizzato. Per ulteriori dettagli, consultare la documentazione ufficiale.
232+
233+
## Prossimo passo
234+
235+
Ora avete imparato due potenti tecniche avanzate di `cloud-init`. Ora è possibile definire reti statiche e orchestrare flussi di lavoro di provisioning complessi con dati utente multi-part.
236+
237+
Nel prossimo capitolo, sposteremo la nostra prospettiva dal _consumo_ di `cloud-init` su base individuale alla _personalizzazione del suo comportamento predefinito_ per creare le vostre “immagini golden” preconfigurate.
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
---
2+
title: 5. La prospettiva del image builder
3+
author: Wale Soyinka
4+
contributors: Steven Spencer
5+
tags:
6+
- cloud-init
7+
- rocky linux
8+
- cloud
9+
- automation
10+
- image-building
11+
---
12+
13+
## Impostazioni predefinite e generalizzazione
14+
15+
Finora, il nostro percorso si è concentrato sulla configurazione delle singole istanze all'avvio utilizzando `user-data`. In questo capitolo, cambieremo prospettiva e assumeremo quella di un **image builder**. Cioè qualcuno che crea e gestisce le “golden images” che fungono da modelli per altre macchine virtuali.
16+
17+
Il nostro obiettivo è quello di creare una nuova immagine personalizzata con le nostre policies ed impostazioni predefinite integrate. Ciò comporta due passaggi fondamentali:
18+
19+
1. **Personalizzazione delle impostazioni predefinite a livello di sistema:** Modifica della configurazione `cloud-init` _all'interno dell'immagine stessa_.
20+
2. **Generalizzazione dell'immagine:** utilizzo di strumenti quali `cloud-init clean` e `virt-sysprep` per rimuovere tutti i dati specifici della macchina, preparando l'immagine per la clonazione.
21+
22+
## 1) Configurazione del laboratorio di personalizzazione
23+
24+
Per iniziare, abbiamo bisogno di un'istanza funzionante dell'immagine cloud di base da poter modificare. Avvieremo questa VM _senza_ fornire alcun `dato utente` per ottenere un sistema pulito.
25+
26+
```bash
27+
# Create un'immagine disco per il nostro nuovo modello
28+
qemu-img create -f qcow2 -o size=10G golden-image-template.qcow2
29+
30+
# Avviate l'immagine di base utilizzando virt-install
31+
virt-install --name golden-image-builder \
32+
--memory 2048 --vcpus 2 \
33+
--disk path=golden-image-template.qcow2,format=qcow2 \
34+
--cloud-init none --os-variant rockylinux10 --import
35+
36+
# Connettersi alla console ed effettuare il login come utente predefinito “rocky”.
37+
virsh console golden-image-builder
38+
```
39+
40+
## 2. Configurazione a livello di sistema con `cloud.cfg.d`
41+
42+
All'interno della nostra VM in esecuzione, ora possiamo personalizzare la configurazione `cloud-init` a livello di sistema. Non modificare mai direttamente il file master, `/etc/cloud/cloud.cfg`. La posizione corretta e sicura per gli aggiornamenti delle personalizzazioni è la directory `/etc/cloud/cloud.cfg.d/`. `cloud-init` legge tutti i file `.cfg` qui presenti in ordine alfabetico dopo il file principale `cloud.cfg`, consentendo di sovrascrivere le impostazioni predefinite.
43+
44+
### Hands-on: impostazione dei valori predefiniti della golden image
45+
46+
Applichiamo una policy sul nostro golden image: disabiliteremo l'autenticazione tramite password, imposteremo un nuovo utente predefinito e garantiremo che sia sempre installato un set di pacchetti di base.
47+
48+
1. **Creare un file di configurazione personalizzato:** dall'interno della VM, creare `/etc/cloud/cloud.cfg.d/99-custom-defaults.cfg`. Il prefisso “99-” assicura che venga letto per ultimo.
49+
50+
```bash
51+
sudo cat <<EOF > /etc/cloud/cloud.cfg.d/99-custom-defaults.cfg
52+
# Golden Image Customizations
53+
54+
# Define a new default user named 'admin'
55+
system_info:
56+
default_user:
57+
name: admin
58+
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
59+
shell: /bin/bash
60+
61+
# Enforce key-based SSH authentication
62+
ssh_pwauth: false
63+
64+
# Ensure a baseline of packages is always installed
65+
packages:
66+
- htop
67+
- vim-enhanced
68+
EOF
69+
```
70+
71+
!!! tip "Disabilitazione di moduli specifici"
72+
73+
Una tecnica per una sicurezza efficace consiste nel disabilitare completamente determinati moduli `cloud-init`. Ad esempio, per impedire a qualsiasi utente di utilizzare `runcmd`, è possibile aggiungere quanto segue al file `.cfg` personalizzato. In questo modo si indica a `cloud-init` di eseguire un elenco vuoto di moduli durante la fase finale.
74+
75+
`yaml cloud_final_modules: [] `
76+
77+
## 3. Generalizzare l'immagine
78+
79+
La nostra VM ora contiene la nostra configurazione personalizzata, ma contiene anche identificatori univoci della macchina (come `/etc/machine-id`) e chiavi host SSH. Prima di poterlo clonare, dobbiamo rimuovere questi dati attraverso un processo chiamato **generalizzazione**.
80+
81+
### Metodo 1: `cloud-init clean` (all'interno della VM)
82+
83+
`cloud-init` fornisce un comando integrato per questo scopo.
84+
85+
1. **Eseguire `cloud-init clean`:** dall'interno della VM, eseguire il seguente comando per rimuovere i dati specifici dell'istanza.
86+
87+
```bash
88+
sudo cloud-init clean --logs --seed
89+
```
90+
91+
!!! note "Riguardo a `cloud-init clean --seed`"
92+
93+
```
94+
Questo comando rimuove il seed univoco utilizzato da `cloud-init` per identificare l'istanza, costringendola a eseguire il processo da zero al successivo avvio. **Non** rimuove le configurazioni personalizzate in `/etc/cloud/cloud.cfg.d/`. Questo passaggio è essenziale per creare un modello veramente generico.
95+
```
96+
97+
2. **Spegnimento immediato:** dopo la pulizia, spegnere immediatamente la VM.
98+
99+
```bash
100+
sudo poweroff
101+
```
102+
103+
### Metodo 2: `virt-sysprep` (dall'host)
104+
105+
Uno strumento ancora più completo e conforme agli standard del settore è `virt-sysprep`. È possibile eseguire questa operazione dal computer host sul disco della macchina virtuale spenta. Esegue tutte le azioni di `cloud-init clean` e molto altro ancora, come cancellare la cronologia dei comandi, rimuovere i file temporanei e reimpostare i file di log.
106+
107+
1. **Assicurarsi che la VM sia spenta.**
108+
109+
2. **Eseguire `virt-sysprep` dal vostro host:**
110+
111+
```bash
112+
sudo virt-sysprep -a golden-image-template.qcow2
113+
```
114+
115+
Una volta completato il processo di generalizzazione, il file su disco (`golden-image-template.qcow2`) diveterà la vostra nuova nuova golden image.
116+
117+
!!! note "Convenzioni di denominazione delle golden image"
118+
119+
È buona norma assegnare alle golden image nomi descrittivi che includano il sistema operativo e il numero di versione, ad esempio `rocky10-base-v1.0.qcow2`. Ciò facilita il controllo delle versioni e la gestione dell'infrastruttura.
120+
121+
## 4. Verificare la golden image
122+
123+
Proviamo la nostra nuova immagine avviando una nuova istanza _da_ essa senza alcun `user-data`.
124+
125+
1. **Creare un nuovo VM disk dalla nostra golden image:**
126+
127+
```bash
128+
qemu-img create -f qcow2 -F qcow2 -b golden-image-template.qcow2 test-instance.qcow2
129+
```
130+
131+
2. **Avviare l'istanza di prova:**
132+
133+
```bash
134+
virt-install --name golden-image-test --cloud-init none ...
135+
```
136+
137+
3. **Verifica:** Connettersi alla console (`virsh console golden-image-test`). La richiesta di accesso dovrebbe essere per l'utente `admin`, non per `rocky`. Una volta effettuato l'accesso, è anche possibile verificare l'installazione di `htop` con (`rpm -q htop`). Questo conferma che le impostazioni predefinite integrate funzionano correttamente.
138+
139+
## Il passo successivo
140+
141+
Ora avete imparato come creare modelli standardizzati integrando le impostazioni predefinite nella configurazione di sistema di `cloud-init` e generalizzandoli correttamente per la clonazione. Nel prossimo capitolo tratteremo le competenze essenziali per la risoluzione dei problemi quando `cloud-init` non funziona come previsto.

0 commit comments

Comments
 (0)