Private Service Connect: نقل تبادل المعلومات بين شبكة VPC إلى Private Service Connect

1. مقدمة

يُعدّ ربط شبكة VPC طريقة شائعة تتيح لمقدّمي الخدمات إمكانية استهلاك الخدمات للمستخدمين. ومع ذلك، يؤدي استخدام ربط شبكة VPC إلى العديد من تعقيدات التوجيه، مثل ربط شبكة VPC غير المتعدّي، والاستهلاك الكبير لعناوين IP، والإفراط في عرض الموارد في شبكة VPC مرتبطة.

‫Private Service Connect (PSC) هي طريقة اتصال تتيح للمنتجين عرض خدمة عبر نقطة نهاية واحدة يوفّرها المستهلك في شبكة VPC الخاصة بعبء العمل. يؤدي ذلك إلى حلّ العديد من المشاكل التي يواجهها المستخدمون عند استخدام ميزة "ربط شبكات VPC". مع أنّ العديد من الخدمات الجديدة يتم إنشاؤها باستخدام PSC، لا يزال هناك العديد من الخدمات التي تتوفّر كخدمات "تبادل معلومات بين شبكات VPC".

يسرّ Google Cloud أن يقدّم مسار نقل للخدمات التي أنشأتها من خلال "تبادل معلومات بين شبكات VPC" للانتقال إلى بنية تستند إلى Private Service Connect. باستخدام طريقة النقل هذه، يتم الاحتفاظ بعنوان IP الخاص بخدمة المنتج المعروضة من خلال التناظر في شبكة VPC إلى بنية PSC المستندة، وبالتالي لا يحتاج المستهلك إلى إجراء سوى الحد الأدنى من التغييرات. اتّبِع هذا الدرس التطبيقي حول الترميز للتعرّف على الخطوات الفنية اللازمة لإجراء عملية النقل هذه.

ملاحظة: لا يتوفّر مسار نقل البيانات هذا إلا للخدمات التي يتوفّر فيها المنتج والمستهلك ضمن مؤسسة Google Cloud نفسها. بالنسبة إلى أي خدمات Google Cloud أو خدمات تابعة لجهات خارجية تستخدم تبادل معلومات بين شبكات VPC، ستستفيد من طريقة نقل بيانات مشابهة، ولكن سيتم تخصيصها للخدمة نفسها. يُرجى التواصل مع الجهات المعنية للاستفسار عن مسار نقل البيانات لهذه الأنواع من الخدمات.

ما ستتعلمه

  • كيفية إعداد خدمة تستند إلى ربط شبكة VPC
  • كيفية إعداد خدمة تستند إلى PSC
  • استخدام Internal-Ranges API لتنفيذ عملية نقل الشبكة الفرعية عبر "تبادل معلومات بين شبكات VPC" من أجل إتمام عملية نقل الخدمة من "تبادل معلومات بين شبكات VPC" إلى Private Service Connect
  • فهم الحالات التي يجب فيها إيقاف الخدمة مؤقتًا لنقل البيانات
  • خطوات إعادة الضبط بعد نقل البيانات

المتطلبات

  • مشروع Google Cloud لديه أذونات المالك

2. بنية الدرس التطبيقي حول الترميز

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

سيتضمّن هذا الدرس التطبيقي حول الترميز 4 حالات.

7dbf27cf215f9703.png

الحالة 1 هي حالة "الربط بين شبكتَي VPC". سيكون هناك شبكتان من شبكات VPC، هما consumer-vpc وproducer-vpc، وسيتم ربطهما معًا. ستتضمّن شبكة VPC الخاصة بالمنتِج خدمة Apache بسيطة يتم عرضها من خلال "جهاز موازنة حمل الشبكة الذي يستخدم نقطة مرور داخلية". سيتضمّن Consumer-vpc جهازًا افتراضيًا واحدًا للمستهلك لأغراض الاختبار.

7f64427c0e59d417.png

الحالة 2 هي حالة اختبار PSC. سننشئ قاعدة إعادة توجيه جديدة ونستخدمها للربط بـ "ملحق الخدمة". بعد ذلك، سننشئ نقطة نهاية اختبار PSC في consumer-vpc لاختبار ما إذا كانت خدمة PSC تعمل على النحو المتوقّع.

98c324c59c1fbf68.png

الحالة 3 هي حالة نقل البيانات. سنحجز نطاق الشبكة الفرعية في شبكة VPC الخاصة بمقدّم الخدمة حيث تم نشر الخدمة المستندة إلى تبادل المعلومات بين شبكتَي VPC لاستخدامها في شبكة VPC الخاصة بالمستهلك. سننشئ بعد ذلك نقطة نهاية PSC جديدة باستخدام عنوان IP نفسه المستخدَم في قاعدة إعادة التوجيه الحالية في producer-vpc.

a64ab7b69132c722.png

الحالة 4 هي حالة PSC النهائية. سننظّف نقطة نهاية PSC الاختبارية ونحذف ربط شبكة VPC بين شبكة VPC الخاصة بالمستهلك وشبكة VPC الخاصة بالمنتِج.

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

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

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

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.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 في شريط الأدوات أعلى يسار الصفحة:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

4. قبل البدء

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

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

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export region=us-central1
export zone=$region-a
echo $projectid
echo $region
echo $zone

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

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

5- إنشاء شبكة VPC الخاصة بالمنتج (نشاط المنتج)

شبكة VPC

من Cloud Shell

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

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

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

إنشاء جهاز توجيه Cloud Router وCloud NAT

من Cloud Shell

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

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

سننشئ أيضًا قاعدتَين إضافيتَين تسمحان لعمليات التحقّق من سلامة جهاز موازنة الحمل بالوصول إلى الخدمة، بالإضافة إلى السماح بحركة بيانات الشبكة من الأجهزة الافتراضية التي ستتصل من consumer-vpc.

من 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 consumer-vpc" \
    --direction INGRESS \
    --src-ip-ranges 10.0.1.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 prod-uig \
  --zone=$zone

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

إنشاء جهاز موازنة حمل إقليمي داخلي للشبكة يستخدم نقطة مرور

من Cloud Shell

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

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=prod-uig \
  --instance-group-zone=$zone

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

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. إنشاء شبكة VPC للمستهلك (نشاط المستهلك)

شبكة VPC

من Cloud Shell

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

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

من Cloud Shell

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

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

سننشئ سياسة أخرى لجدار حماية الشبكة من أجل consumer-vpc.

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

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

8. إنشاء شبكة VPC نظيرة

نشاط المنتج

من Cloud Shell

gcloud compute networks peerings create producer-vpc-peering \
    --network=producer-vpc \
    --peer-project=$projectid \
    --peer-network=consumer-vpc

نشاط المستهلك

من Cloud Shell

gcloud compute networks peerings create consumer-vpc-peering \
    --network=consumer-vpc \
    --peer-project=$projectid \
    --peer-network=producer-vpc

تأكَّد من إعداد التناظر من خلال التحقّق من قائمة المسارات في شبكة VPC الخاصة بالمستهلك. من المفترَض أن تظهر لك مسارات لكل من consumer-vpc وproducer-vpc.

نشاط المستهلك

من Cloud Shell

gcloud compute routes list --filter="network=consumer-vpc"

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

NAME: default-route-49dda7094977e231
NETWORK: consumer-vpc
DEST_RANGE: 0.0.0.0/0
NEXT_HOP: default-internet-gateway
PRIORITY: 1000

NAME: default-route-r-10d65e16cc6278b2
NETWORK: consumer-vpc
DEST_RANGE: 10.0.1.0/28
NEXT_HOP: consumer-vpc
PRIORITY: 0

NAME: peering-route-496d0732b4f11cea
NETWORK: consumer-vpc
DEST_RANGE: 192.168.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

NAME: peering-route-b4f9d3acc4c08d55
NETWORK: consumer-vpc
DEST_RANGE: 10.0.0.0/28
NEXT_HOP: consumer-vpc-peering
PRIORITY: 0

9. إنشاء منطقة نظام أسماء النطاقات (نشاط المستهلك)

سننشئ منطقة خاصة في Cloud DNS لاستدعاء خدمة المنتج من خلال نظام أسماء النطاقات بدلاً من عنوان IP خاص لعرض مثال أكثر واقعية.

سنضيف سجلّ A إلى نطاق example.com الذي يشير إلى service.example.com إلى عنوان IP لقاعدة إعادة التوجيه في موازن التحميل Network Passthrough التي أنشأناها سابقًا. عنوان IP لقاعدة إعادة التوجيه هو 192.168.0.2.

من Cloud Shell

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

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

gcloud dns record-sets transaction add 192.168.0.2 \
   --name=service.example.com \
   --ttl=300 \
   --type=A \
   --zone="producer-service"

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

10. اختبار خدمة المنتج عبر شبكة VPC نظيرة (نشاط المستهلك)

في هذه المرحلة، تم إنشاء بنية الحالة 1.

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

من Cloud Shell

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

اختبار الاتصال

من Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

من الجهاز الافتراضي للعميل المستهلك

curl service.example.com

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

I am a Producer Service. 

من الجهاز الافتراضي للعميل المستهلك

exit

11. إعداد الخدمة لاستخدام Private Service Connect (نشاط مقدّم الخدمة)

بعد الانتهاء من جميع خطوات الإعداد الأولية، سنبدأ الآن في إعداد الخدمة التي تم تبادل المعلومات بين شبكات VPC فيها لنقلها إلى Private Service Connect. في هذا القسم، سنجري تغييرات على producer-vpc من خلال ضبط الخدمة ليتم عرضها من خلال Service Attachment. علينا إنشاء شبكة فرعية جديدة وقاعدة إعادة توجيه جديدة ضمن هذه الشبكة الفرعية لنتمكّن من نقل الشبكة الفرعية الحالية إلى شبكة VPC الخاصة بالمستهلك من أجل الحفاظ على عنوان IP الحالي للخدمة.

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

من Cloud Shell

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

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

من Cloud Shell

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

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

من Cloud Shell

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

سيتم ربط الشبكة الفرعية psc-nat-subnet بمرفق خدمة PSC بغرض ترجمة عناوين الشبكة. بالنسبة إلى حالات الاستخدام في مرحلة الإنتاج، يجب تحديد حجم هذه الشبكة الفرعية بشكل مناسب لاستيعاب عدد نقاط النهاية المرفقة. لمزيد من المعلومات، يمكنك الاطّلاع على مستندات تحديد حجم الشبكة الفرعية لترجمة عنوان الشبكة (NAT) في PSC.

من Cloud Shell

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

يجب إضافة قاعدة جدار حماية إضافية إلى "سياسة جدار الحماية للشبكة" للسماح الآن بزيارات من psc-nat-subnet. عند الوصول إلى الخدمة من خلال PSC، سيتم الحصول على الزيارات من psc-nat-subnet.

من Cloud Shell

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

أنشئ مرفق الخدمة واحتفظ بمعرّف الموارد المنتظم (URI) لمرفق الخدمة من أجل ضبط نقطة نهاية PSC في القسم التالي.

من Cloud Shell

gcloud compute service-attachments create producer-sa \
    --region=$region \
    --producer-forwarding-rule=psc-service-fr  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

من Cloud Shell

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

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

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-04-24T11:23:09.886-07:00'
description: ''
enableProxyProtocol: false
fingerprint: xxx
id: 'xxx'
kind: compute#serviceAttachment
name: producer-sa
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxx'
  low: 'xxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/producer-sa
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/forwardingRules/psc-service-fr

12. ربط نقطة نهاية Consumer PSC "الاختبارية" بخدمة المنتج واختبارها (نشاط المستهلك)

أصبحت البنية الآن في الحالة 2.

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

إنشاء نقطة نهاية PSC

من Cloud Shell

gcloud compute addresses create test-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-vm-subnet \
    --addresses 10.0.1.3

ستكون الخدمة المستهدَفة أدناه هي معرّف الموارد المنتظم (URI) لربط الخدمة الذي دوّنته في الخطوة الأخيرة.

من Cloud Shell

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

اختبار نقطة نهاية "الاختبار" في "خدمة التكوين الشخصي"

من Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

من عميل مستهلك

curl 10.0.1.3

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

I am a Producer Service. 

من عميل مستهلك

exit

