1. مقدمة
باستخدام Private Service Connect، يمكن لمقدّمي الخدمات عرض الخدمات في بيئة شبكة VPC من خلال Service Attachment والسماح للمستهلكين في بيئة شبكة VPC أخرى بالوصول إلى هذه الخدمات عبر نقطة نهاية Private Service Connect. في بعض الأحيان، يتم تصميم خدمات المنتج هذه كمجموعات من الأجهزة الافتراضية، حيث يعرض كل جهاز افتراضي الخدمات نفسها على أرقام منافذ متطابقة. في السابق، كانت تصاميم الخدمات هذه تتطلّب إما نشر نقاط نهاية متعددة في Private Service Connect على جهة المستهلك، أو استخدام ميزة "إعادة توجيه عناوين IP" على جهة مقدّم الخدمة للتأكّد من استهداف الجهاز الظاهري الصحيح لمقدّم الخدمة.
يمكن الآن لخدمة Private Service Connect استهداف الوجهة الصحيحة بشكلٍ أصلي باستخدام ميزة "ربط المنافذ". في هذا الدرس العملي، ستتعرّف على حالات الاستخدام التي تتطلّب هذه الميزة وكيفية نشر مجموعة NEG لربط المنافذ في عبء عمل Private Service Connect.
ما ستتعلمه
- حالات استخدام ميزة "تعيين المنافذ" في Private Service Connect
- المزايا الرئيسية لعملية ربط المنافذ في PSC
- متطلبات الشبكة
- أنشئ خدمة منتِج Private Service Connect باستخدام ربط المنافذ.
- إنشاء نقطة نهاية Private Service Connect
- إجراء مكالمات من خلال نقطة نهاية Private Service Connect إلى خدمة منتِجة
المتطلبات
- مشروع Google Cloud لديه أذونات المالك
2. حالات استخدام ميزة "تعيين المنافذ" في Private Service Connect
تستفيد ميزة "ربط المنافذ" من مجموعة NEG لربط المنافذ (Network Endpoint Group) المخصّصة لحالات استخدام PSC.
أكثر أنواع المنتجين شيوعًا الذين يمكنهم الاستفادة من استخدام "ربط المنافذ" هم منتجو قواعد بيانات NoSQL ومنتجو Kafka. ومع ذلك، يمكن لأي منتج يتطلّب مجموعة من الأجهزة الافتراضية التي تعرض الخدمات نفسها على المنافذ المتطابقة مع متطلبات ربط الأجهزة الافتراضية المحدّدة استخدام هذه الميزة.
يحدّد المنتج التعيين بين منفذ العميل والجهاز الافتراضي للمنتج بالإضافة إلى منفذ الوجهة. وعلى المنتج بعد ذلك مشاركة هذه المعلومات مع المستهلك. يستخدم المستهلك المنافذ المحدّدة مسبقًا لتحديد الجهاز الافتراضي للمنتج ومنفذ الوجهة اللذين يحتاج إلى الوصول إليهما بشكلٍ فريد. المنفذ الذي يستخدمه المستهلك هو منفذ مختلف عن المنفذ الذي يستخدمه المنتج.
المزايا الرئيسية لعملية ربط المنافذ في PSC
- بسيط: ينشر مقدّمو الخدمات مكوّنات PSC مع ربط المنافذ، وينشر المستهلكون نقطة نهاية PSC. تتعامل خدمة PSC مع ترجمة عنوان الشبكة تلقائيًا.
- فعّالة من حيث التكلفة: لا تتطلّب هذه الطريقة أي موارد إضافية من PSC أو دورات وحدة المعالجة المركزية (CPU) الخاصة بالجهاز الافتراضي للمنتج. التسعير هو نفسه كما هو الحال مع الأنواع الأخرى من عمليات نشر "حملات التسوّق الذكية"
- الأداء العالي: يوفّر تعيين المنافذ سرعة معالجة البيانات نفسها ووقت الاستجابة المنخفض الذي توفّره أوضاع PSC الأخرى.
- قابلية التوسّع والفعالية في استخدام عناوين IP: يمكن لعنوان IP واحد من شبكة VPC الخاصة بالمستهلك الوصول إلى ما يصل إلى 1000 آلة افتراضية خاصة بالمنتج و1000 عملية ربط منافذ.
3- متطلبات الشبكة
- تتطلّب ميزة "ربط المنافذ" استخدام جهاز موازنة الحمل الداخلي لوضع البيانات في مسارها الصحيح كجهاز موازنة الحمل الخاص بالمنتج.
- يمكن استخدام نقاط نهاية PSC فقط مع ميزة "ربط المنافذ" (وليس الخلفيات أو الواجهات الخاصة بخدمة PSC).
- مجموعات NEGs التي تتضمّن عمليات ربط المنافذ هي بنى إقليمية.
- لا يمكن استخدام مجموعات NEG لربط المنافذ إلا من خلال اتصال PSC. ولن تعمل إذا كانت الآلة الافتراضية للعميل تستدعي قاعدة إعادة التوجيه لجهاز موازنة الحمل الخاص بالمنتج مباشرةً. ويظهر ذلك في طريقة اختبار خدمة المنتج في هذا الدرس التطبيقي حول الترميز.
- يجب أن تكون نقطة نهاية PSC ومجموعة خدمات المنتج في شبكات VPC مختلفة.
4. بنية الدرس التطبيقي حول الترميز

في شبكة VPC الخاصة بالمنتج، سيتم إنشاء آلتين افتراضيتين تشغّلان خادمَي ويب، أحدهما يعمل على المنفذ 1000 والآخر على المنفذ 2000. سنختبر كل خدمة قبل إعداد مجموعة NEG الخاصة بـ Portmap و"موازن الحمل" التي تتيح نقل البيانات عبر الشبكة الداخلية و"ملحق الخدمة".
في شبكة VPC الخاصة بالمستهلك، سنضبط نقطة نهاية PSC ونختبر الاتصال بخدمة المنتج من جهاز افتراضي للعميل.
5- الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- رقم تعريف المشروع هو معرّف فريد في جميع مشاريع Google Cloud ولا يمكن تغييره بعد ضبطه. تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف مشروعك (يُشار إليه عادةً باسم
PROJECT_ID). إذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. يمكنك بدلاً من ذلك تجربة اسم مستخدم من اختيارك ومعرفة ما إذا كان متاحًا. لا يمكن تغيير هذا الخيار بعد هذه الخطوة وسيظل ساريًا طوال مدة المشروع. - للعلم، هناك قيمة ثالثة، وهي رقم المشروع، تستخدمها بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير، إن وُجدت أي تكلفة على الإطلاق. لإيقاف الموارد وتجنُّب تحمّل تكاليف تتجاوز هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

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

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا ثابتًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. لست بحاجة إلى تثبيت أي تطبيق.
6. قبل البدء
تفعيل واجهات برمجة التطبيقات
داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك
gcloud config list project gcloud config set project [YOUR-PROJECT-ID] project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone
تفعيل جميع الخدمات اللازمة
gcloud services enable compute.googleapis.com
7. إنشاء شبكة 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/24 --region $region --enable-private-ip-google-access gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT
سيتم ربط الشبكة الفرعية لخدمة PSC بمرفق خدمة PSC بغرض ترجمة عناوين الشبكة. بالنسبة إلى حالات الاستخدام في مرحلة الإنتاج، يجب أن يكون حجم هذه الشبكة الفرعية مناسبًا لاستيعاب مقدار الزيارات الواردة من جميع نقاط نهاية PSC المرفقة. لمزيد من المعلومات، يمكنك الاطّلاع على مستندات تحديد حجم الشبكة الفرعية لترجمة عنوان الشبكة (NAT) في Private Service Connect.
إنشاء سياسة جدار الحماية وقواعد جدار الحماية
من 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
تسمح قاعدة جدار الحماية التالية بنقل البيانات على منافذ TCP من 1000 إلى 2000 من الشبكة الفرعية لخدمة Private Service Connect إلى جميع المثيلات في الشبكة. في بيئة الإنتاج، يجب أن تقتصر قاعدة جدار الحماية هذه على المثيلات المرتبطة بخدمة المنتج المحدّدة فقط.
من Cloud Shell
gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
تسمح قاعدة جدار الحماية التالية بجميع الزيارات داخل الشبكة الفرعية للخدمات على منافذ TCP من 1000 إلى 2000. سيتم استخدام هذه القاعدة لاختبار ما إذا كانت خدمة المنتج تعمل بشكل سليم.
من Cloud Shell
gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy
إنشاء أجهزة افتراضية خاصة بالمنتج وضبطها
إنشاء أجهزة افتراضية
من Cloud Shell
gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address
في القسم التالي، ابدأ خادم http على المنفذ 1000 و2000 على كل جهاز افتراضي من نوع Producer.
ضبط إعدادات الأجهزة الافتراضية
من Cloud Shell
gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project
في Cloud Shell من جلسة portmap-vm1
mkdir 1000 cd 1000 echo "portmap-vm1 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm1 2000">index.html sudo python3 -m http.server 2000 &
فتح نافذة Cloud Shell جديدة
ابدأ بإعادة ضبط المتغيّرات. في Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project
في Cloud Shell من جلسة portmap-vm2
mkdir 1000 cd 1000 echo "portmap-vm2 1000">index.html sudo python3 -m http.server 1000 & cd .. mkdir 2000 cd 2000 echo "portmap-vm2 2000">index.html sudo python3 -m http.server 2000 &
8. خدمة منتج الاختبار
أولاً، علينا الحصول على عناوين IP الخاصة بمثيلات portmap. دوِّن عنوانَي IP هذين.
فتح نافذة Cloud Shell جديدة
ابدأ بإعادة ضبط المتغيّرات. في Cloud Shell
project=[YOUR-PROJECT-ID] region=us-central1 zone=us-central1-a echo $project echo $region echo $zone gcloud compute instances describe portmap-vm1 \ --format='get(networkInterfaces[0].networkIP)' --zone $zone gcloud compute instances describe portmap-vm2\ --format='get(networkInterfaces[0].networkIP)' --zone $zone
سجِّل الدخول إلى الآلة الافتراضية التجريبية. في Cloud Shell
gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project curl [portmap-vm1 IP]:1000
الناتج المتوقّع
portmap-vm1 1000
في Cloud Shell
curl [portmap-vm1 IP]:2000
الناتج المتوقّع
portmap-vm1 2000
في Cloud Shell
curl [portmap-vm2 IP]:1000
الناتج المتوقّع
portmap-vm2 1000
في Cloud Shell
curl [portmap-vm2 IP]:2000
الناتج المتوقّع
portmap-vm2 2000
الخروج من test-client-vm
9- إنشاء خدمة منتِج باستخدام مجموعة NEG في Portmap
إنشاء مكوّنات جهاز موازنة الحمل
من Cloud Shell
gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP
أضِف نقاط نهاية إلى مجموعة NEG الخاصة بخدمة Portmap لإنشاء عملية الربط من منفذ العميل إلى منفذ المنتج. ينشئ المنتج عملية الربط هذه وسيكون لديه طريقة خاصة لإيصال هذه المعلومات إلى المستهلكين. لا تتم مشاركة عملية ربط المنفذ المحدّد من خلال PSC.
في Cloud Shell
gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000
أكمِل عملية إنشاء جهاز موازنة الحمل.
في Cloud Shell
gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes
إنشاء مرفق الخدمة
من Cloud Shell
gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet
بعد ذلك، استردِد معرّف الموارد المنتظم (URI) لمرفق الخدمة ودوِّن ملاحظة عنه لإعداد نقطة نهاية PSC في بيئة المستهلك.
في Cloud Shell
gcloud compute service-attachments describe portmap-service-attachment --region=$region
مثال على الناتج المتوقّع
connectionPreference: ACCEPT_AUTOMATIC creationTimestamp: '2024-07-19T10:02:29.432-07:00' description: '' enableProxyProtocol: false fingerprint: LI8D6JNQsLA= id: '6207474793859982026' kind: compute#serviceAttachment name: portmap-service-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: '94288091358954472' low: '6207474793859982026' 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/portmap-service-attachment targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr
10. إنشاء شبكة VPC للمستهلك
شبكة VPC
من Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
إنشاء شبكة فرعية
من Cloud Shell
gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access
إنشاء سياسة جدار الحماية وقواعد جدار الحماية
من 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
يجب استخدام بروتوكول النقل الآمن (SSH) من خلال خدمة "الوصول إلى الإنترنت عبر بروتوكول IAP" فقط لشبكة المستهلك.
11. إنشاء جهاز افتراضي ونقطة نهاية Private Service Connect واختبار الاتصال
في هذه المرحلة، من المفترض أن تكون ثلاث نوافذ Cloud Shell مفتوحة. يجب أن يكون لديك جلسة مفتوحة مع portmap-vm1. يجب أن تكون هناك جلسة مفتوحة باستخدام portmap-vm2، وجلسة أخرى هي جلسة العمل.
إنشاء جهاز افتراضي للاختبار
من Cloud Shell
gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address
إنشاء نقطة نهاية Private Service Connect
من Cloud Shell
gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10 gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]
اختبار الاتصال
من Cloud Shell
gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project curl 10.0.0.10:1001
الناتج المتوقّع
portmap-vm1 1000
من Cloud Shell
curl 10.0.0.10:1002
الناتج المتوقّع
portmap-vm1 2000
من Cloud Shell
curl 10.0.0.10:1003
الناتج المتوقّع
portmap-vm2 1000
من Cloud Shell
curl 10.0.0.10:1004
الناتج المتوقّع
portmap-vm2 2000
12. خطوات التنظيف
الخروج من مثيل الجهاز الافتراضي (جميع النوافذ)
exit
حذف مكوّنات المختبر من نافذة Cloud Shell واحدة
gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q gcloud compute addresses delete psc-endpoint-ip --region=$region -q gcloud compute instances delete consumer-client-vm --zone=$zone -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-client-subnet --region=$region -q gcloud compute networks delete consumer-vpc -q gcloud compute service-attachments delete portmap-service-attachment --region=$region -q gcloud compute forwarding-rules delete portmap-fr --region=$region -q gcloud compute backend-services delete portmap-bes --region=$region -q gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q gcloud compute instances delete test-client-vm --zone=$zone -q gcloud compute instances delete portmap-vm2 --zone=$zone -q gcloud compute instances delete portmap-vm1 --zone=$zone -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 networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-service-subnet --region $region -q gcloud compute networks delete producer-vpc -q
13. تهانينا!
تهانينا على إكمال هذا الدرس العملي.
المواضيع التي تناولناها
- حالات استخدام ميزة "تعيين المنافذ" في Private Service Connect
- المزايا الرئيسية لعملية ربط المنافذ في PSC
- متطلبات الشبكة
- أنشئ خدمة منتِج Private Service Connect باستخدام ربط المنافذ.
- إنشاء نقطة نهاية Private Service Connect
- إجراء مكالمات من خلال نقطة نهاية Private Service Connect إلى خدمة منتِجة