1. Panoramica
La cache DNS migliora la latenza di ricerca DNS inviando prima le richieste DNS dei pod alla cache locale sullo stesso nodo. In questo modo, i tempi di ricerca DNS sono più coerenti e il numero di query DNS a kube-dns o Cloud DNS può essere ridotto.
In questo lab, testerai il modo in cui NodeLocal DNSCache gestisce il traffico DNS in un cluster GKE. Convaliderai un cluster GKE Standard che esegue la versione 1.34.1-gke.3720000 e successive per confermare che sia abilitato per impostazione predefinita. Poi disabilitalo per vedere come cambia la configurazione quando disattivi la funzionalità.
Obiettivi
In questo lab imparerai a eseguire le seguenti attività:
- Crea un VPC personalizzato, una subnet e regole firewall
- Esegui il deployment di un cluster GKE Standard standard con il canale di rilascio rapido
- Esegui un test per verificare che la cache DNS LocalNode sia abilitata
- Disabilita la cache e verifica lo stato senza di essa
2. Configurazione del lab
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai già un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca; in genere non ti interessa quale sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID). Se non ti piace l'ID generato, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre i valori nella documentazione.
- Dopodiché, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non costerà molto, se non nulla. Per arrestare le risorse ed evitare addebiti di fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare il progetto. I nuovi utenti Google Cloud possono usufruire del programma di prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere qualcosa di simile a:

Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro in questo codelab può essere svolto all'interno di un browser. Non devi installare nulla.
3. Configura l'ambiente
Creeremo un VPC personalizzato con regole firewall. Se hai già un VPC e un progetto, puoi saltare questa parte.
Apri Cloud Shell in alto a destra nella console. Configura come segue: 
- Abilita alcune delle API che utilizzeremo in questo lab
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
- Imposta alcune variabili. Queste variabili sono l'ID progetto e il nome VPC (creerai il VPC nel passaggio 3).
export projectid=$(gcloud config get-value project)
export vpc_name=gke-cache-vpc
export subnet_name=mainsubnet
export region=us-east1
export zone=us-east1-b
export cluster_name=cache-gke-cluster
export channel=rapid
export machine_type=e2-standard-4
echo $projectid
echo $vpc_name
- Ora crea un VPC personalizzato denominato
gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
- Crea la subnet nel nuovo VPC
gcloud compute networks subnets create $subnet_name \
--network=$vpc_name \
--range=10.0.88.0/24 \
--region=$region \
--enable-private-ip-google-access \
--project=$projectid
- Aggiungi regole firewall al VPC
gcloud compute firewall-rules create $vpc_name-allow-internal \
--network=$vpc_name --allow=tcp,udp,icmp --source-ranges=10.0.88.0/24
gcloud compute firewall-rules create $vpc_name-allow-ssh \
--network=$vpc_name --allow=tcp:22 --source-ranges=35.235.240.0/20
4. Crea un gateway NAT per la comunicazione internet
Dobbiamo concedere l'accesso esterno in uscita a internet, quindi creiamo e colleghiamo un gateway Cloud NAT.
In Cloud Shell, utilizza i seguenti comandi
- Crea Cloud NAT e il gateway NAT
gcloud compute routers create gke-nat-router --network=$vpc_name --region=$region
gcloud compute routers nats create gke-nat-gw \
--router=gke-nat-router --region=$region \
--auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges
5. Esegui il deployment del cluster GKE e verifica
- In Google Cloud Shell, crea il cluster denominato
cache-gke-cluster. Nei cluster GKE Standard che eseguono la versione1.34.1-gke.3720000e successive, NodeLocal DNSCache è abilitato per impostazione predefinita. (Il provisioning del cluster dovrebbe richiedere da 4 a 10 minuti)
gcloud container clusters create $cluster_name \
--zone=$zone --network=$vpc_name --subnetwork=$subnet_name \
--release-channel=$channel --machine-type=$machine_type \
--enable-ip-alias
- Una volta creato il cluster, connettiti:
gcloud container clusters get-credentials $cluster_name --zone $zone
- Ora verifichiamo che NodeLocal DNSCache sia abilitato.
Questi comandi confermano che la versione è 1.34.1-gke.3720000 o successiva e che l'agente locale è in esecuzione e i servizi
kubectl version | grep "Server Version"
kubectl get pods -n kube-system -o wide | grep node-local-dns -w
kubectl get svc,endpoints -n kube-system -l k8s-app=kube-dns
- Poi esegui quanto segue (In questo modo viene creato un pod con privilegi sulla rete host per verificare che le regole iptables del nodo intercettino e instradino attivamente il traffico DNS alla cache locale)
export KUBEDNS_IP=$(kubectl get svc kube-dns -n kube-system -o jsonpath='{.spec.clusterIP}')
kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
--overrides='{"spec": {"hostNetwork": true}}' -- \
sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"
Cosa cercare: cerca -j NOTRACK. In questo modo, il traffico DNS ignora la tabella di monitoraggio delle connessioni.

6. Disabilita NodeLocal DNSCache e verifica
Ora rimuoviamo l'ottimizzazione per vedere come funziona senza.
- Vai a Cloud Shell ed esegui quanto segue. Nota: questa operazione attiverà una ricreazione del nodo, che in genere richiede 3-5 minuti per node pool, poiché GKE esegue il ciclo delle istanze
gcloud container clusters update $cluster_name --zone=$zone --update-addons=NodeLocalDNS=DISABLED --quiet
kubectl get pods -n kube-system -o wide | grep node-local-dns -w
Non dovresti vedere nessuno di questi pod nel DaemonSet perché sono stati rimossi.
- Esegui di nuovo il test
kubectl run node-inspector --quiet --rm -it --image=alpine --privileged --restart=Never \
--overrides='{"spec": {"hostNetwork": true}}' -- \
sh -c "apk add --no-cache iptables && iptables-save | grep -E '169.254.20.10|$KUBEDNS_IP'"
Dopo aver disattivato il componente aggiuntivo, l'output non conterrà più le regole -j NOTRACK né alcun riferimento all'indirizzo IP 169.254.20.10. Ciò significa che non usufruisci più dei vantaggi della cache locale

7. Libera spazio
# 1. Delete the GKE Cluster
# This will remove the node and all system pods (including kube-dns)
gcloud container clusters delete $cluster_name --zone=$zone --quiet
# 2. Delete the Cloud NAT and Router
# It is best practice to remove these before the VPC
gcloud compute routers nats delete gke-nat-gw --router=gke-nat-router --region=$region --quiet
gcloud compute routers delete gke-nat-router --region=$region --quiet
# 3. Delete the Firewall Rules
gcloud compute firewall-rules delete $vpc_name-allow-internal $vpc_name-allow-ssh --quiet
# 4. Delete the Subnet and VPC
gcloud compute networks subnets delete $subnet_name --region=$region --quiet
gcloud compute networks delete $vpc_name --quiet
8. Prossimi passi / Scopri di più
Puoi leggere ulteriori informazioni sulla documentazione e sui casi d'uso del networking GKE
Codelab: Accedi alla chat di Gemini 3 Pro utilizzando l'SDK Python tramite l'endpoint Private Service Connect
Codelab: Creazione di agenti AI con ADK:le basi
Segui il prossimo lab
Continua la Quest con Google Cloud e dai un'occhiata a questi altri lab Google Cloud Skills Boost: