Menjelajahi NodeLocal DNSCache GKE

1. Ringkasan

Cache DNS meningkatkan latensi pencarian DNS, dengan mengirimkan permintaan DNS pod ke cache lokal di node yang sama terlebih dahulu. Hal ini membuat waktu pencarian DNS lebih konsisten, dan dapat mengurangi jumlah kueri DNS ke kube-dns atau Cloud DNS.

Dalam lab ini, Anda akan menguji cara NodeLocal DNSCache menangani traffic DNS di cluster GKE. Anda akan memvalidasi cluster GKE Standar yang menjalankan versi 1.34.1-gke.3720000 dan yang lebih baru, untuk mengonfirmasi bahwa fitur ini diaktifkan secara default. Kemudian, nonaktifkan untuk melihat perubahan konfigurasi saat Anda menonaktifkan fitur tersebut.

Tujuan

Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:

  • Membuat VPC, subnet, dan aturan firewall kustom
  • Men-deploy cluster GKE Standard standar dengan saluran rilis cepat
  • Jalankan pengujian untuk memverifikasi bahwa cache DNS LocalNode diaktifkan
  • Nonaktifkan cache dan verifikasi status tanpa cache

2. Penyiapan lab

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

Mengaktifkan Cloud Shell

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

Screenshot terminal Google Cloud Shell yang menunjukkan bahwa lingkungan telah terhubung

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.

3. Menyiapkan Lingkungan

Kita akan membuat VPC kustom dengan aturan Firewall. Jika sudah memiliki VPC dan Project, Anda dapat melewati bagian ini.

Buka Cloud Shell yang berada di bagian atas konsol Anda di sebelah kanan. Kemudian, konfigurasikan sebagai berikut: b51b80043d3bac90.png

  1. Aktifkan beberapa API yang akan kita gunakan di lab ini
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. Tetapkan beberapa variabel. Variabel ini adalah Project ID dan Nama VPC (Anda akan membuat VPC pada langkah 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. Sekarang buat VPC kustom bernama gke-cache-vpc
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. Buat subnet di VPC baru
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. Menambahkan aturan firewall ke VPC Anda
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. Membuat gateway NAT untuk komunikasi internet

Kita perlu memberikan akses eksternal keluar ke internet, jadi mari buat dan lampirkan gateway Cloud NAT.

Di Cloud Shell, gunakan perintah berikut

  1. Buat Cloud NAT dan 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. Men-deploy dan memverifikasi cluster GKE

  1. Di Google Cloud Shell, buat cluster bernama cache-gke-cluster. Di cluster GKE Standard yang menjalankan versi 1.34.1-gke.3720000 dan yang lebih baru, NodeLocal DNSCache diaktifkan secara default. (Penyediaan cluster akan memakan waktu antara 4 hingga 10 menit)
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. Setelah cluster Anda dibuat, hubungkan:
gcloud container clusters get-credentials $cluster_name --zone $zone
  1. Sekarang, mari kita verifikasi bahwa NodeLocal DNSCache telah diaktifkan.

Perintah ini mengonfirmasi bahwa versinya adalah 1.34.1-gke.3720000 atau yang lebih baru, serta mengonfirmasi bahwa agen lokal sedang berjalan dan layanan

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. Selanjutnya, jalankan perintah berikut (Perintah ini membuat pod yang memiliki hak istimewa di jaringan host untuk memverifikasi bahwa aturan iptables node secara aktif mengintersep dan merutekan traffic DNS ke cache lokal)
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'"

Yang harus dicari: Cari -j NOTRACK. Hal ini mengonfirmasi bahwa traffic DNS melewati tabel pelacakan koneksi.

7135447929b7c48f.png

6. Menonaktifkan NodeLocal DNSCache dan memverifikasi

Sekarang kita menghapus pengoptimalan untuk melihat cara kerjanya tanpa pengoptimalan.

  1. Buka Cloud Shell dan jalankan perintah berikut. Catatan: Tindakan ini akan memicu pembuatan ulang node, yang biasanya memerlukan waktu 3–5 menit per node pool saat GKE melakukan siklus pada instance
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

Anda tidak akan melihat pod ini di daemon set karena telah dihapus.

  1. Menjalankan kembali pengujian
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'"

Setelah menonaktifkan add-on, output tidak akan lagi berisi aturan -j NOTRACK atau penyebutan alamat IP 169.254.20.10. Artinya, Anda tidak lagi mendapatkan manfaat dari cache lokal

4693ee556701e145.png

7. Pembersihan

# 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. Langkah berikutnya/Pelajari lebih lanjut

Anda dapat membaca lebih lanjut dokumentasi dan kasus penggunaan jaringan GKE

Codelab: Mengakses percakapan Gemini 3 Pro menggunakan python sdk melalui endpoint Private Service Connect

Codelab: Membangun Agen AI dengan ADK:Fondasi

Ikuti lab berikutnya

Lanjutkan quest Anda dengan Google Cloud, dan pelajari lab Google Cloud Skills Boost lainnya: