استخدام جهاز موازنة الحمل المختلَط باستخدام بروتوكولات HTTP الخارجية للوصول إلى مجموعة نقاط نهاية في الشبكة

1. مقدمة

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

3312e69c63b02f73.png

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

ما ستتعلمه

  • إنشاء شبكة VPC مخصّصة
  • إنشاء جهازَين افتراضيَين (VM) يتم استخدامهما كمجموعة نقاط نهاية للشبكة (NEG)
  • إنشاء جهاز موازنة حمل مختلط وخدمة خلفية وعمليات التحقّق من الصحة المرتبطة بهما
  • إنشاء قاعدة جدار حماية تتيح الوصول إلى جهاز موازنة الحمل
  • سيتم إنشاء Cloud Router وNAT للسماح بتحديث الحِزم من الإنترنت
  • التحقّق من إمكانية الوصول إلى مجموعة نقاط نهاية الشبكة

المتطلبات

  • معرفة أجهزة موازنة الحمل

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا تتحمّل رسومًا تتجاوز هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

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

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

bce75f34b2c53987.png

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

f6ef2b5f13479f3a.png

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

2. قبل البدء

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID
echo $projectid

3- إنشاء شبكة VPC جديدة في الوضع المخصّص

في هذه المهمة، ستنشئ شبكة سحابة إلكترونية خاصة افتراضية (VPC)، وهي أساس الشبكة.

شبكة VPC

من Cloud Shell

gcloud compute networks create hybrid-network-lb --subnet-mode custom

إنشاء شبكة فرعية

من Cloud Shell

gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1

إنشاء مثيل Cloud NAT

على الرغم من أنّ الاتصال بالإنترنت ليس شرطًا أساسيًا للربط بين الشبكات، إلا أنّ الجهاز الظاهري يتطلّب الاتصال بالإنترنت لتنزيل التطبيقات والتحديثات.

في هذه المهمة، ستنشئ مثيلاً من Cloud Router وNAT يتيح إمكانية الاتصال بالإنترنت لأجهزة VM.

إنشاء Cloud Router

من Cloud Shell

gcloud compute routers create crnat --network hybrid-network-lb --region us-west1

إنشاء Cloud NAT

من Cloud Shell

gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1

4. إنشاء مثيلَي جهازَين افتراضيَّين

في هذه المهمة، ستنشئ مثيلَي جهاز افتراضي يعملان بنظام Apache، وسيصبح هذان المثيلان لاحقًا مجموعة نقاط نهاية الشبكة (NEG).

من Cloud Shell، أنشئ المثيل الأول المحلي، on-prem-neg-1

gcloud compute instances create on-prem-neg-1 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

من Cloud Shell، أنشئ المثيل الأول المحلي، on-prem-neg-2

gcloud compute instances create on-prem-neg-2 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

5- إنشاء مجموعة NEG تحتوي على نقطة نهاية محلية

أولاً، أنشئ مجموعتَي NEG باسم on-prem-neg-1 وon-prem-neg-2. ستحدّد أيضًا أنّ موازن التحميل يجب أن يراعي أنّ نقاط النهاية هذه تقع في منطقة us-west1-a على Google Cloud لأغراض التوجيه وموازنة التحميل. ننصح بأن تتطابق المنطقة التي تم ضبطها مع أي منطقة مرتبطة بمنطقة "ملحق Interconnect" أو "بوابة VPN" لإجراء قياسات موازنة التحميل المستندة إلى القرب والمستخدَمة لموازنة التحميل.

أنشئ on-prem-neg-1 من Cloud Shell

gcloud compute network-endpoint-groups create on-prem-neg-1 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

أنشئ on-prem-neg-2 من Cloud Shell

gcloud compute network-endpoint-groups create on-prem-neg-2 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

في درس تطبيقي حول الترميز، تكون مجموعة نقاط نهاية الشبكة عبارة عن آلة افتراضية من Google Compute Engine تعمل بنظام Apache في Google Cloud Platform. بدلاً من ذلك، يمكنك تحديد نقطة نهاية محلية أو نقطة نهاية على الإنترنت كنقطة نهاية الشبكة.

تحديد عناوين IP الخاصة بـ GCE من Cloud Shell

gcloud compute instances list | grep -i on-prem

اربط مجموعة نقاط نهاية الشبكة بعنوان IP الخاص بمثيل GCE الذي تم تحديده سابقًا في الخطوة السابقة، لكل مجموعة نقاط نهاية شبكة، on-prem-neg-1 & on-prem-neg-2.

من Cloud Shell associate on-prem-neg-1، عدِّل x.x.x.x باستخدام عنوان IP الذي حدّدته

gcloud compute network-endpoint-groups update on-prem-neg-1 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

من Cloud Shell، اربط on-prem-neg-2، وعدِّل x.x.x.x باستخدام عنوان IP الذي حدّدته

gcloud compute network-endpoint-groups update on-prem-neg-2 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

6. إنشاء فحص السلامة عبر http وخدمة الخلفية وجدار الحماية

في هذه الخطوة، ستنشئ خدمة خلفية عامة باسم on-prem-backend-service. تحدّد خدمة الخلفية هذه الطريقة التي سترسل بها "طبقة البيانات" عدد الزيارات إلى مجموعة NEG.

أولاً، أنشئ عملية تحقّق من الصحة باسم on-prem-health-check لمراقبة سلامة أي نقاط نهاية تابعة لمجموعة NEG هذه (أي نقطة النهاية المحلية).

من Cloud Shell

gcloud compute health-checks create http on-prem-health-check

أنشئ خدمة خلفية باسم on-prem-backend-service واربطها بالتحقق من الصحة.

من Cloud Shell

gcloud compute backend-services create on-prem-backend-service \
    --global \
    --load-balancing-scheme=EXTERNAL \
    --health-checks on-prem-health-check

يُجري جهاز موازنة الحمل الخارجي HTTP(S) والخادم الخلفي عمليات فحص سلامة مصدرها النطاقات الفرعية 35.191.0.0/16 و130.211.0.0/22، لذا يجب توفير قاعدة جدار حماية للسماح بتوجيه جهاز موازنة الحمل إلى الخادم الخلفي.

من Cloud Shell

gcloud compute firewall-rules create fw-allow-health-check \
    --network=hybrid-network-lb \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

7. ربط مجموعة NEG بخدمة الخلفية

أضِف مجموعة NEG التي تحمل الاسم on-prem-neg-1 إلى خدمة الخلفية هذه

من Cloud Shell

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-1 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

أضِف مجموعة NEG التي تحمل الاسم on-prem-neg-2 إلى خدمة الخلفية هذه

من Cloud Shell

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-2 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

حجز عنوان IP ثابت من النوع IPv4 يُستخدَم للوصول إلى نقطة نهاية الشبكة

من Cloud Shell

gcloud compute addresses create hybrid-lb-ip --project=$projectid --global

انتهينا من إعدادات سطر الأوامر. لنُكمل عملية الضبط من Cloud Console.

8. إنشاء جهاز موازنة حمل HTTP خارجي وربط خدمة الخلفية به

من وحدة تحكّم السحابة الإلكترونية، انتقِل إلى "موازنة الحمل" واختَر "إنشاء جهاز موازنة الحمل".

تحديد موازنة الحمل لبروتوكول HTTP(S) والنقر على "بدء الإعداد"

70ccd168957e89d9.png

اختَر "من الإنترنت إلى الأجهزة الافتراضية" (From Internet to my VMs) كما هو موضّح في لقطة الشاشة أدناه التي تتيح الوصول العام إلى جهازك الافتراضي.

a55cd31dbeadfecc.png

قدِّم "xlb" كاسم لموازن التحميل واختَر خدمة الخلفية التي تم إنشاؤها سابقًا "on-prem-backend-service" ثم "حسنًا" وفقًا للقطة الشاشة المقدَّمة

f1589df43bf9e3e8.png

اختَر "ضبط الواجهة الأمامية" (Frontend configuration)، وعدِّل الاسم إلى "xlb-fe"، واختَر عنوان IPv4 الثابت الذي تم إنشاؤه سابقًا، وتأكَّد من مطابقة لقطة الشاشة المقدَّمة b47cd48c7c1ccfc3.png

انقر على "المراجعة والإنهاء" للتأكّد من مطابقة لقطة الشاشة المقدَّمة، ثم انقر على "إنشاء".

