درس تطبيقي حول الترميز بشأن قابلية التغيير في Private Service Connect

1. مقدمة

‫Private Service Connect هي إحدى إمكانات شبكات Google Cloud التي تتيح للمستهلكين الوصول إلى الخدمات المُدارة بشكل خاص من داخل شبكة السحابة الإلكترونية الافتراضية الخاصة (VPC). وبالمثل، يتيح لمقدّمي الخدمات المُدارة استضافة هذه الخدمات في شبكات VPC منفصلة وتقديم اتصال خاص للمستهلكين.

حتى الآن، بعد إتاحة خدمات PSC من خلال ربط الخدمة، لم يكن من الممكن إجراء تغييرات على موازنات تحميل الخدمة بدون إزالة ربط الخدمة وتعطيل اتصال نقطة نهاية PSC الخاصة بالمستهلك. من خلال إتاحة قابلية تغيّر PSC، يمكن للمنتجين تعديل جهاز موازنة الحمل مع الحفاظ على اتصال نقطة نهاية PSC. يوفّر الحفاظ على اتصال نقطة نهاية PSC بملحق الخدمة أثناء تغيير موازن التحميل ميزة عدم الحاجة إلى اتّخاذ أي إجراء من جهة المستهلك.

في الوقت الحالي، ستتيح إمكانية تغيير PSC ما يلي:

  • نقل البيانات إلى قاعدة إعادة توجيه لجهاز موازنة الحمل من النوع نفسه (مثلاً Network Passthrough to Network Passthrough)
  • نقل البيانات إلى قاعدة إعادة توجيه لجهاز موازنة الحمل من نوع مختلف (مثلاً نقطة مرور الشبكة إلى "موازن التطبيقات")

لا تتيح إمكانية التغيير في PSC تعديل قاعدة إعادة التوجيه الحالية.

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

أهداف الدورة التعليمية

  • أنشِئ خدمة ويب بسيطة من Apache يتم عرضها كخدمة منتِجة في PSC.
  • أنشئ نقطة نهاية PSC.
  • أنشئ منطقة خاصة في Cloud DNS لمكالمات خدمة المستهلك.
  • عدِّل قاعدة إعادة التوجيه المرتبطة بمرفق الخدمة باستخدام ميزة "قابلية التغيير في Private Service Connect".

المتطلبات

  • مشروع على السحابة الإلكترونية على Google Cloud يتضمّن أذونات المالك
  • معرفة أساسية بشبكات Google Cloud

2. بيئة الاختبار

في العادة، يعمل المنتجون والمستهلكون في مشاريع مختلفة. لتبسيط الأمور، سننفّذ جميع الإجراءات في المشروع نفسه، ولكن سيتم تصنيف كل خطوة على أنّها مشروع "منتج" أو "مستهلك" في حال فضّل المستخدم العمل في مشاريع مختلفة.

في هذا المختبر، سنبدأ بإنشاء شبكة VPC خاصة بمقدّم الخدمة تتضمّن ثلاث شبكات فرعية، إحداها لاستضافة خدمة مقدّم الخدمة والجهاز الافتراضي التجريبي، والأخرى لقواعد إعادة التوجيه الخاصة بموازنة التحميل، وشبكة فرعية لترجمة عنوان الشبكة (NAT) في PSC. سنحتاج إلى Cloud Router وCloud NAT لضمان إمكانية الوصول إلى الإنترنت من أجل تنزيل حِزم Linux. سنعرض خدمة Apache، التي تم إعدادها من خلال مجموعة مثيلات غير مُدارة، من خلال برنامج موازنة حمل إقليمي داخلي من نوع "نقل حركة مرور الشبكة"، وسنربط قاعدة إعادة التوجيه بمرفق خدمة.

من جهة المستهلك، سننشئ شبكة VPC للمستهلك مع شبكة فرعية واحدة لاستضافة نقطة نهاية PSC وجهاز افتراضي لعميل تجريبي. سنضبط منطقة خاصة في Cloud DNS للوصول إلى الخدمة من خلال اسم مضيف.

لعرض ميزة "قابلية التغيير في PSC"، سنضيف على جهة المنتج شبكتَين فرعيتَين إضافيتَين، إحداهما لاستضافة الجهاز الافتراضي للخدمة الجديدة، والأخرى للشبكة الفرعية الخاصة بموازنة الحمل التي تعمل كوكيل فقط. سننشئ جهازًا افتراضيًا جديدًا يستضيف خادم ويب Apache، وسيتم إعداده مرة أخرى من خلال مجموعة مثيلات غير مُدارة، وسنعرّضه من خلال موازن تحميل تطبيقات إقليمية داخلية جديدة. سنعدّل مرفق الخدمة للإشارة إلى قاعدة إعادة التوجيه الجديدة، وسنتأكّد من أنّ الاتصال من جهة المستهلك لا يزال متاحًا.

683e2b440a0cc07f.png

3- الإعداد والمتطلبات

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

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

4. قبل البدء

تفعيل واجهات برمجة التطبيقات

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=[YOUR-PROJECT-NAME]
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

تفعيل جميع الخدمات اللازمة

gcloud services enable compute.googleapis.com
gcloud services enable dns.googleapis.com

5- إنشاء شبكة منتجين [مشروع منتجين]

إنشاء شبكة VPC

من Cloud Shell

gcloud compute networks create producer-vpc \
    --subnet-mode=custom

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

سنبدأ بنشر 3 شبكات فرعية في شبكة VPC الخاصة بالمنتج. سيتم تخصيص أحدها لنشر خدمة المنتج، وآخر لقواعد إعادة التوجيه في موازنة الحمل، وثالث سيتم ربطه بمرفق خدمة PSC لشبكة NAT الفرعية في PSC.

من Cloud Shell

gcloud compute networks subnets create producer-service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create producer-fr-subnet \
        --network=producer-vpc \
        --range=192.168.0.0/28 \
        --region=$region

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --range=10.100.0.0/28 \
    --region=$region \
    --purpose=PRIVATE_SERVICE_CONNECT

إنشاء Cloud NAT

يجب توفّر Cloud NAT لتثبيت الحِزم المناسبة لخدمات المنتج.

من Cloud Shell

gcloud compute routers create $region-cr \
    --network=producer-vpc \
    --region=$region

من Cloud Shell

gcloud compute routers nats create $region-nat \
    --router=$region-cr \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

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

من Cloud Shell

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

للسماح لميزة "الوصول إلى الأجهزة الافتراضية عبر الإنترنت" بالاتصال بأجهزة VM الافتراضية، أنشئ قاعدة جدار حماية تتضمّن ما يلي:

  • ينطبق على جميع مثيلات الأجهزة الافتراضية التي تريد إتاحتها باستخدام IAP.
  • تسمح هذه القاعدة بحركة البيانات الواردة من نطاق عناوين IP 35.235.240.0/20. يحتوي هذا النطاق على جميع عناوين IP التي تستخدمها خدمة IAP لإعادة توجيه بروتوكول TCP.

من Cloud Shell

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

سنبدأ بثلاث قواعد لجدار الحماية. سيسمح أحدها بالوصول إلى الأجهزة الافتراضية لإجراء عمليات التحقّق من سلامة موازن التحميل (2000)، وسيسمح الآخر بالوصول إلى الأجهزة الافتراضية من نطاق NAT الخاص بخدمة Private Service Connect (3000)، وسيسمح الثالث بالاتصال بين الأجهزة الافتراضية في الشبكة الفرعية للخدمة لأغراض الاختبار (4000). سنضع جميع القواعد للمنفذ 80 لأنّنا سنستخدم هذا المنفذ لخدمتنا.

من Cloud Shell

gcloud compute network-firewall-policies rules create 2000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "LB healthchecks" \
    --direction INGRESS \
    --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

gcloud compute network-firewall-policies rules create 3000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from PSC NAT subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.100.0.0/28 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

 gcloud compute network-firewall-policies rules create 4000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access between producer service VMs and testing client for testing purposes" \
    --direction INGRESS \
    --src-ip-ranges 10.0.0.0/28 \
    --layer4-configs tcp:80 \
    --global-firewall-policy

6. إنشاء خدمة منتِج [مشروع منتِج]

سننشئ خدمة ويب بسيطة من Apache باستخدام مجموعة مثيلات غير مُدارة تعرض الرسالة "أنا خدمة منتِجة".

إنشاء مثيل

من Cloud Shell

gcloud compute instances create producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

إنشاء مجموعة مثيلات غير مُدارة

من Cloud Shell

gcloud compute instance-groups unmanaged create producer-uig \
  --zone=$zone

أضِف producer-service-vm إلى مجموعة المثيلات غير المُدارة التي أنشأناها للتو.

من Cloud Shell

gcloud compute instance-groups unmanaged add-instances producer-uig \
  --zone=$zone \
  --instances=producer-service-vm

إنشاء مكوّنات جهاز موازنة الحمل

بالنسبة إلى الإصدار 1 من خدمة المنتج، سنعرض الخدمة باستخدام موازن حمل Network Passthrough على المنفذ 80.

انشر عملية التحقّق من الصحة للمنفذ 80.

من Cloud Shell

gcloud compute health-checks create http producer-hc \
        --region=$region

نشر خدمة الخلفية وإضافة الخلفية إلى خدمة الخلفية

من Cloud Shell

gcloud compute backend-services create producer-bes \
  --load-balancing-scheme=internal \
  --protocol=tcp \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

gcloud compute backend-services add-backend producer-bes \
  --region=$region \
  --instance-group=producer-uig \
  --instance-group-zone=$zone

أنشِئ عنوان IP ثابتًا سيتم استخدامه لقاعدة إعادة التوجيه في موازنة الحمل.

من Cloud Shell

gcloud compute addresses create producer-fr-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.2

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

من Cloud Shell

gcloud compute forwarding-rules create producer-fr \
  --region=$region \
  --load-balancing-scheme=internal \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-ip \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=producer-bes \
  --backend-service-region=$region

7. اختبار خدمة المنتج [مشروع المنتج]

أنشئ جهازًا افتراضيًا تجريبيًا في الشبكة الفرعية لخدمة المنتج، وسجِّل الدخول إلى الجهاز الافتراضي واختبِر طلبًا إلى خدمة Apache.

من Cloud Shell

 gcloud compute instances create producer-test-vm \
    --zone=$zone \
    --subnet=producer-service-subnet \
    --no-address

من Cloud Shell

gcloud compute ssh producer-test-vm \
    --zone=$zone \
    --command="curl -s 192.168.0.2/index.html"

الناتج المتوقّع

I am a Producer Service.

8. عرض خدمة المنتج من خلال مرفق الخدمة [مشروع المنتج]

أنشئ مرفق الخدمة. اربطها بقاعدة إعادة التوجيه التي أنشأناها باستخدام psc-nat-subnet.

من Cloud Shell

gcloud compute service-attachments create producer-attachment \
    --region=$region \
    --producer-forwarding-rule=producer-fr  \
    --connection-preference=ACCEPT_AUTOMATIC \
    --nat-subnets=psc-nat-subnet

يجب تدوين معرّف الموارد المنتظم (URI) لملف ربط الخدمة (selfLink) لأنّك ستحتاج إليه في خطوة قادمة لإعداد نقطة نهاية PSC. يمكنك الحصول عليه من خلال تنفيذ ما يلي في Cloud Shell.

من Cloud Shell

gcloud compute service-attachments describe producer-attachment --region=$region

مثال على الناتج

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2026-02-10T07:50:04.250-08:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/producer-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-fr

انسخ معرّف الموارد المنتظم (URI) بدءًا من projects

مثال: projects/$project/regions/$region/serviceAttachments/producer-attachment

9- إنشاء شبكة مستهلكين [مشروع المستهلك]

إنشاء شبكة VPC

من Cloud Shell

gcloud compute networks create consumer-vpc \
    --subnet-mode=custom

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

سيتم نشر شبكة فرعية واحدة سننشر فيها نقطة نهاية PSC وجهازًا افتراضيًا لعميل الاختبار.

من Cloud Shell

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

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

من Cloud Shell

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy consumer-vpc-policy \
    --network consumer-vpc \
    --name network-consumer-vpc \
    --global-firewall-policy

سنضبط أيضًا consumer-vpc لاستخدام IAP مع بروتوكول SSH.

من Cloud Shell

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy consumer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

10. إنشاء نقطة نهاية Private Service Connect [مشروع المستهلك]

احجز عنوان IP ثابتًا سيتم استخدامه لنقطة نهاية PSC.

من Cloud Shell

gcloud compute addresses create psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-subnet \
    --addresses 10.0.0.2

أنشئ نقطة نهاية PSC باستخدام عنوان IP الثابت المحجوز ومعرّف الموارد المنتظم لمرفق الخدمة الذي أشرنا إليه سابقًا.

من Cloud Shell

gcloud compute forwarding-rules create psc-endpoint \
  --region=$region \
  --network=consumer-vpc \
  --address=psc-endpoint-ip \
  --target-service-attachment=projects/$project/regions/$region/serviceAttachments/producer-attachment

11. إعداد منطقة نظام أسماء نطاقات خاص لنقطة نهاية Private Service Connect [مشروع المستهلك]

باستخدام Cloud DNS، سنضبط منطقة نظام أسماء نطاقات خاصًا باسم نظام أسماء النطاقات myservice.com، ليتم استخدامه مع نقطة نهاية PSC.

من Cloud Shell

gcloud dns managed-zones create "consumer-service" \
    --dns-name=myservice.com \
    --description="consumer service dns" \
    --visibility=private \
    --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="consumer-service"

أنشئ سجلّ A للنطاق myservice.com وأشِر إليه بعنوان IP لنقطة نهاية PSC.

من Cloud Shell

gcloud dns record-sets transaction add 10.0.0.2 \
   --name=myservice.com \
   --ttl=300 \
   --type=A \
   --zone="consumer-service"

gcloud dns record-sets transaction execute \
   --zone="consumer-service"

12. اختبار نقطة نهاية PSC [مشروع المستهلك]

إنشاء جهاز افتراضي للعميل

من Cloud Shell

gcloud compute instances create consumer-client-vm \
    --zone=$zone \
    --subnet=consumer-subnet \
    --no-address

اختبار إمكانية اتصال نقطة نهاية PSC

من Cloud Shell

gcloud compute ssh consumer-client-vm \
    --zone=$zone \
    --command="curl -s myservice.com/index.html"

الناتج المتوقّع

I am a Producer Service.

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

13. إنشاء خدمة منتِج معدَّلة [مشروع المنتج]

لتعديل خدمة المنتج، سنفعّل جهازًا افتراضيًا جديدًا يعمل بخادم ويب Apache مشابه مع الرسالة "أنا خدمة منتج جديدة". سنضيف هذا الجهاز الظاهري إلى مجموعة أجهزة افتراضية جديدة غير مُدارة، وسنستخدم مجموعة الأجهزة الافتراضية غير المُدارة هذه كخلفية لموازنة الحمل الجديدة. بدلاً من استخدام برنامج موازنة حمل Network Passthrough، سنعدّل برنامج موازنة الحمل إلى برنامج موازنة حمل داخلي للتطبيقات على مستوى منطقة معيّنة.

تعديل الشبكة

أنشئ شبكة فرعية جديدة سيتم استخدامها للشبكة الفرعية التي تعمل كخادم وكيل فقط لموازن التحميل الخاص بالتطبيق.

من Cloud Shell

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.200.0.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

أنشئ شبكة فرعية جديدة سيتم استضافة خدمتنا الجديدة فيها.

من Cloud Shell

gcloud compute networks subnets create producer-service-new-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/28 \
    --region=$region

