1. Descripción general
La caché de DNS mejora la latencia de búsqueda de DNS, ya que primero envía las solicitudes de DNS del Pod a la caché local en el mismo nodo. Esto hace que los tiempos de búsqueda de DNS sean más coherentes y puede reducir la cantidad de consultas de DNS a kube-dns o Cloud DNS.
En este lab, probarás cómo NodeLocal DNSCache controla el tráfico de DNS en un clúster de GKE. Validarás un clúster de GKE Standard que ejecute la versión 1.34.1-gke.3720000 y versiones posteriores para confirmar que está habilitado de forma predeterminada. Luego, inhabilítala para ver cómo cambia la configuración cuando desactivas la función.
Objetivos
En este lab, aprenderás a realizar la siguiente tarea:
- Crea una VPC, una subred y reglas de firewall personalizadas
- Implementa un clúster de GKE estándar con el canal de versiones rápidas.
- Ejecuta una prueba para verificar que la caché de DNS de LocalNode esté habilitada
- Inhabilita la caché y verifica el estado sin ella
2. Configuración del lab
Configuración del entorno de autoaprendizaje
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.



- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como
PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Inicia Cloud Shell
Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
En Google Cloud Console, haz clic en el ícono de Cloud Shell en la barra de herramientas en la parte superior derecha:

El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Todo tu trabajo en este codelab se puede hacer en un navegador. No es necesario que instales nada.
3. Configura el entorno
Crearemos una VPC personalizada con reglas de firewall. Si ya tienes una VPC y un proyecto, puedes omitir esta parte.
Abre Cloud Shell, que se encuentra en la parte superior derecha de la consola. Y configúralo de la siguiente manera: 
- Habilita algunas de las APIs que usaremos en este lab
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
- Configura algunas variables. Estas variables son el ID del proyecto y el nombre de la VPC (crearás la VPC en el paso 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
- Ahora, crea una VPC personalizada llamada
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 subred en la VPC nueva
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
- Agrega reglas de firewall a tu 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 una puerta de enlace NAT para la comunicación por Internet
Debemos otorgar acceso externo saliente a Internet, por lo que crearemos una puerta de enlace de Cloud NAT y la adjuntaremos.
En Cloud Shell, usa los siguientes comandos
- Crea Cloud NAT y la puerta de enlace 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. Implementa el clúster de GKE y verifícalo
- En Google Cloud Shell, crea el clúster llamado
cache-gke-cluster. En los clústeres de GKE Standard que ejecutan la versión1.34.1-gke.3720000y posteriores, NodeLocal DNSCache está habilitado de forma predeterminada. (El aprovisionamiento del clúster debería tardar entre 4 y 10 minutos).
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 vez que se cree tu clúster, conéctate:
gcloud container clusters get-credentials $cluster_name --zone $zone
- Ahora, verifiquemos que NodeLocal DNSCache esté habilitado.
Estos comandos confirman que la versión es 1.34.1-gke.3720000 o posterior, y que el agente local se está ejecutando y los servicios
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
- A continuación, ejecuta lo siguiente (Esto crea un pod con privilegios en la red del host para verificar que las reglas de iptables del nodo intercepten y enruten activamente el tráfico de DNS a la caché local).
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'"
Qué buscar: Busca -j NOTRACK.. Esto confirma que el tráfico de DNS omite la tabla de seguimiento de conexiones.

6. Inhabilita NodeLocal DNSCache y verifica
Ahora quitaremos la optimización para ver cómo funciona sin ella.
- Ve a Cloud Shell y ejecuta lo siguiente. Nota: Esto activará la recreación de un nodo, que suele tardar entre 3 y 5 minutos por grupo de nodos, ya que GKE realiza ciclos de las instancias.
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
No deberías ver ninguno de estos Pods en el conjunto de daemons, ya que se quitaron.
- Volver a ejecutar la prueba Re-run
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'"
Después de inhabilitar el complemento, el resultado ya no contendrá las reglas de -j NOTRACK ni ninguna mención de la dirección IP 169.254.20.10. Esto significa que ya no obtienes los beneficios de la caché local.

7. Limpia
# 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. Próximos pasos y más información
Puedes leer más sobre la documentación y los casos de uso de las redes de GKE.
Codelab: Accede al chat de Gemini 3 Pro con el SDK de Python a través del extremo de Private Service Connect
Codelab: Creación de agentes de IA con el ADK:Conceptos básicos
Realiza tu próximo lab
Continúa tu Quest con Google Cloud y consulta estos otros labs de Google Cloud Skills Boost: