1. Présentation
Le cache DNS améliore la latence de la résolution DNS en envoyant d'abord les requêtes DNS des pods au cache local sur le même nœud. Cela harmonise les délais des résolutions DNS et peut réduire le nombre de requêtes DNS adressées à kube-dns ou Cloud DNS.
Dans cet atelier, vous allez tester la façon dont NodeLocal DNSCache gère le trafic DNS dans un cluster GKE. Vous allez valider un cluster GKE Standard exécutant la version 1.34.1-gke.3720000 ou ultérieure pour confirmer qu'il est activé par défaut. Désactivez-le ensuite pour voir comment la configuration change lorsque vous désactivez la fonctionnalité.
Objectifs
Dans cet atelier, vous apprendrez à effectuer les tâches suivantes :
- Créer un VPC, un sous-réseau et des règles de pare-feu personnalisés
- Déployez un cluster GKE Standard standard avec le canal de publication rapide.
- Exécuter un test pour vérifier que le cache DNS LocalNode est activé
- Désactiver le cache et vérifier l'état sans celui-ci
2. Mettre en place l'atelier
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.
3. Configurer l'environnement
Nous allons créer un VPC personnalisé avec des règles de pare-feu. Si vous disposez déjà d'un VPC et d'un projet, vous pouvez ignorer cette partie.
Ouvrez Cloud Shell en haut à droite de la console. Configurez-le comme suit : 
- Activer certaines des API que nous utiliserons dans cet atelier
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
- Définissez des variables. Ces variables sont l'ID du projet et le nom du VPC (vous créerez le VPC à l'étape 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
- Créez maintenant un VPC personnalisé appelé
gke-cache-vpc.
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
- Créer le sous-réseau dans le nouveau 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
- Ajouter des règles de pare-feu à votre 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. Créer une passerelle NAT pour la communication Internet
Nous devons accorder un accès externe sortant à Internet. Créons donc une passerelle Cloud NAT et associons-la.
Dans Cloud Shell, utilisez les commandes suivantes.
- Créer Cloud NAT et la passerelle 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. Déployer et vérifier le cluster GKE
- Dans Google Cloud Shell, créez le cluster appelé
cache-gke-cluster. Pour les clusters GKE Standard exécutant la version1.34.1-gke.3720000ou ultérieure, NodeLocal DNSCache est activé par défaut. (Le provisionnement du cluster devrait prendre entre 4 et 10 minutes.)
gcloud container clusters create $cluster_name \
--zone=$zone --network=$vpc_name --subnetwork=$subnet_name \
--release-channel=$channel --machine-type=$machine_type \
--enable-ip-alias
- Une fois votre cluster créé, connectez-vous :
gcloud container clusters get-credentials $cluster_name --zone $zone
- Vérifions maintenant que NodeLocal DNSCache est activé.
Ces commandes confirment que la version est 1.34.1-gke.3720000 ou ultérieure, et que l'agent local est en cours d'exécution et que les services
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
- Exécutez ensuite la commande suivante (Cela crée un pod privilégié sur le réseau hôte pour vérifier que les règles iptables du nœud interceptent et acheminent activement le trafic DNS vers le cache 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'"
Éléments à rechercher : recherchez -j NOTRACK.. Cela confirme que le trafic DNS contourne la table de suivi des connexions.

6. Désactiver NodeLocal DNSCache et vérifier
Nous allons maintenant supprimer l'optimisation pour voir comment cela fonctionne sans elle.
- Accédez à Cloud Shell et exécutez la commande suivante. Remarque : Cette opération déclenche la recréation d'un nœud, ce qui prend généralement 3 à 5 minutes par pool de nœuds, car GKE fait passer les instances en revue.
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
Vous ne devriez voir aucun de ces pods dans le DaemonSet, car ils ont été supprimés.
- Réexécuter le 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'"
Après avoir désactivé le module complémentaire, le résultat ne contiendra plus les règles -j NOTRACK ni aucune mention de l'adresse IP 169.254.20.10. Cela signifie que vous ne bénéficiez plus des avantages du cache local.

7. Effectuer un nettoyage
# 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. Étapes suivantes et informations supplémentaires
Pour en savoir plus, consultez la documentation sur la mise en réseau GKE et les cas d'utilisation.
Codelab : Créer des agents IA avec ADK : les bases
Atelier suivant
Continuez sur votre lancée avec Google Cloud et consultez ces autres ateliers Google Cloud Skills Boost :