بروتوكول HTTPs LB الخارجي مع الدرس التطبيقي حول الترميز الخاص بإدارة عدد الزيارات (Envoy)

1. مقدمة

مرحبًا بك في الدرس التطبيقي حول الترميز External HTTPs LB مع Advanced Traffic Management (Envoy)

يحتوي أحدث إصدار من جهاز موازنة الحمل الخارجي HTTP(S) مع الإدارة المتقدّمة لعدد الزيارات على جميع ميزات جهاز موازنة الحمل العالمي لبروتوكول HTTP(S) الخارجي الكلاسيكي، بالإضافة إلى قائمة متزايدة من إمكانات الإدارة المتقدّمة لعدد الزيارات. بعض هذه الإمكانات جديدة بالنسبة إلى أجهزة موازنة الحمل، بينما يوفّر بعضها ميزات محسَّنة للإمكانات الحالية. تشمل القائمة الجزئية لهذه الإمكانات ما يلي:

  • تقسيم الزيارات المرجَّح
  • طلب النسخ المطابق
  • اكتشاف القيم الاستثنائية
  • طلب إعادة المحاولة
  • حقن الصدأ
  • خيارات إضافية لتقارب الجلسة الخلفية
  • خيارات إضافية لتحويل العنوان
  • مشاركة الموارد المتعدّدة المصادر (CORS)
  • خوارزميات جديدة لموازنة الحمل

المعلومات التي ستطّلع عليها

  • كيفية إعداد مجموعة مثيل مُدار وقواعد جدار الحماية وسحابة VPC المرتبطة
  • كيفية استخدام ميزات إدارة الزيارات المتقدّمة في جهاز موازنة الحمل الجديد
  • كيفية التحقّق من أنّ الميزات المتقدّمة لإدارة عدد الزيارات تعمل على النحو المطلوب

المتطلبات

  • الشبكات الأساسية والمعرفة ببروتوكول HTTP
  • معرفة سطر أوامر Unix/Linux الأساسي

طوبولوجيا مختبر الترميز حالة الاستخدام

dd8bd5e8e1341878.png

الشكل 1 - طوبولوجيا توجيه جهاز موازنة حمل HTTP

خلال هذا التمرين المعملي، ستُعِدّ ثلاث مجموعات مثيلات مُدارة في الشرق والغرب والوسط. ستنشئ جهازًا خارجيًا لموازنة حمل https الخارجي. سيستخدم جهاز موازنة الحمل العديد من الميزات من قائمة القدرات المتقدمة التي يعتمدها جهاز موازنة الحمل المستند إلى المرسِل. بعد النشر، سيتم إنشاء بعض عمليات التحميل التي تمت محاكاتها والتحقق من أنّ الإعدادات التي ضبطتها تعمل بشكل مناسب.

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

قبل البدء

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك.

gcloud config list project

