1. مقدمة
Private Service Connect (PSC) هي إحدى ميزات شبكة Google Cloud التي تتيح للمستهلكين الوصول إلى الخدمات المُدارة بشكل خاص من داخل شبكة VPC. وبالمثل، يسمح هذا الإصدار لمطوّري الخدمات المُدارة باستضافة هذه الخدمات في شبكات VPC منفصلة خاصة بهم وتوفير اتصال خاص للمستهلكين.
Cloud Run هو نظام أساسي مُدار للحوسبة يتيح لك تشغيل الحاويات مباشرةً على البنية الأساسية القابلة للتوسّع من Google.
يمكن استخدام Cloud Run كخدمة PSC بطريقتَين مختلفتَين.
- من خلال PSC لواجهات برمجة تطبيقات Google من خلال استدعاء Cloud Run من خلال عنوان URL run.app المقدَّم من Cloud Run
- من خلال خدمة مُنشئ PSC مخصّصة يتم فيها عرض Cloud Run من خلال مرفق خدمة عبر "جهاز موازنة حمل التطبيقات الداخلي" مع NEG بدون خادم
سيستكشف هذا الدرس التطبيقي حول الترميز كيفية إعداد Cloud Run باستخدام PSC لكلا هذين السيناريوهَين.
ما ستتعرّف عليه
- نشر التطبيقات الأساسية على Cloud Run
- عناصر التحكّم في الإدخال والإخراج في Cloud Run
- نشر Cloud Run من خلال جهاز موازنة حمل التطبيقات الداخلي مع NEG بدون خادم
- إعداد خدمة منتج في "المحتوى التالي" من خلال مرفق الخدمة
- نشر نقاط نهاية PSC
المتطلبات
- مشروع Google Cloud الذي يتضمّن أذونات المالك
2. طوبولوجيا الدرس التطبيقي حول الترميز
في هذا الدليل التعليمي حول رموز البرامج، ستنشر خدمتَي Cloud Run يمكن الوصول إليهما من خلال PSC، الأولى كخدمة مُنشَرة مخصّصة باستخدام PSC، والثانية كخدمة PSC لواجهات برمجة تطبيقات Google. ستُنشئ شبكتَي VPC، وهما شبكة VPC للمستهلك وشبكة VPC للمنتِج. ستنشر أولاً خدمة Hello World Cloud Run وستتيح الوصول إليها من خلال أداة Regional Internal Application Load Balancer وNEG بدون خادم في producer-vpc. عليك التأكّد من أنّ الخدمة تعمل من خلال موازن الحمولة عبر العميل-المنتج قبل إعداد خدمة Cloud Run للوصول إليها كخدمة منتج لـ PSC من خلال مرفق الخدمة.
بالانتقال إلى consumer-vpc، ستنشر نقطة نهاية PSC تشير إلى مرفق خدمة Cloud Run الذي أعددناه في producer-vpc. بعد ذلك، عليك التحقّق من إمكانية الوصول إلى الخدمة من خلال PSC من عميل مستهلك في شبكة VPC للمستهلك. بعد ذلك، عليك إنشاء خدمة أخرى على Cloud Run تستدعي نقطة نهاية PSC. أخيرًا، عليك نشر نقطة نهاية PSC لواجهات برمجة تطبيقات Google. من العميل، يمكنك الوصول إلى Cloud Run من خلال عنوان URL المقدَّم في Cloud Run، والذي سيستخدم PSC لنقطة نهاية Google APIs.
3- الإعداد والمتطلبات
إعداد البيئة حسب السرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google. ويمكنك تعديلها في أي وقت.
- يكون معرّف المشروع فريدًا في جميع مشاريع 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، ما يُحسِّن بشكل كبير أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا الدليل التعليمي للترميز داخل متصفّح. لست بحاجة إلى تثبيت أي تطبيق.
4. قبل البدء
تفعيل واجهات برمجة التطبيقات
في Cloud Shell، تأكَّد من إعداد مشروعك وضبط المتغيّرات.
gcloud auth login gcloud config list project gcloud config set project [YOUR-PROJECT-ID] export projectid=[YOUR-PROJECT-ID] export projectnum=[YOUR-PROJECT-NUM] export region=us-central1 export zone=us-central1-a echo $projectid echo $projectnum echo $region echo $zone
تفعيل جميع الخدمات اللازمة
gcloud services enable compute.googleapis.com gcloud services enable run.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com
5- إنشاء شبكة VPC لصانع المحتوى
شبكة VPC
من Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
إنشاء شبكات فرعية
من Cloud Shell
gcloud compute networks subnets create producer-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region gcloud compute networks subnets create lb-proxy-subnet \ --network=producer-vpc \ --range=10.100.100.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.101.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
سيتم ربط الشبكة الفرعية لخدمة 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
6- إنشاء تطبيق Hello World على Cloud Run
اتّبِع التعليمات الواردة هنا لكتابة نموذج تطبيق بلغة Python. نفِّذ هذه الأوامر في Cloud Shell. بعد الانتهاء من الخطوة 3 في "كتابة نموذج التطبيق"، ارجع إلى هذا الدليل التعليمي واتّبِع التعليمات الواردة أدناه للنشر على Cloud Run من المصدر.
قبل نشر خدمة Cloud Run، تأكَّد من أنّ حساب خدمة Compute Engine التلقائي لديه الأذونات المناسبة من خلال تنفيذ الأمر التالي.
من Cloud Shell
gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder
ملاحظة: يفترض هذا الدليل التعليمي حول رموز البرامج أنّ مؤسستك لم تفعِّل سياسة المؤسسة "المشاركة المقيّدة بالنطاق". إذا كانت هذه السياسة مفعَّلة، عليك اتّخاذ خطوات إضافية لنشر Cloud Run مع المصادقة وضبط شاشة موافقة OAuth وإعداد IAP لخلفية موازن الحمولة. ننصحك باتّباع جميع خطوات الضبط هذه في بيئة الإنتاج.
من Cloud Shell
gcloud beta run deploy helloworld \ --source . \ --platform=managed \ --ingress=internal \ --allow-unauthenticated \ --no-default-url \ --region=$region
سيؤدي استخدام العلامة --no-default-url
إلى نشر خدمة Cloud Run بدون عنوان URL الذي تم تقديمه على run.app. ولن نستخدم عنوان URL لهذه الخدمة. اعتبارًا من تاريخ نشر هذا الدليل التعليمي حول رموز البرامج، لا تزال هذه الميزة قيد المعاينة.
قبل المتابعة، ارجع إلى الدليل الرئيسي في Cloud Shell.
من Cloud Shell
cd ..
7- إتاحة تطبيق Hello World على Cloud Run من خلال جهاز موازنة حمل داخلي للتطبيقات
احجز عنوان IP ثابتًا داخليًا لقاعدة إعادة التوجيه في جهاز موازنة الحمل.
في Cloud Shell
gcloud compute addresses create cloudrun-ip \ --region=$region \ --subnet=producer-subnet gcloud compute addresses describe cloudrun-ip --region=$region
مثال على النتائج
address: 10.0.1.31 addressType: INTERNAL creationTimestamp: '2025-03-17T09:04:06.620-07:00' description: '' id: 'xxxx' kind: compute#address labelFingerprint: xxxx name: cloudrun-ip networkTier: PREMIUM purpose: GCE_ENDPOINT region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/addresses/cloudrun-ip status: RESERVED subnetwork: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/producer-subnet
دوِّن عنوان IP الذي أنشأته للتو.
إنشاء جهاز موازنة حمل التطبيقات الداخلي على مستوى منطقة معيّنة
في Cloud Shell
gcloud compute network-endpoint-groups create cloudrun-producer-neg \ --region=$region \ --network-endpoint-type=serverless \ --cloud-run-service=helloworld gcloud compute backend-services create cloudrun-producer-bes \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --region=$region gcloud compute backend-services add-backend cloudrun-producer-bes \ --region=$region \ --network-endpoint-group=cloudrun-producer-neg \ --network-endpoint-group-region=$region gcloud compute url-maps create producer-urlmap \ --default-service=cloudrun-producer-bes \ --region=$region gcloud compute target-http-proxies create producer-http-proxy \ --url-map=producer-urlmap \ --region=$region
في Cloud Shell
gcloud compute forwarding-rules create cloudrun-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=producer-subnet \ --address=cloudrun-ip \ --target-http-proxy=producer-http-proxy \ --target-http-proxy-region=$region \ --region=$region \ --ports=80 \ --allow-global-access
8. اختبار تطبيق Hello World على Cloud Run المعروض من خلال جهاز موازنة الحمل
إنشاء جهاز افتراضي تجريبي
من Cloud Shell
gcloud compute instances create producer-client \ --zone=$zone \ --subnet=producer-subnet \ --no-address \ --scopes=cloud-platform
في Cloud Shell
gcloud compute ssh \ --zone "$zone" "producer-client" \ --tunnel-through-iap \ --project $projectid
استبدِل <loadbalancer-ip> بعنوان IP الذي أنشأته سابقًا (على سبيل المثال 10.0.0.2).
اختبار Hello World
في producer-vm
curl <loadbalancer-ip>
الناتج المتوقّع
Hello World!
اخرج من الجهاز الظاهري.
في producer-vm
exit
9- إنشاء مرفق الخدمة
من Cloud Shell
gcloud compute service-attachments create cloudrun-attachment \ --region=$region \ --producer-forwarding-rule=cloudrun-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$projectid=5 \ --nat-subnets=psc-nat-subnet
بعد ذلك، استرجع عنوان URL لمرفق الخدمة وضَع ملاحظة به لإعداد نقطة نهاية PSC في بيئة المستهلِك.
في Cloud Shell
gcloud compute service-attachments describe cloudrun-attachment --region=$region
مثال على الناتج المتوقّع
connectionPreference: ACCEPT_MANUAL consumerAcceptLists: - connectionLimit: 5 projectIdOrNum: $projectid creationTimestamp: '2025-03-10T08:49:08.134-07:00' description: '' enableProxyProtocol: false fingerprint: -F0Kpe3Fi8o= id: '2679595584727463707' kind: compute#serviceAttachment name: cloudrun-attachment natSubnets: - https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet pscServiceAttachmentId: high: 'xxxxx' low: 'xxxx' 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/cloudrun-attachment targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$projectid/forwardingRules/cloudrun-fr
10. إنشاء شبكة VPC للمستهلك
شبكة VPC
من Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
إنشاء شبكة فرعية
من Cloud Shell
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --range=10.0.0.0/24 \ --region=$region \ --enable-private-ip-google-access gcloud compute networks subnets create cloudrun-egress \ --network=consumer-vpc \ --range=10.0.1.0/24 \ --region=$region \ --enable-private-ip-google-access
إنشاء Cloud NAT
من Cloud Shell
gcloud compute routers create central-cr \ --network=consumer-vpc \ --region=$region gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
إنشاء سياسة جدار حماية شبكة المستهلك وقواعد جدار الحماية
سننشئ سياسة أخرى لجدار حماية الشبكة لشبكة 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
11. إنشاء نقطة نهاية Private Service Connect لخدمة Hello World على Cloud Run
في هذه المرحلة، سننشئ نقطة نهاية PSC وسنربطها بخدمة Cloud Run التي عرضتها من خلال "مرفق الخدمة". ستستخدم عنوان URL المرفق بالخدمة الذي سجّلته سابقًا في هذا القسم. تأكَّد من أنّ تنسيق معرّف URI في الأمر gcloud يتطابق مع معرّف URI.
إنشاء نقطة نهاية PSC
من Cloud Shell
gcloud compute addresses create cloudrun-service-ip --region=$region --subnet=consumer-subnet --ip-version=IPV4 gcloud compute forwarding-rules create cloudrun-ep --region=$region --network=consumer-vpc --address=cloudrun-service-ip --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment
احصل على عنوان IP لنقطة نهاية PSC التي أنشأتها للتو. ستستخدم عنوان IP في الخطوة التالية لاختبار نقطة النهاية.
من Cloud Shell
gcloud compute addresses list --filter="name=cloudrun-service-ip"
مثال على الناتج المتوقّع
NAME: cloudrun-service-ip ADDRESS/RANGE: 10.0.0.2 TYPE: INTERNAL PURPOSE: GCE_ENDPOINT NETWORK: REGION: us-central1 SUBNET: consumer-subnet STATUS: IN_USE
12. إنشاء جهاز افتراضي خاص بعملاء المستهلكين واختبار الاتصال بنقطة النهاية
إنشاء جهاز افتراضي لعميل المستهلك
من Cloud Shell
gcloud compute instances create consumer-client \ --zone=$zone \ --subnet=consumer-subnet \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update sudo apt-get install dnsutils -y'
اختبار إمكانية الاتصال
من Cloud Shell
gcloud compute ssh \ --zone "$zone" "consumer-client" \ --tunnel-through-iap \ --project $projectid
استبدِل <cloudrun-service-ip> بعنوان IP الفعلي.
من جهاز افتراضي للعميل
curl <cloudrun-service-ip>
الناتج المتوقّع
Hello World!
من جهاز افتراضي خاص بالعميل
exit
13. إنشاء خدمة حلقة Cloud Run
بعد ذلك، سننشئ خدمة Cloud Run ستجري مكالمة خاصة إلى consumer-vpc للاتصال بخدمة HelloWorld السابقة في Cloud Run التي عرضناها من خلال PSC.
اتّبِع تعليمات "كتابة نموذج التطبيق" هنا لكتابة تطبيق حلقة في PHP. بدلاً من helloworld-php، أدخِل cloudrun-loop كاسم للدليل. نفِّذ هذه الأوامر في Cloud Shell. في الخطوة الثانية، استخدِم رمز PHP أدناه في ملف index.php. يمكنك الرجوع إلى ورشة رموز البرامج عندما تكون مستعدًا للنشر على Cloud Run. لا اتّبِع التعليمات الواردة في المستندات لتنفيذ هذه الخطوة.
استخدِم هذا الرمز في ملف index.php. استبدِل <cloudrun-service-ip> بعنوان IP لنقطة نهاية PSC التي اختبرتَها في الخطوة السابقة.
من Cloud Shell
<?php if(!function_exists('curl_init')) { die('cURL not available!'); } $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/'); curl_setopt($curl, CURLOPT_FAILONERROR, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($curl); if ($output === FALSE) { echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL; } else { echo $output; } ?>
سنحدّد شبكة وشبكة فرعية في عملية نشر Cloud Run هذه لأنّه يجب أن تخرج حركة مرور Cloud Run مرة أخرى إلى شبكة VPC للوصول إلى نقطة نهاية PSC. نحن نوجّه Cloud Run لاستخدام الشبكة الفرعية cloudrun-egress من أجل الخروج المباشر من سحابة VPC. نحن نوجّه كلّ الزيارات للخروج من خلال الشبكة الفرعية لمخرج شبكة VPC المباشر إلى شبكة VPC.
من Cloud Shell
gcloud run deploy cloudrun-loop \ --source . \ --platform=managed \ --ingress=internal \ --allow-unauthenticated \ --vpc-egress=all-traffic \ --network=consumer-vpc \ --subnet=cloudrun-egress \ --region=$region
عند انتهاء خدمة Cloud Run من النشر، ستقدّم عنوان URL للخدمة بالتنسيق https://cloudrun-loop-<projectnum>.<region>.run.app. يُرجى العلم أنّه سيتم اختبار عنوان URL هذا أيضًا في الخطوة التالية.
14. اختبار الاتصال بخدمة CloudRun-Loop من خلال عنوان URL الخاص بخدمة Cloud Run
من Cloud Shell
gcloud compute ssh \ --zone "$zone" "consumer-client" \ --tunnel-through-iap \ --project $projectid
استبدِل <Cloud-Run-ServiceURL> بعنوان URL للخدمة الذي سجّلته في الخطوة السابقة.
من جهاز افتراضي للعميل
curl <Cloud-Run-ServiceURL>
الناتج المتوقّع
Hello World!
تُظهر هذه النتيجة أنّ خدمة CloudRun-Loop تتصل بنجاح بشبكة consumer-vpc لطلب نقطة نهاية PSC المتصلة بخدمة Hello World Cloud Run. في هذه المرحلة، يخرج جهاز الكمبيوتر الظاهري الخاص بالعميل إلى الإنترنت من خلال Cloud NAT لإجراء مكالمة إلى عنوان URL العلني لخدمة Cloud Run. يمكننا إجراء عملية dig على عنوان URL لإظهار أنّه سيتم تحليله إلى عنوان IP متاح للجميع.
من جهاز الكمبيوتر الظاهري للعميل
dig <Cloud-Run-ServiceURL>
مثال على النتائج
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1938 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;https://cloudrun-loop-<projectnum>.<region>.run.app. IN A ;; ANSWER SECTION: https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.38.53 https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.36.53 https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.32.53 https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.34.53 ;; Query time: 4 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Tue Mar 11 19:05:36 UTC 2025 ;; MSG SIZE rcvd: 147
يمكننا إنشاء نقطة نهاية PSC لنقطة نهاية Google APIs لتغيير هذا القرار إلى خاص للحفاظ على الزيارات خارج الإنترنت العام.
من جهاز افتراضي للعميل
exit
15. إنشاء نقطة نهاية لخدمة Private Service Connect في Google APIs
تختلف نقطة نهاية PSC هذه عن النقطة التي أنشأناها سابقًا. تشير واجهة برمجة التطبيقات PSC لواجهات برمجة تطبيقات Google إلى حِزمة من واجهات برمجة تطبيقات Google (إما جميع واجهات برمجة التطبيقات أو واجهات برمجة التطبيقات المتوافقة مع VPC-SC). لا يتم الحصول على عنوان IP من شبكة فرعية إقليمية، بل يتم إنشاؤه كعنوان IP واحد /32 عالمي لا يمكن أن يتداخل مع أي شبكات فرعية حالية لشبكة VPC أو شبكات فرعية مرتبطة بشبكة VPC أو طرق مختلطة.
من Cloud Shell
export pscgoogip=100.100.100.100 echo $pscgoogip gcloud compute addresses create psc-goog-ep-ip \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=$pscgoogip \ --network=consumer-vpc
من Cloud Shell
gcloud compute forwarding-rules create psc4googapi \ --global \ --network=consumer-vpc \ --address=psc-goog-ep-ip \ --target-google-apis-bundle=all-apis
16. إنشاء منطقة خاصة في Cloud DNS لخدمة run.app
عند إنشاء نقطة نهاية PSC لواجهات برمجة تطبيقات Google، سيتم إنشاء منطقة نظام أسماء النطاقات (DNS) الخاص في Cloud Run لجميع واجهات برمجة التطبيقات التي تندرج ضمن نطاق googleapis.com. بما أنّ Cloud Run يستخدم run.app، سنحتاج إلى إنشاء منطقة خاصة أخرى لربط run.app بنقطة نهاية PSC لواجهات برمجة تطبيقات Google.
من Cloud Shell
gcloud dns managed-zones create "cloudrun" \ --dns-name=run.app \ --description="run.app psc resolution" \ --visibility=private \ --networks=consumer-vpc gcloud dns record-sets transaction start \ --zone="cloudrun" gcloud dns record-sets transaction add $pscgoogip \ --name=*.run.app \ --ttl=300 \ --type=A \ --zone="cloudrun" gcloud dns record-sets transaction execute \ --zone="cloudrun"
17. اختبار دقة نظام أسماء النطاقات الخاص
سنسجّل الدخول مرة أخرى إلى جهاز الكمبيوتر الظاهري الخاص بعملاء المستهلكين ونُجري الأمر dig مرة أخرى، ومن المفترض أن نرى الآن أنّ عنوان URL الخاص بخدمة Cloud Run سيؤدّي إلى نقطة نهاية PSC لواجهات برمجة تطبيقات Google.
من Cloud Shell
gcloud compute ssh \ --zone "$zone" "consumer-client" \ --tunnel-through-iap \ --project $projectid
سنبدأ أولاً بمحو ذاكرة التخزين المؤقت لنظام أسماء النطاقات. استبدِل <Cloud-Run-ServiceURL> بعنوان URL للخدمة الذي سجّلته سابقًا.
من جهاز افتراضي خاص بالعميل
sudo resolvectl flush-caches curl <CloudRun-Loop-ServiceURL>
من المفترض أن يظلّ curl يعمل كما كان من قبل.
من جهاز افتراضي خاص بالعميل
curl <CloudRun-Loop-ServiceURL>
الناتج المتوقّع
Hello World!
من جهاز الكمبيوتر الظاهري للعميل
dig <CloudRun-Loop-ServiceURL>
من المفترض أن يُظهر dig أنّ خدمة Cloud Run Loop تُحدِّد الآن نقطة نهاية PSC لواجهات برمجة تطبيقات Google.
مثال على النتائج
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30179 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;https://cloudrun-loop-<projectnum>.<region>.run.app. IN A ;; ANSWER SECTION: https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 100.100.100.100 ;; Query time: 8 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP) ;; WHEN: Tue Mar 11 20:04:05 UTC 2025 ;; MSG SIZE rcvd: 99
نجح الإجراء!
18 خطوات إعادة الضبط
الخروج من مثيل الجهاز الافتراضي
exit
من Cloud Shell
gcloud dns record-sets delete *.run.app --zone="cloudrun" --type=A -q gcloud dns managed-zones delete "cloudrun" -q gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q gcloud compute forwarding-rules delete psc4googapi --global -q gcloud compute addresses delete psc-goog-ep-ip --global -q gcloud run services delete cloudrun-loop --region=$region -q gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/cloudrun-loop -q gcloud compute forwarding-rules delete cloudrun-ep --region=$region -q gcloud compute addresses delete cloudrun-service-ip --region=$region -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 routers nats delete central-nat --router=central-cr --region=$region -q gcloud compute routers delete central-cr --region=$region -q gcloud compute networks subnets delete consumer-subnet --region $region -q
من المحتمل أن يتعذّر تنفيذ الأمرَين التاليَين بسبب ظهور أخطاء "المورد قيد الاستخدام". تشير مستندات Cloud Run إلى أنّه في بعض الأحيان تستغرق Cloud Run من ساعة إلى ساعتَين لتحرير موارد الشبكة الفرعية بعد حذف خدمة Cloud Run. إذا تعذّر حذف الملفات، يمكنك تخطّي هذين الأمرَين والانتقال إلى القسم التالي، ثم العودة إلى هذا القسم لحذف الملفات بعد بعض الوقت.
من Cloud Shell
gcloud compute networks subnets delete cloudrun-egress --region $region -q gcloud compute networks delete consumer-vpc -q
من Cloud Shell
gcloud compute service-attachments delete cloudrun-attachment --region=$region -q gcloud compute instances delete producer-client --zone=$zone --project=$projectid -q gcloud compute forwarding-rules delete cloudrun-fr --region=$region -q gcloud compute target-http-proxies delete producer-http-proxy --region=$region -q gcloud compute url-maps delete producer-urlmap --region=$region -q gcloud compute backend-services delete cloudrun-producer-bes --region=$region -q gcloud compute network-endpoint-groups delete cloudrun-producer-neg --region=$region -q gcloud compute addresses delete cloudrun-ip --region=$region -q gcloud run services delete helloworld --region=$region -q gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/helloworld -q gcloud artifacts repositories delete cloud-run-source-deploy --location=$region -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 lb-proxy-subnet --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete producer-subnet --region $region -q gcloud compute networks delete producer-vpc -q
19. تهانينا!
تهانينا على إكمال ورشة رموز البرامج.
المواضيع التي تناولناها
- نشر التطبيقات الأساسية على Cloud Run
- عناصر التحكّم في الإدخال والإخراج في Cloud Run
- نشر Cloud Run من خلال جهاز موازنة حمل التطبيقات الداخلي مع NEG بدون خادم
- إعداد خدمة منتج في "المحتوى التالي" من خلال مرفق الخدمة
- نشر نقاط نهاية PSC