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

1. مقدمة

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

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

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

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

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

  • كيفية إعداد خدمة مستندة إلى تبادل المعلومات بين شبكات VPC
  • كيفية إعداد خدمة مستندة إلى PSC
  • استخدام واجهة برمجة التطبيقات للنطاق الداخلي لإجراء نقل بيانات الشبكة الفرعية من خلال تبادل المعلومات بين شبكات VPC لنقل بيانات تبادل المعلومات بين شبكات VPC إلى خدمة PSC
  • فهم الوقت الذي يلزم فيه حدوث توقف عن نقل الخدمة
  • خطوات تنظيم عملية نقل البيانات

المتطلبات

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

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

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

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

7dbf27cf215f9703.png

الحالة 1 هي حالة تبادل المعلومات بين سحابة VPC. سيكون هناك اثنان من سحابة VPC، vPC للمستهلك وأداة product-vpc، سيتم تبادل المعلومات بينها. سيتم عرض خدمة Apache بسيطة من خلال أداة موازنة حمل الشبكة الداخلية، وذلك من خلال أداة موازنة الحمل الخاصة بالشبكة. سيكون لدى المستهلك-نظام تشغيل الجهاز الافتراضي جهاز افتراضي واحد للمستهلك لأغراض الاختبار.

7f64427c0e59d417.png

الحالة 2 هي حالة اختبار PSC. سننشئ قاعدة إعادة توجيه جديدة ونستخدم هذه القاعدة للربط بمرفق الخدمة. سننشئ بعد ذلك نقطة نهاية PSC اختبارية في vPC للمستهلك لاختبار عمل خدمة PSC على النحو المتوقع.

98c324c59c1fbf68.png

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

a64ab7b69132c722.png

الولاية 4 هي حالة PSC النهائية. سنقوم بتنظيف نقطة نهاية PSC الخاصة بالاختبار وحذف تبادل المعلومات بين VPC بين المستهلك-vpc وprod-vpc.

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google. ويمكنك تعديلها في أي وقت.
  • يكون معرّف المشروع فريدًا في جميع مشاريع 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

للسماح لعمليات الشراء داخل التطبيق بالاتصال بمثيلات الأجهزة الافتراضية، أنشِئ قاعدة جدار حماية تعمل على:

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

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

سننشئ أيضًا قاعدتَين إضافيتَين تتيحان عمليات التحقّق من سلامة جهاز موازنة الحمل في الخدمة، بالإضافة إلى السماح بحركة بيانات الشبكة من الأجهزة الافتراضية التي ستتصل من جهاز 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. إعداد خدمة منتِج (نشاط المنتِج)

سننشئ خدمة منتج باستخدام جهاز افتراضي (VM) واحد يشغّل خادم ويب 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

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

سننشئ سياسة أخرى لجدار حماية الشبكة لملف 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 وprod-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 لقاعدة إعادة التوجيه الخاصة بقاعدة عبور الشبكة التي أنشأناها سابقًا. عنوان 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

من جهاز افتراضي لعميل (VM)

curl service.example.com

المخرجات المتوقعة

I am a Producer Service. 

من جهاز افتراضي لعميل (VM)

exit

11. إعداد الخدمة لـ Private Service Connect (نشاط المنتِج)

الآن وبعد أن أكملنا جميع خطوات الإعداد الأولية، سنبدأ الآن في إعداد خدمة VPC-Peered لنقلها إلى Private Service Connect. في هذا القسم، سنُجري تغييرات على POLICY-vpc من خلال ضبط الخدمة ليتم عرضها عبر "مرفق خدمة". سنحتاج إلى إنشاء شبكة فرعية جديدة وقاعدة جديدة لإعادة التوجيه ضمن تلك الشبكة الفرعية حتى نتمكّن من نقل الشبكة الفرعية الحالية إلى شبكة 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 بغرض ترجمة عنوان الشبكة. بالنسبة إلى حالات استخدام الإنتاج، يجب أن يكون حجم هذه الشبكة الفرعية مناسبًا لدعم عدد نقاط النهاية المرفقة. راجع وثائق تغيير حجم الشبكة الفرعية لـ PSC NAT للحصول على مزيد من المعلومات.

من 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. عند الوصول إلى الخدمة من خلال 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. ربط نقطة نهاية PSC للمستهلك "test" بخدمة منتِج واختبار (نشاط المستهلك)

البنية الآن في الحالة 2.

في هذه المرحلة، لا تزال خدمة المنتج الحالية المعروضة من خلال تبادل المعلومات بين شبكات VPC متاحة وتعمل بشكل صحيح في سيناريو الإنتاج. سننشئ نقطة نهاية 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

اختبار نقطة نهاية 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. نقل الشبكة الفرعية الخاصة بقاعدة إعادة التوجيه في أداة نشر مُنتِج Google الحالية

سيؤدي تنفيذ هذه الخطوات إلى بدء انقطاع في خدمة مُنتِج VPC المباشرة المستندة إلى تبادل المعلومات بين الشبكات. سننقل الآن الشبكة الفرعية لقاعدة إعادة التوجيه من استدعاء vpc إلى vpc للمستهلك باستخدام واجهة برمجة تطبيقات النطاقات الداخلية. سيؤدي هذا الإجراء إلى قفل استخدام الشبكة الفرعية في الفترة الانتقالية التي نحذف فيها الشبكة الفرعية في POLICY-vpc، ونخصِّصها فقط لأغراض نقل البيانات لإنشاء في vpc الخاص بالمستهلك.

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

حجز شبكة prod-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 بالحالة النهائية (نشاط المستهلك)

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

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

من Cloud Shell

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

مرة أخرى، يجب استخدام نفس "معرّف الموارد المنتظم (URI) لمرفق الخدمة" الذي ذكرته سابقًا والذي تم استخدامه أيضًا لإنشاء نقطة نهاية 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

من جهاز افتراضي لعميل (VM)

curl service.example.com

المخرجات المتوقعة

I am a Producer Service. 

من جهاز افتراضي لعميل (VM)

exit

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

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

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

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

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

نشاط منتِج

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

من جهاز افتراضي لعميل (VM)

curl service.example.com

المخرجات المتوقعة

I am a Producer Service. 

من جهاز افتراضي لعميل (VM)

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. تهانينا!

تهانينا على إكمال دورة codelab.

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

  • كيفية إعداد خدمة مستندة إلى تبادل المعلومات بين شبكات VPC
  • كيفية إعداد خدمة مستندة إلى PSC
  • استخدام واجهة برمجة التطبيقات للنطاق الداخلي لإجراء نقل بيانات الشبكة الفرعية من خلال تبادل المعلومات بين شبكات VPC لنقل بيانات تبادل المعلومات بين شبكات VPC إلى خدمة PSC
  • فهم الوقت الذي يلزم فيه حدوث توقف عن نقل الخدمة
  • خطوات تنظيم عملية نقل البيانات