gcloud config set project [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، ستنشئ الآن قواعد جدار حماية. سيتم استخدام قاعدة جدار الحماية للسماح لجميع عناوين IP بالدخول إلى عنوان IP الخارجي لموقع الويب للتطبيق الاختباري على المنفذ 80 لزيارات http.

من 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. إعداد مجموعات الأجهزة الافتراضية المُدارة

يجب إعداد "المجموعات المُدارة للمثيل" التي تتضمّن أنماط موارد الخلفية التي يستخدمها "جهاز موازنة حمل HTTP". سننشئ أولاً نماذج Instance Template التي تحدد إعدادات الأجهزة الافتراضية التي سيتم إنشاؤها لكل منطقة. بعد ذلك، بالنسبة إلى خلفية في كل منطقة، سننشئ مجموعة مثيلات مُدارة تشير إلى نموذج مثيل.

يمكن أن تكون المجموعات الافتراضية المُدارة ضمن نطاق مناطق أو مناطق معيَّنة. خلال هذا التمرين المعملي، سننشئ ثلاث مجموعات إقليمية للمثيلات المُدارة، مجموعة في 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

التحقّق من وظائف خادم الويب

يتم تكوين كل مثيل لتشغيل خادم ويب Apache باستخدام نص برمجي بسيط بلغة PHP يعرض ما يلي:

c87ca81d3125ac61.png

للتأكّد من أنّ خوادم الويب تعمل بشكل صحيح، انتقِل إلى Compute Engine -> الأجهزة الافتراضية تأكَّد من أنّه تم إنشاء المثيلات الجديدة (مثل us-east1-mig-xxx) وفقًا لتعريفات مجموعات المثيل.

والآن، قدِّم طلب ويب إليه في متصفحك للتأكد من تشغيل خادم الويب (قد يستغرق بدء ذلك دقيقة واحدة). في صفحة مثيلات الأجهزة الافتراضية ضمن Compute Engine، اختَر المثيل الذي تم إنشاؤه من خلال مجموعة المثيلات الخاصة بك وانقر على عنوان IP الخارجي (العام) الخاص به.

يمكنك بدلاً من ذلك الانتقال في المتصفح إلى http://<IP_Address>.

5- إعداد جهاز موازنة الحمل

إنشاء ميزة "التحقّق من الصحة"

علينا أولاً إجراء فحص صحي أساسي للتأكّد من أنّ خدماتنا تعمل بشكل صحيح. سنُنشئ فحصًا أساسيًا للصحة، مع توفّر العديد من التخصيصات المتقدّمة.

من Cloud Shell

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

حجز عنوان IP الخارجي

لتنفيذ هذه الخطوة، ستحتاج إلى حجز عنوان IP ثابت متاح عالميًا وسيتم إرفاقه لاحقًا بجهاز موازنة الحمل.

من Cloud Shell

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

تأكَّد من تدوين عنوان IP الذي تم حجزه.

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

إنشاء خدمات الخلفية

يجب علينا الآن إنشاء خدمة خلفية لكل مجموعة من مجموعات المثيلات المُدارة التي أنشأناها سابقًا. واحدة للشرق والغرب والوسط.

إنشاء خدمة خلفية لمجموعة المثيلات المُدارة في الشرق.

من Cloud Shell

gcloud 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 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 compute backend-services create central-backend-service \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global

إضافة MIG إلى خدمات الخلفية

الآن وبعد أن أنشأنا خدمات الخلفية المناسبة لكل مجموعة تطبيقات، علينا الآن إضافة المجموعات الافتراضية المُدارة التي أنشأناها سابقًا إلى كل خدمة خلفية.

إضافة East MIG إلى خدمة الخلفية

من Cloud Shell

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

إضافة West MIG إلى خدمة الخلفية

من Cloud Shell

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

إضافة MIG المركزية إلى خدمة الخلفية.

من Cloud Shell

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

إنشاء خريطة عناوين URL

خريطة عنوان URL هي المكان الذي ستظهر فيه ميزات إدارة حركة الزيارات المتقدمة لهذا التمرين المعملي. يجب أن ننشئ ملف .yaml يحتوي على الإعدادات. لقد أنشأنا في ملف yaml .بادئة مطابقة على /roundrobbin، لذا ستتأثر فقط حركة المرور المطابقة /roundrobbin بهذه الإعدادات. لقد حدّدنا أنّ 50% من عدد الزيارات يجب أن توجّه إلى خدمة الخلفية الشرقية و50% من الزيارات إلى الواجهة الغربية. لقد أضفنا أيضًا قيمة عنوان الاستجابة:{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

يمكنك إنشاء خريطة عنوان URL لاستيراد المستند من جهازك. يُرجى العلم أنّ مسار المصدر سيكون مختلفًا بناءً على المكان الذي تحفظ فيه ملف .yaml.

من Cloud Shell

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

إنشاء واجهة HTTP

الخطوة الأخيرة في إنشاء جهاز موازنة الحمل هي إنشاء الواجهة الأمامية. سيؤدي هذا الإجراء إلى ربط عنوان IP الذي حجزته سابقًا بخريطة عنوان URL لجهاز موازنة الحمل التي أنشأتها.

من Cloud Shell

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

عليك بعد ذلك إنشاء قاعدة إعادة توجيه عمومية تربط عنوان IP المحجوز مسبقًا لخادم وكيل HTTP.

من Cloud Shell

gcloud 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- التحقق من عمل الميزات المتقدمة لحركة المرور

للتأكّد من أنّ ميزة تقسيم الزيارات التي تمّ تنفيذها تعمل بشكلٍ سليم، عليك إنشاء بعض التحميل. لإجراء ذلك، سننشئ جهازًا افتراضيًا جديدًا لمحاكاة التحميل.

إنشاء قاعدة "السماح بجدار حماية SSH"

لإدخال بروتوكول النقل الآمن في الجهاز الافتراضي الذي سننشئ حركة عليه، عليك أولاً إنشاء قاعدة جدار حماية تتيح حركة مرور بروتوكول النقل الآمن إلى الجهاز الافتراضي.

من 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

إنشاء Siege-vm

ستقوم الآن بإنشاء siege-vm الذي ستستخدمه لإنشاء Load

من 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

بعد ذلك، يمكنك استخدام بروتوكول النقل الآمن (SSH) في الجهاز الافتراضي الذي أنشأته. بعد إنشائها، انقر على SSH لتشغيل محطة دفع والاتصال.

بعد اكتمال الاتصال، شغِّل الأمر التالي لإنشاء حمولة. استخدِم عنوان IP الذي حجزته سابقًا لجهاز موازنة حمل http الخارجي.

من 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...

التحقّق من توزيع التحميل

والآن بعد تشغيل Siege، حان الوقت للتحقق من توزيع حركة البيانات بالتساوي على مجموعات المثيلات المُدارة في الشرق والغرب، بالإضافة إلى ذلك يمكنك التحقق من عمل النسخ المطابق لحركة المرور وأنه يتم إرسال الزيارات إلى مجموعة المثيلات المُدارة المركزية.

في Cloud Console، ضمن قائمة "التنقل"، انقر على "خدمات الشبكة" > توزيع الحمل اختَر web-map-http لجهاز موازنة الحمل. انتقل إلى علامة التبويب "المراقبة" وستتمكن من رؤية الرسم البياني التالي.

f4d6803db44be253.png

ستتمكن من رؤية تقسيم حركة المرور في الوقت الفعلي على MIG. يتم تقسيم عدد الزيارات بالتساوي لأنك ضبطت تقسيمًا مستديرًا بنسبة 50/50.

للتأكّد من عمل سياسة النسخ المطابق للزيارات التي أنشأتها، عليك التحقّق من استخدام مجموعة المثيلات المُدارة للخدمة الخلفية المركزية. للقيام بذلك، انتقل إلى الحوسبة، ومحرك الحوسبة، ومجموعات المثيلات، وحدد us-central1-mig. بعد ذلك، انتقِل إلى علامة التبويب "المراقبة".

cf25e44d511529e7.png

ستظهر لك رسوم بيانية مُكتمِلة لتوضيح أنّ الزيارات قد تم عكسها إلى مجموعة المثيلات المُدارة هذه.

إيقاف الحصار

الآن بعد أن أوضحت نجاح العملية المتقدمة لتقسيم الزيارات، حان الوقت لإيقاف الحصار. لإجراء ذلك، ارجع إلى محطة بروتوكول النقل الآمن في siege-vm واضغط على CTRL+C لإيقاف الحصار.

التحقُّق من إرسال عنوان الاستجابة

قبل التنظيف، يمكنك التحقق بسرعة من أن جهاز موازنة حمل http يرسل رأس الاستجابة المناسب. وقد تم إعداده لإرسال اختبار العنوان مع قيمة المحتوى. سيؤدي تشغيل أمر curl من 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 --zone=us-east4-c

gcloud compute forwarding-rules delete http-content-rule --global
gcloud compute target-http-proxies delete http-lb-proxy-adv
gcloud compute url-maps delete web-map-http
gcloud compute backend-services delete east-backend-service --global
gcloud compute backend-services delete west-backend-service --global
gcloud 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. تهانينا!

لقد أكملت الدرس التطبيقي حول الترميز External HTTPs LB مع "إدارة عدد الزيارات المتقدمة" (Envoy).

النقاط التي تناولناها

  • كيفية إعداد مجموعة مثيل مُدار وقواعد جدار الحماية وسحابة VPC المرتبطة
  • كيفية استخدام ميزات إدارة الزيارات المتقدّمة في جهاز موازنة الحمل الجديد
  • كيفية التحقّق من أنّ الميزات المتقدّمة لإدارة عدد الزيارات تعمل على النحو المطلوب

الخطوات التالية

  • تجربة بعض ميزات التوجيه المتقدمة الأخرى، مثل إعادة كتابة عناوين URL وإضافة عناوين CORS وغيرها ( رابط)