أنشئ قاعدة جدار حماية جديدة تسمح بالاتصال بخدمة المنتج الجديدة من الشبكة الفرعية للخادم الوكيل فقط.

من Cloud Shell

 gcloud compute network-firewall-policies rules create 3001 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "allow access from proxy only subnet" \
    --direction INGRESS \
    --src-ip-ranges 10.200.0.0/24 \
    --layer4-configs tcp:80  \
    --global-firewall-policy

إنشاء مثيل

من Cloud Shell

gcloud compute instances create new-producer-service-vm \
    --network producer-vpc \
    --subnet producer-service-new-subnet \
    --zone $zone \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    a2enmod ssl
    sudo a2ensite default-ssl
    echo "I am a NEW Producer Service." | \
    tee /var/www/html/index.html
    systemctl restart apache2'

إنشاء مجموعة مثيلات غير مُدارة

من Cloud Shell

gcloud compute instance-groups unmanaged create producer-new-uig \
  --zone=$zone

gcloud compute instance-groups unmanaged add-instances producer-new-uig \
  --zone=$zone \
  --instances=new-producer-service-vm

gcloud compute instance-groups unmanaged set-named-ports producer-new-uig \
    --named-ports=http:80 \
    --zone=$zone

إنشاء مكوّنات جديدة لموازنة الحمل

أنشِئ خدمة الخلفية. يُرجى العِلم أنّنا نستخدم نظام موازنة الحمل INTERNAL_MANAGED لأنّنا نعدّل إلى جهاز موازنة الحمل للتطبيقات الداخلية.

من Cloud Shell

gcloud compute backend-services create producer-new-bes \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=http \
  --region=$region \
  --health-checks=producer-hc \
  --health-checks-region=$region

أضِف "مجموعة الأجهزة الافتراضية غير المُدارة" كخادم خلفي إلى خدمة الخادم الخلفي.

من Cloud Shell

gcloud compute backend-services add-backend producer-new-bes \
  --region=$region \
  --instance-group=producer-new-uig \
  --instance-group-zone=$zone

أنشئ "خريطة عناوين URL" واستهدِف خوادم HTTP الوكيلة.

من Cloud Shell

gcloud compute url-maps create producer-url-map \
  --default-service=producer-new-bes \
  --region=$region

gcloud compute target-http-proxies create http-proxy \
  --url-map=producer-url-map \
  --region=$region

أنشئ عنوان IP ثابتًا سنستخدمه لقاعدة إعادة التوجيه. سيأتي ذلك من الشبكة الفرعية نفسها التي استخدمناها لقاعدة إعادة التوجيه الأصلية.

من Cloud Shell

gcloud compute addresses create producer-fr-new-ip\
  --region $region \
  --subnet producer-fr-subnet \
  --addresses 192.168.0.3

أنشئ قاعدة إعادة التوجيه.

من Cloud Shell

gcloud compute forwarding-rules create new-producer-fr \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=producer-vpc \
  --subnet=producer-fr-subnet \
  --address=producer-fr-new-ip \
  --ports=80 \
  --region=$region \
  --target-http-proxy=http-proxy \
  --target-http-proxy-region=$region

14. اختبار خدمة المنتج المعدَّلة [مشروع المنتج]

سنستخدم الجهاز الظاهري التجريبي نفسه الذي أنشأناه لاختبار الخدمة التي تم نشرها في الأصل.

من Cloud Shell

gcloud compute ssh producer-test-vm \
    --zone=$zone \
    --command="curl -s 192.168.0.3/index.html"

يُرجى العِلم أنّنا نطلب عنوان IP معدَّلاً. ‫192.168.0.3 هو عنوان IP لجهاز موازنة حمل التطبيق الإقليمي الداخلي.

الناتج المتوقّع

I am a NEW Producer Service.

15. تعديل مرفق الخدمة [مشروع المنتج]

للحصول على صورة أوضح لتعديل قاعدة إعادة التوجيه في Service Attachment، يمكننا تشغيل وصف على Service Attachment قبل التغيير وبعده.

