Private Service Connect: استخدام Private Service Connect لنشر الخدمات واستخدامها باستخدام Cloud Run

لمحة عن هذا الدرس التطبيقي حول الترميز
schedule61 دقيقة
subjectتاريخ التعديل الأخير: 28 مارس 2025
account_circleتأليف: Lorin Price

‫Private Service Connect (PSC) هي إحدى ميزات شبكة Google Cloud التي تتيح للمستهلكين الوصول إلى الخدمات المُدارة بشكل خاص من داخل شبكة VPC. وبالمثل، يسمح هذا الإصدار لمطوّري الخدمات المُدارة باستضافة هذه الخدمات في شبكات VPC منفصلة خاصة بهم وتوفير اتصال خاص للمستهلكين.

‫Cloud Run هو نظام أساسي مُدار للحوسبة يتيح لك تشغيل الحاويات مباشرةً على البنية الأساسية القابلة للتوسّع من Google.

يمكن استخدام Cloud Run كخدمة PSC بطريقتَين مختلفتَين.

  1. من خلال PSC لواجهات برمجة تطبيقات Google من خلال استدعاء Cloud Run من خلال عنوان URL run.app المقدَّم من Cloud Run
  2. من خلال خدمة مُنشئ PSC مخصّصة يتم فيها عرض Cloud Run من خلال مرفق خدمة عبر "جهاز موازنة حمل التطبيقات الداخلي" مع NEG بدون خادم

سيستكشف هذا الدرس التطبيقي حول الترميز كيفية إعداد Cloud Run باستخدام PSC لكلا هذين السيناريوهَين.

  • نشر التطبيقات الأساسية على Cloud Run
  • عناصر التحكّم في الإدخال والإخراج في Cloud Run
  • نشر Cloud Run من خلال جهاز موازنة حمل التطبيقات الداخلي مع NEG بدون خادم
  • إعداد خدمة منتج في "المحتوى التالي" من خلال مرفق الخدمة
  • نشر نقاط نهاية PSC

المتطلبات

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

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

455a040761a8fab9.png

في هذا الدليل التعليمي حول رموز البرامج، ستنشر خدمتَي 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- الإعداد والمتطلبات

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

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