Esplora NodeLocal DNSCache di GKE

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 è abilitato per impostazione predefinita. Poi disattivala per vedere come cambia la configurazione quando la disattivi.

Obiettivi

In questo lab imparerai a:

  • Crea un VPC, una subnet e regole firewall personalizzati
  • 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
  • Disattiva la cache e verifica lo stato senza

2. Configurazione del lab

Configurazione dell'ambiente autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

295004821bab6a87.png37d264871000675d.png96d86d3d5655cdbe.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
  • 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, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi 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 vedere 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 questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma 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:

Attiva Cloud Shell

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

Screenshot del terminale Google Cloud Shell che mostra che l'ambiente è connesso

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su 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 ambiente

Creeremo un VPC personalizzato con regole firewall. Se hai già un VPC e un progetto, puoi saltare questa parte.

Apri Cloud Shell, che si trova in alto a destra nella console. e configura come segue: b51b80043d3bac90.png

  1. 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
  1. 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
  1. 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
  1. 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
  1. Aggiungi regole firewall al tuo 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 un gateway Cloud NAT e lo colleghiamo.

In Cloud Shell, utilizza i seguenti comandi

  1. 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

  1. In Google Cloud Shell crea il cluster denominato cache-gke-cluster. Nei cluster GKE Standard che eseguono la versione 1.34.1-gke.3720000 e successive, NodeLocal DNSCache è abilitato per impostazione predefinita. (Il provisioning del cluster dovrebbe richiedere tra 4 e 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
  1. Una volta creato il cluster, connettiti:
gcloud container clusters get-credentials $cluster_name --zone $zone
  1. Ora verifichiamo che NodeLocal DNSCache sia abilitato.

Questi comandi confermano che la versione è 1.34.1-gke.3720000 o successive 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
  1. Successivamente, esegui il seguente comando (in questo modo viene creato un pod privilegiato sulla rete host per verificare che le regole iptables del nodo intercettino e indirizzino 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 si conferma che il traffico DNS ignora la tabella di monitoraggio delle connessioni.

7135447929b7c48f.png

6. Disabilita NodeLocal DNSCache e verifica

Ora rimuoviamo l'ottimizzazione per vedere come funziona senza.

  1. Vai a Cloud Shell ed esegui il comando riportato di seguito. Nota:questa operazione attiverà la ricreazione del nodo, che in genere richiede 3-5 minuti per pool di nodi, 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 set di daemon perché sono stati rimossi.

  1. Esegui nuovamente 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.

4693ee556701e145.png

7. Esegui la pulizia

# 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 di più 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: Building AI Agents with ADK:The Foundation

Segui il prossimo lab

Continua la Quest con Google Cloud e dai un'occhiata a questi altri lab di Google Cloud Skills Boost: