استكشاف GKE NodeLocal DNSCache

1. نظرة عامة

تحسّن ذاكرة التخزين المؤقت لنظام أسماء النطاقات وقت استجابة البحث في نظام أسماء النطاقات من خلال إرسال طلبات نظام أسماء النطاقات الخاصة بالحِزم إلى ذاكرة التخزين المؤقت المحلية على العقدة نفسها أولاً. يؤدي ذلك إلى زيادة اتساق أوقات البحث في نظام أسماء النطاقات، ويمكن أن يقلّل عدد طلبات البحث في نظام أسماء النطاقات إلى kube-dns أو Cloud DNS.

في هذا الدرس التطبيقي، ستختبر طريقة تعامل NodeLocal DNSCache مع عدد الزيارات إلى نظام أسماء النطاقات (DNS) في مجموعة GKE. ستتحقّق من صحة مجموعة GKE Standard التي تعمل بالإصدار 1.34.1-gke.3720000 والإصدارات الأحدث، وذلك للتأكّد من أنّها مفعّلة تلقائيًا. بعد ذلك، أوقِف الميزة لمعرفة كيف تتغيّر الإعدادات عند إيقافها.

الأهداف

في هذا التمرين المعملي، ستتعرّف على كيفية تنفيذ المهمة التالية:

  • إنشاء شبكة VPC وشبكة فرعية وقواعد جدار حماية مخصّصة
  • نشر مجموعة عادية من GKE Standard باستخدام قناة الإصدار السريع
  • تنفيذ اختبار للتحقّق من تفعيل ذاكرة التخزين المؤقت لنظام أسماء النطاقات (DNS) في LocalNode
  • إيقاف ذاكرة التخزين المؤقت والتحقّق من الحالة بدونها

2. إعداد الدرس التطبيقي

إعداد البيئة بالسرعة التي تناسبك

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع.
  • للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف فوترة تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

تفعيل Cloud Shell

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:

لقطة شاشة لواجهة سطر الأوامر في Google Cloud Shell توضّح أنّه تم ربط البيئة

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. لست بحاجة إلى تثبيت أي تطبيق.

3- إعداد البيئة

سننشئ سحابة VPC مخصّصة تتضمّن قواعد جدار الحماية. إذا كان لديك شبكة VPC ومشروع حاليًا، يمكنك تخطّي هذا الجزء.

افتح Cloud Shell في أعلى وحدة التحكّم على يسار الصفحة. اضبط الإعدادات على النحو التالي: b51b80043d3bac90.png

  1. تفعيل بعض واجهات برمجة التطبيقات التي سنستخدمها في هذا الدرس التطبيقي
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. اضبط بعض المتغيرات. هذه المتغيّرات هي رقم تعريف المشروع واسم شبكة VPC (ستنشئ شبكة VPC في الخطوة 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. الآن، أنشئ شبكة 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

4. إنشاء بوابة NAT للتواصل عبر الإنترنت

علينا منح إذن بالوصول الخارجي إلى الإنترنت، لذا لننشئ بوابة Cloud NAT ونرفقها.

في Cloud Shell، استخدِم الأوامر التالية

  1. إنشاء Cloud NAT وبوابة 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- تفعيل مجموعة GKE والتحقّق منها

  1. في Google Cloud Shell، أنشئ المجموعة التي تحمل الاسم cache-gke-cluster. في مجموعات GKE Standard التي تعمل بالإصدار 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.

تؤكّد هذه الأوامر أنّ الإصدار هو 1.34.1-gke.3720000 أو إصدار أحدث، وتؤكّد أنّ الوكيل المحلي يعمل وأنّ الخدمات

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. بعد ذلك، شغِّل ما يلي (يؤدي ذلك إلى إنشاء وحدة مميّزة على شبكة المضيف للتحقّق من أنّ قواعد iptables الخاصة بالعقدة تعترض بشكل نشط حركة بيانات نظام أسماء النطاقات وتوجّهها إلى ذاكرة التخزين المؤقت المحلية)
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. يؤكّد ذلك أنّ زيارات نظام أسماء النطاقات تتجاوز جدول تتبُّع الاتصال.

7135447929b7c48f.png

6. إيقاف NodeLocal DNSCache والتحقّق من ذلك

سنزيل الآن التحسين لنرى كيف يعمل بدون هذه الميزة.

  1. انتقِل إلى Cloud Shell ونفِّذ ما يلي. ملاحظة: سيؤدي ذلك إلى إعادة إنشاء عقدة، وهو ما يستغرق عادةً من 3 إلى 5 دقائق لكل مجموعة أجهزة ذات التخصيص نفسه، لأنّ 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

7. تَنظيم

# 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. الخطوات التالية / مزيد من المعلومات

يمكنك الاطّلاع على مزيد من المعلومات عن مستندات شبكات GKE وحالات الاستخدام.

Codelab: الوصول إلى محادثة Gemini 3 Pro باستخدام حزمة تطوير البرامج (SDK) للغة Python من خلال نقطة نهاية Private Service Connect

Codelab: إنشاء وكلاء الذكاء الاصطناعي باستخدام حزمة ADK:الأساسيات

الدرس التطبيقي التالي

يمكنك مواصلة رحلتك التعليمية مع Google Cloud، والاطّلاع على هذه الدروس التطبيقية الأخرى من Google Cloud Skills Boost: