GKE NodeLocal DNSCache के बारे में जानें

1. खास जानकारी

डीएनएस कैश मेमोरी, डीएनएस लुकअप में लगने वाले समय को कम करती है. इसके लिए, यह पॉड डीएनएस अनुरोधों को सबसे पहले एक ही नोड पर मौजूद लोकल कैश मेमोरी में भेजती है. इससे डीएनएस लुकअप के समय में ज़्यादा स्थिरता आती है. साथ ही, kube-dns या Cloud DNS को भेजी जाने वाली डीएनएस क्वेरी की संख्या कम हो सकती है.

इस लैब में, यह टेस्ट किया जाएगा कि GKE क्लस्टर में NodeLocal DNSCache, डीएनएस ट्रैफ़िक को कैसे मैनेज करता है. आपको GKE Standard क्लस्टर के वर्शन 1.34.1-gke.3720000 और उसके बाद के वर्शन की पुष्टि करनी होगी. इससे यह पता चलेगा कि यह सुविधा डिफ़ॉल्ट रूप से चालू है या नहीं. इसके बाद, सुविधा को बंद करके देखें कि सुविधा बंद करने पर कॉन्फ़िगरेशन में क्या बदलाव होते हैं.

मकसद

इस लैब में, आपको यह काम करने का तरीका बताया जाएगा:

  • कस्टम वीपीसी, सबनेट, और फ़ायरवॉल नियम बनाना
  • रैपिड-रिलीज़ चैनल के साथ स्टैंडर्ड GKE स्टैंडर्ड क्लस्टर डिप्लॉय करना
  • यह पुष्टि करने के लिए टेस्ट चलाएं कि LocalNode डीएनएस कैश मेमोरी चालू है
  • कैश मेमोरी को बंद करें और बिना कैश मेमोरी के स्थिति की पुष्टि करें

2. लैब सेटअप करना

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी 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. एनवायरमेंट सेटअप करना

हम फ़ायरवॉल के नियमों के साथ एक कस्टम वीपीसी बनाएंगे. अगर आपके पास पहले से ही वीपीसी और प्रोजेक्ट है, तो इस हिस्से को छोड़ा जा सकता है.

अपनी कंसोल स्क्रीन पर सबसे ऊपर दाईं ओर मौजूद Cloud Shell खोलें. इसके बाद, इसे इस तरह कॉन्फ़िगर करें: b51b80043d3bac90.png

  1. इस लैब में इस्तेमाल की जाने वाली कुछ एपीआई चालू करें
gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable container.googleapis.com
  1. कुछ वैरिएबल सेट करें. ये वैरिएबल, प्रोजेक्ट आईडी और वीपीसी का नाम हैं. आपको तीसरे चरण में वीपीसी बनाना होगा.
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. अब gke-cache-vpc नाम का कस्टम वीपीसी बनाएं
gcloud compute networks create $vpc_name --subnet-mode=custom --project=$projectid \
--subnet-mode=custom \
--mtu=1460 \
--bgp-routing-mode=global
  1. नए वीपीसी में सबनेट बनाएं
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. अपने वीपीसी में फ़ायरवॉल के नियम जोड़ना
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 स्टैंडर्ड क्लस्टर के 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 नियम या 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: Private Service Connect एंडपॉइंट के ज़रिए Python SDK का इस्तेमाल करके, Gemini 3 Pro से चैट करना

Codelab: ADK की मदद से एआई एजेंट बनाना:बुनियादी बातें

अगली लैब पर जाएं

Google Cloud के साथ अपनी क्वेस्ट जारी रखें. साथ ही, Google Cloud Skills Boost के इन अन्य कोडलैब को देखें: