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

1. مقدمة

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

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

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

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

ما ستتعلمه

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

المتطلبات

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

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

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

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

7dbf27cf215f9703.png

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

7f64427c0e59d417.png

الحالة 2 هي حالة اختبار PSC. سننشئ قاعدة إعادة توجيه جديدة ونستخدمها للربط بـ Service Attachment. بعد ذلك، سننشئ نقطة نهاية اختبارية لخدمة Private Service Connect في شبكة VPC الخاصة بالمستهلك لاختبار ما إذا كانت خدمة Private Service Connect تعمل على النحو المتوقّع.

98c324c59c1fbf68.png

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

a64ab7b69132c722.png

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.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

تأكَّد من إنشاء التناظر من خلال التحقّق من قائمة المسارات في consumer-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 الذي يشير إلى خدمة.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 للتأكّد من أنّ Service Attachment المعروض يعمل بشكلٍ سليم قبل بدء فترة انقطاع الخدمة لنقل الشبكة الفرعية الحالية لخدمة VPC Peering إلى شبكة 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

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

من 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" المباشرة. سننقل الآن الشبكة الفرعية لقاعدة إعادة التوجيه من شبكة VPC الخاصة بالمنتج إلى شبكة VPC الخاصة بالمستهلك باستخدام Internal Ranges API. سيؤدي ذلك إلى حظر استخدام الشبكة الفرعية خلال الفترة المؤقتة التي نحذف فيها الشبكة الفرعية في شبكة VPC الخاصة بالمنتج وتحديدها لأغراض نقل البيانات فقط لإنشائها في شبكة VPC الخاصة بالمستهلك.

تتطلّب واجهة برمجة التطبيقات للنطاق الداخلي حجز الشبكة الفرعية الحالية لقاعدة إعادة التوجيه الخاصة بنظير شبكة VPC (producer-fr-subnet، 192.168.0.0/28) وتحديد اسم شبكة فرعية مستهدَفة في شبكة VPC الخاصة بالمستهلك (consumer-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. إنشاء نقطة نهاية Private Service Connect (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

حذف نقطة نهاية "الاختبار" الخاصة بخدمة Private Service Connect

Consumer-Activity

من 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 لتنفيذ عملية نقل الشبكة الفرعية عبر "تبادل معلومات بين الشبكات" من أجل إتاحة عملية نقل الخدمة من "تبادل معلومات بين الشبكات" إلى PSC
  • فهم الحالات التي يجب فيها إيقاف الخدمة مؤقتًا لنقل البيانات
  • خطوات إعادة الضبط بعد نقل البيانات