bfa39f7dc3ad91e1.png

التحقّق من صحة البيانات في الخلفية

من وحدة تحكّم السحابة الإلكترونية، تأكَّد من أنّ الخلفية "xlb" سليمة، أي باللون الأخضر كما هو موضّح في لقطة الشاشة المقدَّمة.

131bbfc955d6166c.png

9- التأكّد من إمكانية الوصول إلى مجموعة NEG من الإنترنت

تذكَّر أنّ عنوان IP الثابت الخارجي المستخدَم أثناء إنشاء أداة موازنة الحمل هو الآن عنوان IP للواجهة الأمامية لنقاط نهاية الشبكة. لننفّذ عملية التحقّق من صحة عنوان IP قبل تنفيذ الاختبار النهائي.

من Cloud Shell

gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:

الناتج (سيختلف عنوان IP الخاص بك)

الناتج من cloudshell

$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
IPAddress: 34.96.103.132

باستخدام عنوان IP للواجهة الأمامية لموازنة التحميل العامة، يمكنك الوصول إلى الخلفية لنقطة نهاية الشبكة. يُرجى العِلم أنّ نقطة النهاية في الدرس العملي هي مثيل GCE، ولكن يمكنك استخدامها مع نقاط نهاية محلية مثلاً.

من محطة العمل المحلية، شغِّل نافذة طرفية ونفِّذ طلب curl إلى عنوان IP لموازنة التحميل

من محطة العمل، نفِّذ أمر curl على عنوان IP الخاص بالواجهة الأمامية. لاحظ الرمز 200 OK وتفاصيل الصفحة التي تتألف من اسم مثيل neg والمنطقة.

myworkstation$ curl -v 34.96.103.132

* Trying 34.96.103.132...

* TCP_NODELAY set

* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)

> GET / HTTP/1.1

> Host: 34.96.103.132

> User-Agent: curl/7.64.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Tue, 10 Aug 2021 01:21:54 GMT

< Server: Apache/2.4.25 (Debian)

< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT

< ETag: "24-5c929ae7384f4"

< Accept-Ranges: bytes

< Content-Length: 36

< Content-Type: text/html

< Via: 1.1 google

<

Page on on-prem-neg-2 in us-west1-a

* Connection #0 to host 34.96.103.132 left intact

* Closing connection 0

تهانينا، لقد نجحت في نشر موازن تحميل مختلط من الطبقة 7 باستخدام مجموعات NEGs

تهانينا على إكمال هذا الدرس العملي.

المواضيع التي تناولناها

  • إنشاء شبكة VPC مخصّصة
  • إنشاء جهازَين افتراضيَين (VM) يتم استخدامهما كمجموعة نقاط نهاية للشبكة (NEG)
  • إنشاء جهاز موازنة حمل مختلط وخدمة خلفية وعمليات التحقّق من الصحة المرتبطة بهما
  • إنشاء قاعدة جدار حماية تتيح الوصول إلى جهاز موازنة الحمل
  • التحقّق من إمكانية الوصول إلى مجموعة نقاط نهاية الشبكة

10. خطوات التنظيف

من واجهة مستخدم Cloud Console، حدِّد جهاز موازنة الحمل "xlb" وضع علامة بجانبه، ثم اختَر "حذف" من خلال "خدمات الشبكة" → "موازنة الحمل". بعد الاختيار، ضَع علامة في المربّع بجانب "خدمة الخلفية المحلية" و"فحص الصحة المحلي"، ثم انقر على "حذف".

53d7463fe354fe66.png

من واجهة مستخدم Cloud Console، انتقِل إلى Compute Engine → مجموعات نقاط نهاية للشبكة. بعد التحديد، ضَع علامة في المربّع بجانب on-prem-neg-1 وon-prem-neg-2، ثم انقر على "حذف".

4d8f04264b44d03c.png

من Cloud Shell، احذف مكونات المختبر

gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet

gcloud compute routers delete crnat  --region us-west1 --quiet

gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet

gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet

gcloud compute firewall-rules delete fw-allow-health-check --quiet

gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet

gcloud compute networks delete hybrid-network-lb --quiet

gcloud compute addresses delete hybrid-lb-ip --global --quiet