من Cloud Shell

gcloud compute service-attachments describe producer-attachment \
    --region=$region \
    --format="value(targetService)"

الناتج المتوقّع

https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/producer-fr

عدِّل مرفق الخدمة.

من Cloud Shell

gcloud compute service-attachments update producer-attachment \
  --region=$region \
  --target-service=projects/$project/regions/$region/forwardingRules/new-producer-fr

نفِّذ الأمر describe مرة أخرى للاطّلاع على قاعدة إعادة التوجيه الجديدة.

من Cloud Shell

gcloud compute service-attachments describe producer-attachment \
    --region=$region \
    --format="value(targetService)"

الناتج المتوقّع

https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/new-producer-fr

16. إعادة اختبار اتصال PSC الخاص بالمستهلك [مشروع المستهلك]

سجِّل الدخول إلى تطبيق المستهلك نفسه.

من Cloud Shell

gcloud compute ssh consumer-client-vm \
    --zone=$zone \
    --command="curl -s myservice.com/index.html"

الناتج المتوقّع

 I am a NEW Producer Service.

تهانينا! لقد نجحت في تعديل موازن تحميل خدمة منتِجة في PSC ولم يتطلّب ذلك إجراء أي تغييرات في الإعدادات من جهة المستهلك.

17. خطوات التنظيف [مشروع المستهلك]

حذف مكوّنات المختبر من نافذة Cloud Shell واحدة

gcloud dns record-sets delete myservice.com --zone="consumer-service" --type=A -q

gcloud dns managed-zones delete "consumer-service" -q

gcloud compute forwarding-rules delete psc-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client-vm --zone=$zone --project $project -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-subnet --region $region -q

gcloud compute networks delete consumer-vpc -q

18 خطوات التنظيف [مشروع المنتج]

حذف مكوّنات المختبر من نافذة Cloud Shell واحدة

gcloud compute service-attachments delete producer-attachment --region=$region -q

gcloud compute instances delete producer-test-vm --zone=$zone --project $project -q

gcloud compute forwarding-rules delete new-producer-fr --region=$region -q

gcloud compute addresses delete producer-fr-new-ip --region $region -q

gcloud compute target-http-proxies delete http-proxy --region $region -q

gcloud compute url-maps delete producer-url-map --region $region -q

gcloud compute backend-services delete producer-new-bes --region $region -q

gcloud compute instance-groups unmanaged delete producer-new-uig --zone $zone -q

gcloud compute instances delete new-producer-service-vm --zone $zone --project $project -q

gcloud compute networks subnets delete producer-service-new-subnet --region $region -q

gcloud compute networks subnets delete lb-proxy-subnet --region $region -q

gcloud compute forwarding-rules delete producer-fr --region=$region -q

gcloud compute addresses delete producer-fr-ip --region $region -q

gcloud compute backend-services delete producer-bes --region $region -q

gcloud compute health-checks delete producer-hc --region $region -q

gcloud compute instance-groups unmanaged delete producer-uig --zone $zone -q

gcloud compute instances delete producer-service-vm --zone $zone --project $project -q

gcloud compute network-firewall-policies rules delete 4000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 3001 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 3000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute routers nats delete $region-nat --router=$region-cr --region=$region -q

gcloud compute routers delete $region-cr --region=$region -q

gcloud compute networks subnets delete psc-nat-subnet --region=$region -q

gcloud compute networks subnets delete producer-fr-subnet --region=$region -q

gcloud compute networks subnets delete producer-service-subnet --region=$region -q

gcloud compute networks delete producer-vpc -q

19. تهانينا!

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

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

  • أنشِئ خدمة ويب بسيطة من Apache يتم عرضها كخدمة منتِجة في PSC.
  • أنشئ نقطة نهاية PSC.
  • أنشئ منطقة خاصة في Cloud DNS لمكالمات خدمة المستهلك.
  • عدِّل قاعدة إعادة التوجيه المرتبطة بمرفق الخدمة باستخدام ميزة "قابلية التغيير في Private Service Connect".