1. Übersicht
Der DNS-Cache verbessert die DNS-Lookup-Latenz, indem Pod-DNS-Anfragen zuerst an den lokalen Cache auf demselben Knoten gesendet werden. Dadurch werden die DNS-Lookup-Zeiten konsistenter und die Anzahl der DNS-Abfragen an kube-dns oder Cloud DNS kann reduziert werden.
In diesem Lab testen Sie, wie NodeLocal DNSCache DNS-Traffic in einem GKE-Cluster verarbeitet. Sie validieren einen GKE Standard-Cluster mit Version 1.34.1-gke.3720000 und höher, um zu bestätigen, dass die Funktion standardmäßig aktiviert ist. Deaktivieren Sie die Funktion dann, um zu sehen, wie sich die Konfiguration ändert.
Lernziele
Aufgaben in diesem Lab:
- Benutzerdefinierte VPC, Subnetz und Firewallregeln erstellen
- GKE-Standardcluster mit schnellem Release-Channel bereitstellen
- Test ausführen, um zu prüfen, ob der LocalNode-DNS-Cache aktiviert ist
- Cache deaktivieren und Status ohne Cache prüfen
2. Lab einrichten
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als
PROJECT_IDangegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.
Cloud Shell starten
Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.
Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft in Google Cloud, was die Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.
3. Umgebung einrichten
Wir erstellen eine benutzerdefinierte VPC mit Firewallregeln. Wenn Sie bereits eine VPC und ein Projekt haben, können Sie diesen Teil überspringen.
Öffnen Sie Cloud Shell oben rechts in der Konsole. Konfigurieren Sie sie so: 
- Einige der APIs aktivieren, die in diesem Lab verwendet werden
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
- Legen Sie einige Variablen fest. Diese Variablen sind die Projekt-ID und der VPC-Name. Die VPC erstellen Sie in Schritt 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
- Erstellen Sie nun eine benutzerdefinierte VPC mit dem Namen
gke-cache-vpc.
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
- Subnetz in der neuen VPC erstellen
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
- Firewallregeln für Ihre VPC hinzufügen
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. NAT-Gateway für die Internetkommunikation erstellen
Wir müssen ausgehenden externen Zugriff auf das Internet gewähren. Erstellen wir also ein Cloud NAT-Gateway und hängen wir es an.
Verwenden Sie in Cloud Shell die folgenden Befehle
- Cloud NAT und NAT-Gateway erstellen
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. GKE-Cluster bereitstellen und prüfen
- Erstellen Sie in Google Cloud Shell den Cluster mit dem Namen
cache-gke-cluster. In GKE Standard-Clustern mit Version1.34.1-gke.3720000und höher ist NodeLocal DNSCache standardmäßig aktiviert. Die Bereitstellung des Clusters sollte 4 bis 10 Minuten dauern.
gcloud container clusters create $cluster_name \
--zone=$zone --network=$vpc_name --subnetwork=$subnet_name \
--release-channel=$channel --machine-type=$machine_type \
--enable-ip-alias
- Nachdem der Cluster erstellt wurde, stellen Sie eine Verbindung her:
gcloud container clusters get-credentials $cluster_name --zone $zone
- Prüfen wir nun, ob NodeLocal DNSCache aktiviert ist.
Mit diesen Befehlen wird bestätigt, dass die Version 1.34.1-gke.3720000 oder höher ist, dass der lokale Agent ausgeführt wird und dass die Dienste
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
- Führen Sie als Nächstes Folgendes aus: Dadurch wird ein privilegierter Pod im Hostnetzwerk erstellt, um zu prüfen, ob die iptables-Regeln des Knotens DNS-Traffic aktiv abfangen und an den lokalen Cache weiterleiten.
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'"
Worauf Sie achten sollten:Suchen Sie nach -j NOTRACK.. Das bestätigt, dass der DNS-Traffic die Verbindungstabelle umgeht.

6. NodeLocal DNSCache deaktivieren und überprüfen
Wir entfernen nun die Optimierung, um zu sehen, wie es ohne sie funktioniert.
- Rufen Sie Cloud Shell auf und führen Sie den folgenden Befehl aus. Hinweis:Dadurch wird eine Neuerstellung des Knotens ausgelöst, die in der Regel 3–5 Minuten pro Knotenpool dauert, da GKE die Instanzen durchläuft.
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
Keiner dieser Pods sollte im DaemonSet angezeigt werden, da sie entfernt wurden.
- Test wiederholen
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'"
Nachdem Sie das Add-on deaktiviert haben, enthält die Ausgabe nicht mehr die -j NOTRACK-Regeln oder die IP-Adresse 169.254.20.10. Das bedeutet, dass Sie die Vorteile des lokalen Cache nicht mehr nutzen können.

7. Bereinigen
# 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. Weitere Informationen
Weitere Informationen zur GKE-Netzwerkdokumentation und zu Anwendungsfällen
Codelab: Zugriff auf Gemini 3 Pro-Chat über das Python SDK über einen Private Service Connect-Endpunkt
Codelab: KI-Agenten mit dem ADK erstellen:Grundlagen
Nächstes Lab absolvieren
Fahren Sie mit Google Cloud fort und sehen Sie sich die folgenden Labs von Google Cloud Skills Boost an: