GKE NodeLocal DNSCache را کاوش کنید

۱. مرور کلی

حافظه پنهان DNS با ارسال درخواست‌های DNS از pod به حافظه پنهان محلی در همان گره، تأخیر جستجوی DNS را بهبود می‌بخشد. این امر باعث می‌شود زمان جستجوی DNS سازگارتر شود و می‌تواند تعداد درخواست‌های DNS به kube-dns یا Cloud DNS را کاهش دهد.

در این آزمایش، شما آزمایش خواهید کرد که چگونه NodeLocal DNSCache ترافیک DNS را در یک خوشه GKE مدیریت می‌کند. شما یک خوشه GKE Standard را که نسخه 1.34.1-gke.3720000 و بالاتر را اجرا می‌کند، اعتبارسنجی خواهید کرد تا تأیید شود که به طور پیش‌فرض فعال است. سپس غیرفعال کنید تا ببینید وقتی این ویژگی را خاموش می‌کنید، پیکربندی چگونه تغییر می‌کند.

اهداف

در این آزمایشگاه یاد خواهید گرفت که چگونه وظایف زیر را انجام دهید:

  • ایجاد قوانین سفارشی VPC، زیرشبکه و فایروال
  • یک کلاستر استاندارد GKE با کانال انتشار سریع مستقر کنید.
  • اجرای یک تست برای تأیید فعال بودن حافظه پنهان DNS LocalNode
  • حافظه پنهان را غیرفعال کنید و وضعیت را بدون آن تأیید کنید

۲. راه‌اندازی آزمایشگاه

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

از کنسول گوگل کلود ، روی آیکون Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

فعال کردن پوسته ابری

آماده‌سازی و اتصال به محیط فقط چند لحظه طول می‌کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

تصویر صفحه ترمینال Google Cloud Shell که نشان می‌دهد محیط متصل شده است

این ماشین مجازی با تمام ابزارهای توسعه‌ای که نیاز دارید، مجهز شده است. این ماشین مجازی یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و روی فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود می‌بخشد. تمام کارهای شما در این آزمایشگاه کد را می‌توان در یک مرورگر انجام داد. نیازی به نصب چیزی ندارید.

۳. محیط راه‌اندازی

ما یک VPC سفارشی با قوانین فایروال ایجاد خواهیم کرد. اگر از قبل VPC و پروژه دارید، می‌توانید از این بخش صرف نظر کنید.

Cloud Shell را که در بالای کنسول شما در سمت راست قرار دارد، باز کنید و به صورت زیر پیکربندی کنید: b51b80043d3bac90.png

  1. فعال کردن برخی از APIهایی که در این آزمایش استفاده خواهیم کرد
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. چند متغیر تنظیم کنید. این متغیرها عبارتند از شناسه پروژه و نام VPC (شما VPC را در مرحله ۳ ایجاد خواهید کرد).
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. حالا یک VPC سفارشی به نام gke-cache-vpc ایجاد کنید.
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. زیرشبکه را در 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
  1. قوانین فایروال را به 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

۴. ایجاد دروازه NAT برای ارتباط اینترنتی

ما باید دسترسی خارجی خروجی به اینترنت را فراهم کنیم، بنابراین بیایید یک دروازه Cloud NAT ایجاد کنیم و آن را وصل کنیم.

در Cloud Shell از دستورات زیر استفاده کنید

  1. ایجاد Cloud NAT و NAT gateway
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

۵. کلاستر GKE را مستقر کرده و تأیید کنید

  1. در Google Cloud Shell، کلاستری به نام cache-gke-cluster ایجاد کنید. کلاسترهای استاندارد GKE که نسخه 1.34.1-gke.3720000 و بالاتر را اجرا می‌کنند، NodeLocal DNSCache به طور پیش‌فرض فعال است. ( آماده‌سازی کلاستر باید بین 4 تا 10 دقیقه طول بکشد )
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. پس از ایجاد خوشه، اتصال برقرار شد:
gcloud container clusters get-credentials $cluster_name --zone $zone
  1. حالا بیایید بررسی کنیم که آیا NodeLocal DNSCache فعال است یا خیر.

این دستورات تأیید می‌کنند که نسخه ۱.۳۴.۱-gke.۳۷۲۰۰۰۰ یا بالاتر است و تأیید می‌کنند که عامل محلی در حال اجرا است و سرویس‌ها

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. سپس دستور زیر را اجرا کنید ( این دستور یک Pod ممتاز در شبکه میزبان ایجاد می‌کند تا تأیید کند که قوانین iptables گره به طور فعال ترافیک DNS را به حافظه پنهان محلی رهگیری و مسیریابی می‌کنند .)
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'"

به دنبال چه چیزی بگردیم: به دنبال -j NOTRACK. این تأیید می‌کند که ترافیک DNS از جدول ردیابی اتصال عبور می‌کند.

۷۱۳۵۴۴۷۹۲۹b۷c۴۸f.png

۶. غیرفعال کردن NodeLocal DNSCache و بررسی آن

اکنون بهینه‌سازی را حذف می‌کنیم تا ببینیم بدون آن چگونه کار می‌کند.

  1. به Cloud Shell بروید و دستور زیر را اجرا کنید. توجه: این کار باعث ایجاد یک بازسازی گره می‌شود که معمولاً ۳ تا ۵ دقیقه برای هر گره طول می‌کشد، زیرا GKE نمونه‌ها را چرخه‌بندی می‌کند.
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

شما نباید هیچ یک از این پادها را در مجموعه دیمن ببینید زیرا حذف شده‌اند.

  1. آزمایش مجدد
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'"

پس از غیرفعال کردن افزونه ، خروجی دیگر شامل قوانین -j NOTRACK یا هیچ اشاره‌ای به آدرس IP 169.254.20.10 نخواهد بود. این بدان معناست که شما دیگر از مزایای حافظه پنهان محلی بهره‌مند نخواهید شد.

4693ee556701e145.png

۷. تمیز کردن

# 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

۸. مراحل بعدی / اطلاعات بیشتر

می‌توانید اطلاعات بیشتری در مورد مستندات شبکه GKE و موارد استفاده آن مطالعه کنید.

Codelab : دسترسی به چت Gemini 3 Pro با استفاده از python sdk از طریق نقطه پایانی Private Service Connect

Codelab : ساخت عامل‌های هوش مصنوعی با ADK:The Foundation

آزمایشگاه بعدی خود را انجام دهید

به تلاش خود با Google Cloud ادامه دهید و این آزمایشگاه‌های دیگر Google Cloud Skills Boost را بررسی کنید: