1. Genel Bakış
DNS önbelleği, pod DNS isteklerini önce aynı düğümdeki yerel önbelleğe göndererek DNS arama gecikmesini iyileştirir. Bu, DNS arama sürelerini daha tutarlı hale getirir ve kube-dns veya Cloud DNS'ye yapılan DNS sorgularının sayısını azaltabilir.
Bu laboratuvarda, NodeLocal DNSCache'in bir GKE kümesinde DNS trafiğini nasıl işlediğini test edeceksiniz. Varsayılan olarak etkinleştirildiğini onaylamak için 1.34.1-gke.3720000 ve sonraki sürümleri çalıştıran bir GKE Standard kümesini doğrulayacaksınız. Ardından, özelliği devre dışı bırakarak yapılandırmanın nasıl değiştiğini görün.
Hedefler
Bu laboratuvarda, aşağıdaki görevi nasıl gerçekleştireceğinizi öğreneceksiniz:
- Özel bir VPC, alt ağ ve güvenlik duvarı kuralları oluşturma
- Hızlı sürüm kanalıyla standart bir GKE Standard kümesi dağıtma
- LocalNode DNS önbelleğinin etkinleştirildiğini doğrulamak için bir test yürütün
- Önbelleği devre dışı bırakma ve durumu önbellek olmadan doğrulama
2. Laboratuvar kurulumu
Yönlendirmesiz ortam kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir ekranla karşılaşırsınız:

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.
3. Ortamı ayarlama
Güvenlik duvarı kuralları içeren özel bir VPC oluşturacağız. Zaten bir VPC ve projeniz varsa bu bölümü atlayabilirsiniz.
Konsolunuzun sağ üst kısmında bulunan Cloud Shell'i açın. Aşağıdaki gibi yapılandırın: 
- Bu laboratuvarda kullanacağımız API'lerden bazılarını etkinleştirin.
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
- Bazı değişkenleri ayarlayın. Bu değişkenler proje kimliği ve VPC adıdır (VPC'yi 3. adımda oluşturacaksınız).
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
- Şimdi
gke-cache-vpcadlı özel bir VPC oluşturun.
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
- Yeni VPC'de alt ağ oluşturun
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
- VPC'nize güvenlik duvarı kuralları ekleme
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. İnternet iletişimi için NAT ağ geçidi oluşturma
İnternete giden harici erişim izni vermemiz gerekiyor. Bu nedenle, bir Cloud NAT ağ geçidi oluşturup ekleyelim.
Cloud Shell'de aşağıdaki komutları kullanın
- Cloud NAT ve NAT ağ geçidini oluşturma
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 kümesini dağıtma ve doğrulama
- Google Cloud Shell'de
cache-gke-clusteradlı kümeyi oluşturun.1.34.1-gke.3720000ve sonraki sürümleri çalıştıran GKE Standard kümelerinde NodeLocal DNSCache varsayılan olarak etkindir. (Kümenin sağlanması 4-10 dakika sürer)
gcloud container clusters create $cluster_name \
--zone=$zone --network=$vpc_name --subnetwork=$subnet_name \
--release-channel=$channel --machine-type=$machine_type \
--enable-ip-alias
- Kümeniz oluşturulduktan sonra bağlanın:
gcloud container clusters get-credentials $cluster_name --zone $zone
- Şimdi NodeLocal DNSCache'in etkinleştirildiğini doğrulayalım.
Bu komutlar, sürümün 1.34.1-gke.3720000 veya sonraki bir sürüm olduğunu ve yerel aracının çalıştığını ve hizmetlerin
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
- Ardından aşağıdakileri çalıştırın (Bu, düğümün iptables kurallarının DNS trafiğini etkin bir şekilde kesip yerel önbelleğe yönlendirdiğini doğrulamak için ana makine ağında ayrıcalıklı bir pod oluşturur):
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'"
Ne aranmalı: -j NOTRACK. ifadesini arayın. Bu ifade, DNS trafiğinin bağlantı izleme tablosunu atladığını onaylar.

6. NodeLocal DNSCache'i devre dışı bırakma ve doğrulama
Şimdi, optimizasyonun nasıl çalıştığını görmek için optimizasyonu kaldırıyoruz.
- Cloud Shell'e gidip aşağıdakileri çalıştırın. Not: Bu işlem, düğümlerin yeniden oluşturulmasını tetikler. GKE, örnekleri döndürdüğünden bu işlem genellikle düğüm havuzu başına 3-5 dakika sürer.
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
Kaldırıldıkları için bu pod'ların hiçbirini daemon set'te görmemeniz gerekir.
- Testi yeniden çalıştırma
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'"
Eklenti devre dışı bırakıldıktan sonra çıkışta artık -j NOTRACK kuralları veya 169.254.20.10 IP adresinden bahsedilmeyecek. Bu durumda, yerel önbelleğin avantajlarından artık yararlanamazsınız.

7. Temizleme
# 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. Sonraki adımlar / Daha fazla bilgi
GKE ağ iletişimi belgeleri ve kullanım alanları hakkında daha fazla bilgi edinebilirsiniz.
Codelab: ADK ile Yapay Zeka Ajanları Oluşturma:Temel Bilgiler
Sonraki laboratuvarınıza katılın
Google Cloud ile görevinize devam edin ve aşağıdaki Google Cloud Öğrenim Merkezi laboratuvarlarına göz atın: