ऐडवांस ट्रैफ़िक मैनेजमेंट (एनवाय) कोडलैब के साथ एक्सटर्नल एचटीटीपी एलबी

1. परिचय

ऐडवांस ट्रैफ़िक मैनेजमेंट (Envoy) कोडलैब के साथ External HTTPs LB में आपका स्वागत है!

बेहतर ट्रैफ़िक मैनेजमेंट के साथ एचटीटीपी या एक्सटर्नल लोड बैलेंसर के सबसे नए वर्शन में हमारे मौजूदा क्लासिक ग्लोबल एक्सटर्नल एचटीटीपी या लोड बैलेंसर की सभी सुविधाएं शामिल हैं. हालांकि, इसमें ऐडवांस ट्रैफ़िक मैनेजमेंट की सुविधाओं की लगातार बढ़ती हुई सूची भी शामिल है. इनमें से कुछ सुविधाएं हमारे लोड बैलेंसर में नई हैं. साथ ही, कुछ सुविधाएं मौजूदा समय में पहले से बेहतर की गई सुविधाएं देती हैं. इन सुविधाओं की कुछ सूची में ये शामिल हैं:

आपको इनके बारे में जानकारी मिलेगी

  • मैनेज किए जा रहे इंस्टेंस ग्रुप और इससे जुड़े VPC और फ़ायरवॉल के नियम सेट अप करने का तरीका
  • नए लोड बैलेंसर की, ट्रैफ़िक मैनेजमेंट की ऐडवांस सुविधाओं को इस्तेमाल करने का तरीका
  • इस बात की पुष्टि करने का तरीका कि ट्रैफ़िक मैनेज करने की बेहतर सुविधाएं उम्मीद के मुताबिक काम कर रही हैं.

आपको इन चीज़ों की ज़रूरत होगी

  • बुनियादी नेटवर्किंग और एचटीटीपी की जानकारी
  • Unix/Linux कमांड लाइन के बारे में बुनियादी जानकारी

कोडलैब टोपोलॉजी और इस्तेमाल का उदाहरण

bfc43fd0ca39047a.png

पहली इमेज - एचटीटीपी लोड बैलेंसर रूटिंग टोपोलॉजी

कोड लैब के दौरान, मैनेज किए जा रहे तीन इंस्टेंस ग्रुप सेट अप किए जाएंगे. पहला, पूर्व, पश्चिमी, और मध्य में. आपको एक ग्लोबल एक्सटर्नल एचटीटीपीएस लोड बैलेंसर बनाना होगा. लोड बैलेंसर, ऐडवांस लेवल की उन क्षमताओं की सूची की कई सुविधाओं का इस्तेमाल करेगा जो एनवॉय आधारित लोड बैलेंसर के साथ काम करती हैं. डिप्लॉयमेंट के बाद, कुछ सिम्युलेटेड लोड जनरेट करें और पुष्टि करें कि आपने जो कॉन्फ़िगरेशन सेट किए हैं वे ठीक से काम कर रहे हैं.

2. सेटअप और ज़रूरी शर्तें

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. साथ ही, आप इसे किसी भी समय अपडेट कर सकते हैं.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, आईडी को बदला नहीं जा सकता. सेट अप के बाद इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना पड़ता है और आम तौर पर इसकी पहचान PROJECT_ID के रूप में की जाती है. इसलिए, अगर आपको यह पसंद नहीं आता है, तो कोई भी कोड जनरेट करें. इसके अलावा, खुद का भी कोड बनाकर देखा जा सकता है कि वह उपलब्ध है या नहीं. फिर यह "फ़्रोज़न" होता है प्रोजेक्ट बनने के बाद.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर है, जिसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा किसी अन्य प्लैटफ़ॉर्म पर बिलिंग न करने के लिए, संसाधनों को बंद करने के लिए, "साफ़-सफ़ाई" का पालन करें कोडलैब के आखिर में दिए गए निर्देश देखें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

GCP कंसोल में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

bce75f34b2c53987.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

f6ef2b5f13479f3a.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस लैब में आपका सारा काम बस एक ब्राउज़र से किया जा सकता है.

शुरू करने से पहले

Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप किया गया हो

gcloud कॉन्फ़िगरेशन सूची प्रोजेक्ट

gcloud कॉन्फ़िगरेशन सेट प्रोजेक्ट [YOUR-PROJECT-NAME]

PROJECT_ID=[YOUR-PROJECT-NAME]

इको $PROJECT_ID

एपीआई चालू करना

सभी ज़रूरी सेवाएं चालू करें

gcloud services enable compute.googleapis.com
gcloud services enable logging.googleapis.com
gcloud services enable monitoring.googleapis.com

3. VPC नेटवर्क बनाना

VPC नेटवर्क बनाना

Cloud Shell से

gcloud compute networks create httplbs --subnet-mode=auto

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/httplbs].
NAME: httplbs
SUBNET_MODE: AUTO
BGP_ROUTING_MODE: REGIONAL
IPV4_RANGE:
GATEWAY_IPV4:

VPC फ़ायरवॉल के नियम बनाना

VPC बनाने के बाद, अब आपको फ़ायरवॉल के नियम बनाने होंगे. फ़ायरवॉल नियम का इस्तेमाल, सभी आईपी को एचटीटीपी ट्रैफ़िक के लिए, पोर्ट 80 पर टेस्ट ऐप्लिकेशन की वेबसाइट के बाहरी आईपी को ऐक्सेस करने की अनुमति देने के लिए किया जाएगा.

Cloud Shell से

gcloud compute firewall-rules create httplb-allow-http-rule \
--allow tcp:80 \
--network httplbs \
--source-ranges 0.0.0.0/0 \
--priority 700

आउटपुट

Creating firewall...working..Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/httplb-allow-http-rule].
Creating firewall...done.
NAME: httplb-allow-http-rule
NETWORK: httplbs
DIRECTION: INGRESS
PRIORITY: 700
ALLOW: tcp:80
DENY:
DISABLED: False

4. मैनेज किए जा रहे इंस्टेंस ग्रुप सेट अप करना

आपको ऐसे मैनेज किए जा रहे इंस्टेंस ग्रुप सेट अप करने होंगे जिनमें एचटीटीपी लोड बैलेंसर की ओर से इस्तेमाल किए जाने वाले बैकएंड संसाधनों के पैटर्न शामिल हों. सबसे पहले हम ऐसे इंस्टेंस टेंप्लेट बनाएंगे जिनमें हर क्षेत्र के लिए वीएम का कॉन्फ़िगरेशन तय किया जाएगा. इसके बाद, हर क्षेत्र के बैकएंड के लिए, हम एक मैनेज किया गया इंस्टेंस ग्रुप बनाएंगे, जो इंस्टेंस टेंप्लेट का रेफ़रंस देता है.

मैनेज किए जा रहे इंस्टेंस ग्रुप, ज़ोनल या रीजनल हो सकते हैं. इस लैब के लिए, हम मैनेज किए जा रहे तीन रीजनल इंस्टेंस ग्रुप बनाएंगे. पहला, us-east1 में, एक us-west1 में, और दूसरा us-central1 में.

इस सेक्शन में, पहले से बनाई गई स्टार्टअप स्क्रिप्ट देखी जा सकती है. इंस्टेंस बनाए जाने पर इसका रेफ़रंस दिया जाएगा. यह स्टार्टअप स्क्रिप्ट इंस्टॉल होती है और वेब सर्वर की क्षमताएं चालू करती है. इनका इस्तेमाल हम किसी वेब ऐप्लिकेशन को सिम्युलेट करने के लिए करेंगे. इस स्क्रिप्ट को बेझिझक एक्सप्लोर करें.

ईस्ट, पश्चिम, और सेंट्रल इंस्टेंस टेंप्लेट बनाएं

सबसे पहले, us-east-1 इंस्टेंस टेंप्लेट बनाना है.

Cloud Shell से

gcloud compute instance-templates create us-east1-template \
   --region=us-east1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-east1-template].
NAME: us-east1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:02:37.511-08:00

अगला चरण, us-west-1 इंस्टेंस टेंप्लेट बनाना है.

Cloud Shell से

gcloud compute instance-templates create us-west1-template \
   --region=us-west1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-west1-template].
NAME: us-west1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:08.577-08:00

अगला चरण, us-central-1 इंस्टेंस टेंप्लेट बनाना है.

Cloud Shell से

gcloud compute instance-templates create us-central1-template \
   --region=us-central1 \
   --network=httplbs \
   --tags=http-server, \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --metadata=startup-script='#! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://169.254.169.254/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2'

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates/us-central1-template].
NAME: us-central1-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2021-11-11T11:03:44.179-08:00

अब यह पुष्टि की जा सकती है कि हमारे इंस्टेंस टेंप्लेट, इस gcloud कमांड की मदद से बनाए गए हैं:

Cloud Shell से

gcloud compute instance-templates list

आउटपुट

NAME                  MACHINE_TYPE   PREEMPTIBLE  CREATION_TIMESTAMP
us-central1-template   n1-standard-1         2021-11-09T09:25:37.263-08:00
us-east1-template      n1-standard-1         2021-11-09T09:24:35.275-08:00
us-west1-template      n1-standard-1         2021-11-09T09:25:08.016-08:00

पूर्व, पश्चिम, और मध्य से मैनेज किए जाने वाले इंस्टेंस ग्रुप बनाना

अब हमें पहले बनाए गए इंस्टेंस टेंप्लेट से, मैनेज किया जा रहा इंस्टेंस ग्रुप बनाना होगा.

Cloud Shell से

gcloud compute instance-groups managed create us-east1-mig \
--base-instance-name=us-east1-mig \
--size=1 \
--template=us-east1-template \
--zone=us-east1-b 

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-east1-b/instanceGroupManagers/us-east1-mig].
NAME: us-east1-mig
LOCATION: us-east1-b
SCOPE: zone
BASE_INSTANCE_NAME: us-east1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-east1-template
AUTOSCALED: no

Cloud Shell से

gcloud compute instance-groups managed create us-west1-mig \
--base-instance-name=us-west1-mig \
--size=1 \
--template=us-west1-template \
--zone=us-west1-a  

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroupManagers/us-west1-mig].
NAME: us-west1-mig
LOCATION: us-west1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-west1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-west1-template
AUTOSCALED: no

Cloud Shell से

gcloud compute instance-groups managed create us-central1-mig \
--base-instance-name=us-central1-mig \
--size=1 \
--template=us-central1-template \
--zone=us-central1-a 

आउटपुट

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-central1-a/instanceGroupManagers/us-central1-mig].
NAME: us-central1-mig
LOCATION: us-central1-a
SCOPE: zone
BASE_INSTANCE_NAME: us-central1-mig
SIZE: 0
TARGET_SIZE: 1
INSTANCE_TEMPLATE: us-central1-template
AUTOSCALED: no

हम पुष्टि कर सकते हैं कि हमारे इंस्टेंस ग्रुप इस gcloud कमांड की मदद से सही तरीके से बनाए गए हैं:

Cloud Shell से

gcloud compute instance-groups list

आउटपुट

NAME                  LOCATION      SCOPE   NETWORK         MANAGED INSTANCES
us-central1-mig       us-central1   zone    httplbs          Yes      1
us-west1-mig          us-west1      zone    httplbs          Yes      1
us-east1-mig          us-east1      zone    httplbs          Yes      1

वेब सर्वर के काम करने के तरीके की पुष्टि करें

हर इंस्टेंस को एक आसान PHP स्क्रिप्ट के साथ Apache वेब-सर्वर चलाने के लिए कॉन्फ़िगर किया गया है, जो रेंडर करता है:

a6ab2f8c3b5d5680.png

यह पक्का करने के लिए कि आपके वेब सर्वर सही तरीके से काम कर रहे हैं, Compute Engine पर जाएं -> VM इंस्टेंस. पक्का करें कि आपके नए इंस्टेंस (जैसे, us-east1-mig-xxx) उनके इंस्टेंस ग्रुप की परिभाषाओं के मुताबिक बनाए गए हों.

अब अपने ब्राउज़र में वेब अनुरोध करें, ताकि यह पक्का किया जा सके कि वेब सर्वर चल रहा है. इसे शुरू होने में कुछ मिनट लग सकते हैं. Compute Engine में मौजूद VM इंस्टेंस पेज पर, अपने इंस्टेंस ग्रुप से बनाया गया इंस्टेंस चुनें और उसके बाहरी (सार्वजनिक) आईपी पर क्लिक करें.

या अपने ब्राउज़र में, http://<IP_Address> पर जाएँ

5. लोड बैलेंसर सेट अप करना

हेल्थ चेक बनाएं

सबसे पहले हमें एक बुनियादी स्वास्थ्य जांच करनी होगी, ताकि यह पक्का किया जा सके कि हमारी सेवाएं ठीक से काम कर रही हैं और सही से काम कर रही हैं. हम प्रॉडक्ट की परफ़ॉर्मेंस की जांच करने के लिए, बुनियादी प्लान बनाएंगे. साथ ही, टूल में ज़रूरत के मुताबिक बदलाव करने के लिए कई और बेहतर टूल उपलब्ध हैं.

Cloud Shell से

gcloud compute health-checks create http http-basic-check \
    --port 80

एक्सटर्नल आईपी पता बुक करें

इस चरण के लिए, आपको दुनिया भर में उपलब्ध स्टैटिक आईपी पते को रिज़र्व करना होगा. इसे बाद में लोड बैलेंसर के साथ अटैच किया जाएगा.

Cloud Shell से

gcloud compute addresses create lb-ipv4-2 \
    --ip-version=IPV4 \
    --global

रिज़र्व किया गया आईपी पता नोट करना न भूलें.

gcloud compute addresses describe lb-ipv4-2 \
    --format="get(address)" \
    --global

बैकएंड सेवाएं बनाएं

अब हमें, मैनेज किए जा रहे हर उस इंस्टेंस ग्रुप के लिए बैकएंड सेवा बनानी होगी जिसे हमने पहले बनाया था. एक पूर्व, पश्चिम, और मध्य के लिए.

पहले से मैनेज किए जा रहे इंस्टेंस ग्रुप के लिए, बैकएंड सेवा बनाई जा रही है.

Cloud Shell से

gcloud beta compute backend-services create east-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

वेस्ट मैनेज किए गए इंस्टेंस ग्रुप के लिए, बैकएंड सेवा बनाई जा रही है.

Cloud Shell से

gcloud beta compute backend-services create west-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

सेंट्रल मैनेज किए जा रहे इंस्टेंस ग्रुप के लिए, बैकएंड सेवा बनाई जा रही है.

Cloud Shell से

gcloud beta compute backend-services create central-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

बैकएंड सेवाओं में एमआईजी जोड़ना

अब जबकि हमने हर ऐप्लिकेशन क्लस्टर के लिए संबंधित बैकएंड सेवाएं बना ली हैं, तो अब हमें हर बैकएंड सेवा में पहले बनाए गए प्रबंधित इंस्टेंस ग्रुप को जोड़ना होगा.

बैकएंड सेवा में East MIG जोड़ें.

Cloud Shell से

gcloud beta compute backend-services add-backend east-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-east1-mig \
    --instance-group-zone=us-east1-b \
    --global

बैकएंड सेवा में वेस्ट एमआईजी जोड़ें.

Cloud Shell से

gcloud beta compute backend-services add-backend west-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-west1-mig \
    --instance-group-zone=us-west1-a \
    --global

बैकएंड सेवा में वेस्ट एमआईजी जोड़ें.

Cloud Shell से

gcloud beta compute backend-services add-backend central-backend-service \
    --balancing-mode='UTILIZATION' \
    --instance-group=us-central1-mig \
    --instance-group-zone=us-central1-a \
    --global

यूआरएल मैप बनाएं

यूआरएल मैप में इस लैब के लिए बेहतर ट्रैफ़िक मैनेजमेंट की सुविधाएं मौजूद होंगी. हमें एक .yaml फ़ाइल बनानी होगी जिसमें कॉन्फ़िगरेशन शामिल होगा. .yaml फ़ाइल में हमने /roundrobbin का प्रीफ़िक्स मैच बनाया है. इसलिए, इन कॉन्फ़िगरेशन का असर सिर्फ़ /roundrobbin से मैच करने वाले ट्रैफ़िक पर पड़ेगा. हमने यह बताया है कि 50% ट्रैफ़िक को east-backend-service और 50% ट्रैफ़िक west-backend-service पर जाना चाहिए. हमने इसके अलावा एक रिस्पॉन्स हेडर वैल्यू भी जोड़ी है:{test} जो सभी रिस्पॉन्स में मौजूद होगी. आखिर में, हमने यह भी जोड़ा है कि सारा ट्रैफ़िक, सेंट्रल-बैकएंड-सर्विस (सेंट्रल बैकएंड-सर्विस) की मदद से शेयर किया जाना चाहिए. ट्रैफ़िक की डुप्लीकेट कॉपी बनाकर यहां सिर्फ़ जांच के लिए भेजी गई है.

इस उदाहरण को अपनी मशीन पर .yaml फ़ाइल के तौर पर सेव करें.

defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
kind: compute #urlMap
name: web-map-http
hostRules:
- hosts:
  - '*'
  pathMatcher: matcher1
pathMatchers:
- defaultService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
  name: matcher1
  routeRules:
  - matchRules:
    - prefixMatch: /roundrobbin
    priority: 2
    headerAction:
        responseHeadersToAdd:
          - headerName: test
            headerValue: value
            replace: True
    routeAction:
        weightedBackendServices:
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/east-backend-service
          weight: 50
        - backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/west-backend-service
          weight: 50
        retryPolicy:
            retryConditions: ['502', '504']
            numRetries: 3
            perTryTimeout:
                seconds: 1
                nanos: 50
        requestMirrorPolicy:
          backendService: https://www.googleapis.com/compute/v1/projects/[project_id]/global/backendServices/central-backend-service

अपनी मशीन से दस्तावेज़ इंपोर्ट करके यूआरएल मैप बनाएं. ध्यान दें कि .yaml फ़ाइल को कहां सेव किया गया है, इस आधार पर सोर्स पाथ अलग-अलग होगा.

Cloud Shell से

gcloud beta compute url-maps import web-map-http \
   --source /Users/[USERNAME]/Documents/Codelab/lbconfig.yaml \
   --global

एचटीटीपी फ़्रंटएंड बनाएं

लोड बैलेंसर बनाने का आखिरी चरण, फ़्रंटएंड बनाना है. यह आपके बनाए गए लोड बैलेंसर यूआरएल मैप से, पहले रिज़र्व किए गए आईपी पते को मैप करेगा.

Cloud Shell से

gcloud beta compute target-http-proxies create http-lb-proxy-adv \
    --url-map=web-map-http

इसके बाद आपको ग्लोबल फ़ॉरवर्ड करने का नियम बनाना होगा, जो पहले रिज़र्व किए गए आईपी पते को एचटीटीपी प्रॉक्सी से मैप करेगा.

Cloud Shell से

gcloud beta compute forwarding-rules create http-content-rule \
    --load-balancing-scheme EXTERNAL_MANAGED \
    --address=lb-ipv4-2 \
    --global \
    --target-http-proxy=http-lb-proxy-adv \
    --ports=80

6. पुष्टि करें कि बेहतर ट्रैफ़िक की सुविधाएं काम कर रही हैं

यह पुष्टि करने के लिए कि लागू की गई ट्रैफ़िक विभाजन सुविधा काम कर रही है, आपको कुछ लोड जनरेट करने होंगे. ऐसा करने के लिए, हम एक नया वीएम बनाएंगे, ताकि लोड को सिम्युलेट किया जा सके.

एसएसएच फ़ायरवॉल की अनुमति देने के लिए नियम बनाएं

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

Cloud Shell से

gcloud compute firewall-rules create fw-allow-ssh \
    --network=httplbs \
    --action=allow \
    --direction=ingress \
    --target-tags=allow-ssh \
    --rules=tcp:22

आउटपुट

NAME          NETWORK  DIRECTION  PRIORITY  ALLOW   DENY  DISABLED
fw-allow-ssh  httplbs  INGRESS    1000      tcp:22        False

Sej-vm बनाएं

अब आपको seg-vm बनाना है, जिसका इस्तेमाल लोड जनरेट करने के लिए करना है

Cloud Shell से

gcloud compute instances create siege-vm \
    --network=httplbs \
    --zone=us-east4-c \
    --machine-type=e2-medium \
    --tags=allow-ssh,http-server \
    --metadata=startup-script='sudo apt-get -y install siege'

आउटपुट

NAME     ZONE        MACHINE_TYPE INTERNAL_IP  EXTERNAL_IP    STATUS
siege-vm us-east4-c  e2-medium    10.150.0.3   34.85.218.119  RUNNING

इसके बाद, अपनी बनाई गई वीएम में एसएसएच की सुविधा इस्तेमाल की जा सकती है. इसके बनने के बाद, टर्मिनल लॉन्च करने और कनेक्ट करने के लिए, एसएसएच पर क्लिक करें.

कनेक्ट होने के बाद, लोड जनरेट करने के लिए नीचे दिया गया कमांड चलाएं. उस आईपी पते का इस्तेमाल करें जिसे आपने एक्सटर्नल एचटीटीपी लोड बैलेंसर के लिए पहले बुक किया था.

Cloud Shell से

siege -c 250 http://$lb-ipv4-2/roundrobbin

आउटपुट

New configuration template added to /home/cloudcurriculumdeveloper/.siege
Run siege -C to view the current settings in that file
[alert] Zip encoding disabled; siege requires zlib support to enable it: No such file or directory
** SIEGE 4.0.2
** Preparing 250 concurrent users for battle.
The server is now under siege...

लोड डिस्ट्रिब्यूशन की जांच करें

अब सीज कैंपेन चलाकर, यह जांच की जा सकती है कि ट्रैफ़िक को पूर्व और पश्चिम की ओर से मैनेज किए जा रहे इंस्टेंस ग्रुप के बीच बराबर बांटा जा रहा है या नहीं. साथ ही, यह भी देखा जा सकता है कि ट्रैफ़िक मिररिंग काम कर रही है या नहीं और ट्रैफ़िक, मैनेज किए जा रहे सेंट्रल इंस्टेंस ग्रुप को भेजा जा रहा है या नहीं.

Cloud Console में, नेविगेशन मेन्यू में, नेटवर्क सेवाएं > लोड बैलेंसिंग. बैकएंड पर क्लिक करें. नीचे दिए गए स्क्रीनशॉट में दिखाए गए 'बेहतर मेन्यू' पर क्लिक करें.

b40b0a9f0373f907.png

बैकएंड सेवाएं टैब पर जाएं और east-backend-service चुनें

6972d9d311ed2b5c.png

आपको इस MIG के बीच, रीयल टाइम में ट्रैफ़िक का बंटवारा दिखेगा. दर पर ध्यान दें, आप कुछ ही पल में इसकी तुलना वेस्ट-बैकएंड-सेवा से कर सकते हैं.

b1301b304c461069.png

इसी तरह west-backend-service पर जाएं. आपको इस सेवा पर आने वाला ट्रैफ़िक भी दिखेगा. इसकी दर वही होनी चाहिए जो आपने east-backend-service में देखी थी, क्योंकि आपने ट्रैफ़िक के 50/50 राउंड रॉबिन स्प्लिट को कॉन्फ़िगर किया था.

1674c04b73ea2e00.png

यह पता करने के लिए कि ट्रैफ़िक डुप्लीकेट करने की आपकी बनाई गई नीति काम कर रही है या नहीं, आपको यह जांचना होगा कि सेंट्रल-बैकएंड-सेवा से मैनेज किए जा रहे इंस्टेंस ग्रुप के इस्तेमाल की जांच की जा रही है या नहीं. इसके लिए, कंप्यूट, कंप्यूट इंजन, इंस्टेंस ग्रुप पर जाएं, और us-central1-mig चुनें. इसके बाद, मॉनिटरिंग टैब पर जाएं.

4cf569efb3ba3c2b.png

आपको चार्ट में जानकारी अपने-आप भर जाएगी. इससे पता चलेगा कि मैनेज किए जा रहे इस इंस्टेंस ग्रुप में ट्रैफ़िक का डुप्लीकेट वर्शन बनाया गया है.

गच्चा देना बंद करें

अब जब आपने यह दिखा दिया है कि ट्रैफ़िक को बांटने का बेहतर तरीका काम कर रहा है, तो अब घेराबंदी को रोकने का समय आ गया है. ऐसा करने के लिए, siege-vm के एसएसएच टर्मिनल पर वापस जाएं और घेराबंदी को रोकने के लिए CTRL+C दबाएं.

जवाब देने का हेडर भेजे जाने की पुष्टि करना

स्टोरेज खाली करने से पहले, इस बात की तुरंत पुष्टि की जा सकती है कि एचटीटीपी लोड बैलेंसर, सही रिस्पॉन्स हेडर भेज रहा है या नहीं. आपने इसे कॉन्टेंट वैल्यू के साथ हेडर टेस्ट भेजने के लिए कॉन्फ़िगर किया था. Cloud Shell से कर्ल कमांड चलाने से आपको उम्मीद के मुताबिक रिस्पॉन्स मिलेगा.

Cloud Shell से

curl -svo /dev/null http://lb-ipv4-2/roundrobbin

आउटपुट

*   Trying lb-ipv4-2..
* TCP_NODELAY set
* Connected to  lb-ipv4-2 ( lb-ipv4-2) port 80 (#0)
> GET /roundrobbin HTTP/1.1
> Host:  lb-ipv4-2
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< date: Wed, 10 Nov 2021 17:05:27 GMT
< server: envoy
< Content-Length: 273
< content-type: text/html; charset=iso-8859-1
< via: 1.1 google
< test: value
<
{ [273 bytes data]
* Connection #0 to host 34.149.2.26 left intact
* Closing connection 0

7. लैब क्लीन अप

अब जब हमने लैब एनवायरमेंट को पूरा कर लिया है, तो अब इसे और बेहतर बनाने का समय आ गया है. टेस्ट एनवायरमेंट को मिटाने के लिए, कृपया इन निर्देशों का पालन करें.

Cloud Shell से

gcloud compute instances delete siege-vm

gcloud alpha compute forwarding-rules delete http-content-rule --global
gcloud alpha compute target-http-proxies delete http-lb-proxy-adv
gcloud alpha compute url-maps delete web-map-http
gcloud alpha compute backend-services delete east-backend-service --global
gcloud alpha compute backend-services delete west-backend-service --global
gcloud alpha compute backend-services delete central-backend-service --global

gcloud compute addresses delete lb-ipv4-2 --global
gcloud compute health-checks delete http-basic-check 

gcloud compute instance-groups managed delete us-east1-mig --zone us-east1-b
gcloud compute instance-groups managed delete us-west1-mig --zone us-west1-a
gcloud compute instance-groups managed delete us-central1-mig --zone us-central1-a

gcloud compute instance-templates delete "us-east1-template" 
gcloud compute instance-templates delete "us-west1-template" 
gcloud compute instance-templates delete "us-central1-template" 

gcloud compute firewall-rules delete httplb-allow-http-rule
gcloud compute firewall-rules delete fw-allow-ssh

gcloud compute networks delete httplbs 

8. बधाई हो!

आपने बेहतर ट्रैफ़िक मैनेजमेंट (Envoy) कोडलैब के साथ External HTTPs LB पूरा कर लिया है!

इसमें हमने इन विषयों के बारे में बताया

  • मैनेज किए जा रहे इंस्टेंस ग्रुप और इससे जुड़े VPC और फ़ायरवॉल के नियम सेट अप करने का तरीका
  • नए लोड बैलेंसर की, ट्रैफ़िक मैनेजमेंट की ऐडवांस सुविधाओं को इस्तेमाल करने का तरीका
  • इस बात की पुष्टि करने का तरीका कि ट्रैफ़िक मैनेज करने की बेहतर सुविधाएं उम्मीद के मुताबिक काम कर रही हैं.

अगले चरण

  • यूआरएल रीराइटिंग, सीओआरएस हेडर जोड़ने जैसी कुछ अन्य ऐडवांस रूटिंग सुविधाएं आज़माएं ( लिंक)