تعيين منفذ ربط الخدمة الخاصة لناشري الخدمات

1. مقدمة

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

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

يحدِّد "المُنشئ" التعيين بين منفذ العميل ووحدة VM الخاصة بالمُنشئ والمنفذ المقصود. على المنتج بعد ذلك مشاركة هذه المعلومات مع المستهلك. يستخدم المستخدِم المنافذ المحدّدة مسبقًا لتحديد الجهاز الافتراضي للمنتج والمنفذ المقصود بشكلٍ فريد. المنفذ الذي يستخدمه المستهلك هو منفذ مختلف عن المنفذ الذي يستخدمه المنتج.

المزايا الرئيسية لميزة "ربط منافذ PSC"

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

3- متطلبات الشبكة

  • تتطلّب ميزة "ربط المنافذ" استخدام جهاز موازنة حمل الشبكة الذي يستخدم نقطة مرور داخلية بصفتها جهاز موازنة حمل المنتج.
  • يمكن استخدام نقاط نهاية PSC فقط مع ميزة "تعيين المنافذ" (وليس الخلفيات أو واجهات PSC).
  • إنّ مجموعات NEG لربط المنافذ هي بنى إقليمية.
  • لا يمكن استخدام NEGs لربط المنافذ إلا من خلال اتصال PSC. ولن تعمل هذه القواعد إذا كانت الآلة الافتراضية للعميل تستدعي قاعدة توجيه موازن الحمولة للمنتِج مباشرةً. ويظهر ذلك في طريقة اختبار خدمة المنتج في هذا الدرس التطبيقي حول الترميز.
  • يجب أن تكون نقطة نهاية PSC ومجموعة خدمات المنتج في شبكتَي VPC مختلفتَين.

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

ad37cfc003475b7c.png

في شبكة VPC الخاصة بالمنتج، سيتم إنشاء جهازَي VM سيشغّلان خادمَي ويب، أحدهما يعمل على المنفذ 1000 والآخر يعمل على المنفذ 2000. سنختبر كل خدمة قبل إعداد NEG لجدول المنافذ وجهاز موازنة الحمل لمرور الشبكة الداخلية و"إرفاق الخدمة".

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

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

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

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

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) في "مركز عملائي" للحصول على مزيد من المعلومات.

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

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

من 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 على كل جهاز افتراضي من أجهزة الإنتاج.

ضبط الأجهزة الافتراضية

من 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 لحالات ربط المنافذ. دوِّن عنوانَي 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

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

في هذه المرحلة، من المفترض أن تكون هناك ثلاث نوفذات Cloud Shell مفتوحة. يجب أن يكون لدى أحدهما جلسة مفتوحة مع portmap-vm1. يجب أن يكون لديك جلسة مفتوحة مع portmap-vm2، ويجب أن تكون الجلسة الأخرى هي جلسة العمل.

إنشاء جهاز افتراضي تجريبي

من Cloud Shell

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

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

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

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

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

  • حالات استخدام ميزة "ربط المنافذ" في Private Service Connect
  • المزايا الرئيسية لميزة "ربط منفذ PSC"
  • متطلبات الشبكة
  • أنشئ خدمة منتج في Private Service Connect باستخدام ربط المنافذ.
  • إنشاء نقطة نهاية Private Service Connect
  • إجراء مكالمات من خلال نقطة نهاية Private Service Connect إلى خدمة منتج