13. نقل الشبكة الفرعية الحالية لقاعدة إعادة التوجيه الخاصة بالمنتِج

سيؤدي تنفيذ هذه الخطوات إلى بدء انقطاع خدمة Producer المستندة إلى VPC Peering المباشر. سننقل الآن الشبكة الفرعية لقاعدة إعادة التوجيه من producer-vpc إلى consumer-vpc باستخدام Internal Ranges API. سيؤدي ذلك إلى حظر استخدام الشبكة الفرعية خلال الفترة المؤقتة التي نحذف فيها الشبكة الفرعية في شبكة VPC الخاصة بالمنتج وتحديدها لأغراض نقل البيانات فقط لإنشائها في شبكة VPC الخاصة بالمستهلك.

تتطلّب واجهة برمجة التطبيقات للنطاق الداخلي حجز الشبكة الفرعية الحالية لقاعدة إعادة التوجيه الخاصة بتبادل البيانات بين شبكتَي VPC (producer-fr-subnet، ‏192.168.0.0/28) وتحديد اسم شبكة فرعية مستهدَفة في شبكة VPC الخاصة بالمستهلك (consumer-psc-subnet). ننشئ شبكة فرعية جديدة في شبكة VPC الخاصة بالمستهلك بهذا الاسم في بضع خطوات.

حجز الشبكة الفرعية producer-fr-subnet لعملية نقل البيانات

نشاط المنتج

من Cloud Shell

gcloud network-connectivity internal-ranges create producer-peering-internal-range \
    --ip-cidr-range=192.168.0.0/28 \
    --network=producer-vpc \
    --usage=FOR_MIGRATION \
    --migration-source=projects/$projectid/regions/$region/subnetworks/producer-fr-subnet \
    --migration-target=projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

نفِّذ عملية وصف على النطاق الداخلي الذي أنشأناه لعرض حالة الشبكة الفرعية.

نشاط المنتج

من Cloud Shell

gcloud network-connectivity internal-ranges describe producer-peering-internal-range

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

createTime: '2025-04-24T19:26:10.589343291Z'
ipCidrRange: 192.168.0.0/28
migration:
  source: projects/$projectid/regions/$region/subnetworks/producer-fr-subnet
  target: projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet
name: projects/$projectid/locations/global/internalRanges/producer-peering-internal-range
network: https://www.googleapis.com/compute/v1/projects/$project/global/networks/producer-vpc
peering: FOR_SELF
updateTime: '2025-04-24T19:26:11.521960016Z'
usage: FOR_MIGRATION

حذف قاعدة إعادة التوجيه والشبكة الفرعية المستندة إلى ربط شبكة VPC

نشاط المنتج

من Cloud Shell

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

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

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

نقل الشبكة الفرعية

انقل الشبكة الفرعية إلى شبكة VPC الخاصة بالمستهلك من خلال إنشاء شبكة فرعية جديدة باستخدام النطاق الداخلي الذي أنشأناه سابقًا. يجب أن يكون اسم الشبكة الفرعية هو الاسم نفسه الذي استهدفناه سابقًا (consumer-psc-subnet). يشير الغرض المحدّد من PEER_MIGRATION إلى أنّ الشبكة الفرعية محجوزة لنقل الشبكات الفرعية بين شبكات VPC المتصلة. باستخدام علامة الغرض هذه، لا يمكن أن تحتوي الشبكة الفرعية إلا على عناوين IP ثابتة محجوزة ونقاط نهاية PSC.

نشاط المستهلك

من Cloud Shell

gcloud compute networks subnets create consumer-psc-subnet \
  --purpose=PEER_MIGRATION \
  --network=consumer-vpc \
  --range=192.168.0.0/28 \
  --region=$region

14. إنشاء نقطة نهاية PSC للحالة النهائية (نشاط المستهلك)

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

من Cloud Shell

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

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

ERROR: (gcloud.compute.instances.create) Could not fetch resource:
 - Subnetwork must have purpose=PRIVATE.

يمكننا استخدام هذه الشبكة الفرعية فقط لإنشاء نقطة نهاية PSC. يُرجى العِلم أنّ عنوان IP الذي ننشئه يستخدم عنوان IP نفسه الذي استخدمته خدمة المنتج في قاعدة إعادة التوجيه عبر VPC Peer.

من Cloud Shell

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

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

من Cloud Shell

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

15. اختبار نقطة نهاية PSC للحالة النهائية (نشاط المستهلك)

في هذه المرحلة، تكون قد وصلت إلى بنية الحالة 3.

من Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

من الجهاز الافتراضي للعميل المستهلك

curl service.example.com

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

I am a Producer Service. 

من الجهاز الافتراضي للعميل المستهلك

exit

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

16. تنظيف عملية نقل البيانات

لإنهاء عملية نقل البيانات، علينا تنفيذ بضع خطوات لتنظيف البيانات. يجب حذف الموارد وإلغاء حظرها.

فتح الشبكة الفرعية "النطاق الداخلي"

سيؤدي ذلك إلى إلغاء قفل الشبكة الفرعية التي تم نقلها حتى يمكن تغيير الغرض منها من "PEER_MIGRATION" إلى "PRIVATE".

نشاط المنتج

من Cloud Shell

gcloud network-connectivity internal-ranges delete producer-peering-internal-range

نشاط المستهلك

من Cloud Shell

gcloud compute networks subnets update consumer-psc-subnet \
    --region=$region \
    --purpose=PRIVATE

gcloud compute networks subnets describe consumer-psc-subnet --region=$region

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

creationTimestamp: '2025-04-24T12:29:33.883-07:00'
fingerprint: xxx
gatewayAddress: 192.168.0.1
id: 'xxx'
ipCidrRange: 192.168.0.0/28
kind: compute#subnetwork
name: consumer-psc-subnet
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
privateIpGoogleAccess: false
privateIpv6GoogleAccess: DISABLE_GOOGLE_ACCESS
purpose: PRIVATE
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/consumer-psc-subnet

حذف أجهزة VPC النظيرة

نشاط المنتج

من Cloud Shell

gcloud compute networks peerings delete producer-vpc-peering \
    --network=producer-vpc

نشاط المستهلك

من Cloud Shell

gcloud compute networks peerings delete consumer-vpc-peering \
        --network=consumer-vpc

حذف نقطة نهاية PSC "الاختبار"

نشاط المستهلك

من Cloud Shell

gcloud compute forwarding-rules delete test-psc-endpoint --region=$region
gcloud compute addresses delete test-psc-endpoint-ip --region=$region

17. الاختبار النهائي بعد تنظيف عملية نقل البيانات (نشاط المستهلك)

في هذه المرحلة، تم تحقيق بنية الحالة 4 (الحالة النهائية).

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

من Cloud Shell

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

من الجهاز الافتراضي للعميل المستهلك

curl service.example.com

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

I am a Producer Service. 

من الجهاز الافتراضي للعميل المستهلك

exit

نجح الإجراء!

18 خطوات التنظيف

من Cloud Shell

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 --zone=$zone --project=$projectid -q

gcloud dns record-sets delete service.example.com --zone="producer-service" --type=A -q

gcloud dns managed-zones delete "producer-service" -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-psc-subnet --region=$region -q

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

gcloud compute networks delete consumer-vpc -q

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

gcloud compute forwarding-rules delete psc-service-fr --region=$region -q

gcloud compute addresses delete producer-psc-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 prod-uig --zone=$zone -q

gcloud compute instances delete producer-service-vm --zone=$zone --project=$projectid -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 2001 --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-psc-fr-subnet --region=$region -q

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

gcloud compute networks delete producer-vpc -q

19. تهانينا!

تهانينا على إكمال درس البرمجة.

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

  • كيفية إعداد خدمة تستند إلى ربط شبكة VPC
  • كيفية إعداد خدمة تستند إلى PSC
  • استخدام Internal-Ranges API لتنفيذ عملية نقل الشبكة الفرعية عبر "تبادل معلومات بين شبكات VPC" من أجل إتمام عملية نقل الخدمة من "تبادل معلومات بين شبكات VPC" إلى Private Service Connect
  • فهم الحالات التي يجب فيها إيقاف الخدمة مؤقتًا لنقل البيانات
  • خطوات إعادة الضبط بعد نقل البيانات