Private Service Connect: Cloud Run की मदद से सेवाओं को पब्लिश और इस्तेमाल करने के लिए, Private Service Connect का इस्तेमाल करना

इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
schedule61 मिनट
subjectपिछली बार 28 मार्च 2025 को अपडेट किया गया
account_circleLorin Price ने लिखा

Private Service Connect (पीएससी), Google Cloud नेटवर्किंग की एक सुविधा है. इसकी मदद से, उपभोक्ता अपने VPC नेटवर्क से मैनेज की जा रही सेवाओं को निजी तौर पर ऐक्सेस कर सकते हैं. इसी तरह, मैनेज की जाने वाली सेवाओं के प्रोड्यूसर, इन सेवाओं को अपने अलग वीपीएन नेटवर्क में होस्ट कर सकते हैं. साथ ही, अपने उपभोक्ताओं को निजी कनेक्शन भी दे सकते हैं.

Cloud Run, मैनेज किया जाने वाला एक कंप्यूट प्लैटफ़ॉर्म है. इसकी मदद से, कंटेनर को सीधे Google के स्केलेबल इंफ़्रास्ट्रक्चर पर चलाया जा सकता है.

Cloud Run को पीएससी सेवा के तौर पर दो अलग-अलग तरीकों से इस्तेमाल किया जा सकता है.

  1. Google API के लिए PSC की मदद से, Cloud Run के दिए गए run.app यूआरएल से Cloud Run को कॉल करके
  2. कस्टम पीएससी प्रोड्यूसर सेवा की मदद से, जहां Cloud Run को सर्वरलेस एनईजी के साथ इंटरनल ऐप्लिकेशन लोड बैलेंसर के ज़रिए, सेवा अटैचमेंट के ज़रिए एक्सपोज़ किया जाता है.

इस कोडलैब में, इन दोनों स्थितियों के लिए PSC के साथ Cloud Run को सेट अप करने का तरीका बताया गया है

आपको क्या सीखने को मिलेगा

  • Cloud Run पर बुनियादी ऐप्लिकेशन डिप्लॉय करना
  • Cloud Run के इन्ग्रेस और एग्ज़िट कंट्रोल
  • सर्वरलेस एनईजी के साथ इंटरनल ऐप्लिकेशन लोड बैलेंसर की मदद से, Cloud Run को डिप्लॉय करना
  • सेवा अटैचमेंट की मदद से पीएससी प्रोड्यूसर सेवा सेट अप करना
  • पीएससी एंडपॉइंट डिप्लॉय करना

आपको इन चीज़ों की ज़रूरत होगी

  • मालिक की अनुमतियां वाला Google Cloud प्रोजेक्ट

2. कोडलैब की टोपोलॉजी

455a040761a8fab9.png

इस कोडलैब में, आपको दो Cloud Run सेवाएं डिप्लॉय करनी होंगी. इन्हें PSC की मदद से ऐक्सेस किया जा सकेगा. पहली सेवा, PSC के साथ कस्टम पब्लिश की गई सेवा के तौर पर और दूसरी सेवा, Google API के लिए PSC के तौर पर. आपको दो वीपीसी बनाने होंगे, एक कंज्यूमर-वीपीसी और एक प्रोड्यूसर-वीपीसी. सबसे पहले, आपको Hello World Cloud Run सेवा को डिप्लॉय करना होगा. इसके बाद, उसे प्रोड्यूसर-वीपीसी में रीजनल इंटरनल ऐप्लिकेशन लोड बैलेंसर और सर्वरलेस एनईजी के ज़रिए ऐक्सेस किया जा सकेगा. आपको यह पुष्टि करनी होगी कि सेवा, प्रोड्यूसर-क्लाइंट के ज़रिए लोड बैलेंसर के ज़रिए काम कर रही है. इसके बाद ही, Cloud Run सेवा को सेट अप किया जा सकता है, ताकि उसे सेवा अटैचमेंट के ज़रिए पीएससी प्रोड्यूसर सेवा के तौर पर ऐक्सेस किया जा सके.

अब कंज्यूमर-वीपीसी पर जाएं. आपको एक पीएससी एंडपॉइंट डिप्लॉय करना होगा, जो प्रोड्यूसर-वीपीसी में सेट अप किए गए Cloud Run सेवा अटैचमेंट पर ले जाता हो. इसके बाद, आपको यह पुष्टि करनी होगी कि सेवा को पीएससी के ज़रिए, उपभोक्ता-वीपीसी में उपभोक्ता-क्लाइंट से ऐक्सेस किया जा सकता है. इसके बाद, आपको एक और Cloud Run सेवा बनानी होगी, जो आपके PSC एंडपॉइंट को कॉल करती है. आखिर में, आपको Google API के लिए PSC एंडपॉइंट डिप्लॉय करना होगा. कंज्यूमर-क्लाइंट से, आपको Cloud Run के दिए गए यूआरएल के ज़रिए Cloud Run को ऐक्सेस करना होगा. यह यूआरएल, Google API एंडपॉइंट के लिए PSC का इस्तेमाल करेगा.

3. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं आता है, तो कोई दूसरा आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास खुद का कोई दूसरा नाम चुनने का विकल्प भी है. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट के दौरान बना रहता है.
  • आपकी जानकारी के लिए बता दें कि तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने के लिए, आपसे कोई शुल्क नहीं लिया जाएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है या प्रोजेक्ट को मिटाया जा सकता है. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले कार्यक्रम में शामिल हो सकते हैं.

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से रिमोट तौर पर इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब में आपको Google Cloud Shell का इस्तेमाल करना होगा. यह Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है.

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 नेटवर्क

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

नेटवर्क पता बदलने के मकसद से, पीएससी सबनेट को पीएससी सेवा अटैचमेंट से जोड़ा जाएगा. प्रोडक्शन के इस्तेमाल के उदाहरणों के लिए, इस सबनेट का साइज़ सही होना चाहिए, ताकि उससे अटैच किए गए एंडपॉइंट की संख्या को मैनेज किया जा सके. ज़्यादा जानकारी के लिए, पीएससी एनएटी सबनेट साइज़िंग दस्तावेज़ देखें.

प्रोड्यूसर नेटवर्क के लिए फ़ायरवॉल की नीति और फ़ायरवॉल के नियम बनाना

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

आईएपी को अपने वीएम इंस्टेंस से कनेक्ट करने की अनुमति देने के लिए, फ़ायरवॉल का ऐसा नियम बनाएं जो:

  • यह उन सभी वीएम इंस्टेंस पर लागू होता है जिन्हें आपको आईएपी का इस्तेमाल करके ऐक्सेस करना है.
  • 35.235.240.0/20 आईपी रेंज से आने वाले ट्रैफ़िक को अनुमति देता है. इस रेंज में वे सभी आईपी पते शामिल होते हैं जिनका इस्तेमाल 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

6. Hello World Cloud Run बनाना

Python में सैंपल ऐप्लिकेशन लिखने के लिए, यहां दिए गए निर्देशों का पालन करें. Cloud Shell में ये कमांड चलाएं. "सैंपल ऐप्लिकेशन लिखें" में तीसरा चरण पूरा करने के बाद, इस कोडलैब पर वापस आएं. इसके बाद, सोर्स से Cloud Run पर डिप्लॉय करने के लिए, नीचे दिए गए निर्देशों का पालन करें.

Cloud Run सेवा को डिप्लॉय करने से पहले, यह पक्का करें कि आपके डिफ़ॉल्ट Compute सेवा खाते के पास ज़रूरी अनुमतियां हों. इसके लिए, यह कमांड चलाएं.

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 सेवा को दिए गए run.app यूआरएल के बिना डिप्लॉय किया जाएगा. हम इस सेवा के लिए यूआरएल का इस्तेमाल नहीं करेंगे. इस कोडलैब को पब्लिश करने के समय, यह सुविधा अब भी झलक के तौर पर उपलब्ध है.

आगे बढ़ने से पहले, अपने Cloud Shell की मुख्य डायरेक्ट्री पर वापस जाएं.

Cloud Shell से

cd ..

7. इंटरनल ऐप्लिकेशन लोड बैलेंसर की मदद से, Hello World Cloud Run को एक्सपोज़ करना

अपने लोड बैलेंसर के फ़ॉरवर्डिंग नियम के लिए, स्टैटिक इंटरनल आईपी पता रिज़र्व करें.

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

आपने अभी जो आईपी पता बनाया है उसे नोट करें.

रीजनल इंटरनल ऐप्लिकेशन लोड बैलेंसर बनाना

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 को टेस्ट करना

टेस्ट VM बनाना

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> को उस आईपी पते से बदलें जिसे आपने पहले बनाया था (उदाहरण के लिए, 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

इसके बाद, उपभोक्ता के एनवायरमेंट में पीएससी एंडपॉइंट को कॉन्फ़िगर करने के लिए, सेवा अटैचमेंट यूआरआई को वापस पाएं और नोट करें.

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 नेटवर्क

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 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. Hello World Cloud Run सेवा के लिए PSC एंडपॉइंट बनाना

इसके बाद, हम एक PSC एंडपॉइंट बनाएंगे और उसे उस Cloud Run सेवा से कनेक्ट करेंगे जिसे आपने सेवा अटैचमेंट की मदद से एक्सपोज़ किया है. आपको उस सेवा अटैचमेंट यूआरआई का इस्तेमाल करना होगा जिसे आपने इस सेक्शन में पहले नोट किया था. पक्का करें कि gcloud कमांड में यूआरआई का फ़ॉर्मैट, आपके यूआरआई से मेल खाता हो.

पीएससी एंडपॉइंट बनाना

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

आपने अभी जो पीएससी एंडपॉइंट बनाया है उसका आईपी पता पाएं. अगले चरण में, एंडपॉइंट की जांच करने के लिए आईपी पते का इस्तेमाल किया जाएगा.

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. कंज्यूमर-क्लाइंट वीएम बनाना और एंडपॉइंट से कनेक्टिविटी की जांच करना

उपभोक्ता-क्लाइंट VM बनाना

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> को असल आईपी पते से बदलें.

उपभोक्ता-क्लाइंट VM से

curl <cloudrun-service-ip>

अनुमानित आउटपुट

Hello World!

उपभोक्ता-क्लाइंट VM से

exit

13. Cloud Run लूप सेवा बनाना

इसके बाद, हम एक Cloud Run सेवा बनाएंगे, जो पीएससी के ज़रिए एक्सपोज़ की गई पिछली Cloud Run HelloWorld सेवा को कॉल करने के लिए, उपभोक्ता-vpc में निजी कॉल बैक करेगी.

PHP में लूप ऐप्लिकेशन लिखने के लिए, यहां दिए गए "सैंपल ऐप्लिकेशन लिखें" निर्देशों का पालन करें. helloworld-php के बजाय, अपनी डायरेक्ट्री का नाम cloudrun-loop रखें. Cloud Shell में ये कमांड चलाएं. दूसरे चरण में, अपनी index.php फ़ाइल में नीचे दिए गए PHP कोड का इस्तेमाल करें. जब आप Cloud Run पर डिप्लॉय करने के लिए तैयार हों, तब कोडलैब पर वापस आएं. इस चरण के लिए, दस्तावेज़ में दिए गए निर्देशों का पालन न करें.

अपनी index.php फ़ाइल के लिए इस कोड का इस्तेमाल करें. <cloudrun-service-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 डिप्लॉयमेंट में नेटवर्क और सबनेट की जानकारी दे रहे हैं, क्योंकि PSC एंडपॉइंट को ऐक्सेस करने के लिए, Cloud Run ट्रैफ़िक को वीपीसी में वापस जाना होगा. हम Cloud Run को सीधे VPC से बाहर भेजने के लिए, cloudrun-egress सबनेट का इस्तेमाल करने का निर्देश दे रहे हैं. हम सभी ट्रैफ़िक को सीधे 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 सेवा डिप्लॉय होने के बाद, यह https://cloudrun-loop-<projectnum>.<region>.run.app फ़ॉर्मैट में सेवा का यूआरएल देगी. इस यूआरएल को भी नोट करें, क्योंकि अगले चरण में इसकी जांच की जाएगी.

14. Cloud Run यूआरएल की मदद से, CloudRun-Loop से कनेक्टिविटी की जांच करना

Cloud Shell से

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

<Cloud-Run-ServiceURL> की जगह, पिछले चरण में नोट किए गए सेवा यूआरएल का इस्तेमाल करें.

उपभोक्ता-क्लाइंट VM से

curl <Cloud-Run-ServiceURL>

अनुमानित आउटपुट

Hello World!

इस नतीजे से पता चलता है कि हमारी CloudRun-Loop सेवा, Hello World Cloud Run सेवा से कनेक्ट किए गए पीएससी एंडपॉइंट को कॉल करने के लिए, consumer-vpc में वापस कॉल कर रही है. हालांकि, इस समय हमारा कंज्यूमर-क्लाइंट VM, हमारे सार्वजनिक Cloud Run यूआरएल को कॉल करने के लिए, Cloud NAT के ज़रिए इंटरनेट से कनेक्ट हो रहा है. हम यूआरएल पर एक डीआईजी चला सकते हैं, ताकि यह पता चल सके कि यह किसी सार्वजनिक आईपी पते पर रीडायरेक्ट करेगा.

उपभोक्ता-क्लाइंट VM से

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

हम Google API एंडपॉइंट के लिए एक PSC बना सकते हैं, ताकि इस रिज़ॉल्यूशन को निजी में बदला जा सके. इससे, ट्रैफ़िक को सार्वजनिक इंटरनेट से दूर रखा जा सकेगा.

उपभोक्ता-क्लाइंट VM से

exit

15. Google API एंडपॉइंट के लिए पीएससी बनाना

यह पीएससी एंडपॉइंट, उस एंडपॉइंट से अलग है जिसे हमने पहले बनाया था. Google API के लिए PSC, Google API के बंडल पर ले जाता है. यह बंडल, सभी API या VPC-SC के साथ काम करने वाले API हो सकते हैं. आईपी पता, किसी क्षेत्रीय सबनेट से नहीं लिया जाता. इसके बजाय, इसे एक /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. run.app के लिए Cloud DNS निजी ज़ोन बनाना

Google API एंडपॉइंट के लिए PSC बनाने पर, googleapis.com डोमेन के तहत आने वाले सभी एपीआई के लिए, Cloud Run का निजी डीएनएस ज़ोन बन जाएगा. Cloud Run, run.app का इस्तेमाल करता है. इसलिए, हमें Google API एंडपॉइंट के लिए, run.app को अपने पीएससी से मैप करने के लिए एक और निजी ज़ोन बनाना होगा.

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. निजी डीएनएस रिज़ॉल्यूशन की जांच करना

हम अपने कंज्यूमर-क्लाइंट VM में वापस लॉग इन करेंगे और फिर से dig चलाएंगे. इसके बाद, हमें यह दिखेगा कि हमारा Cloud Run यूआरएल, Google API के एंडपॉइंट के लिए हमारे PSC पर रीडायरेक्ट हो जाएगा.

Cloud Shell से

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

सबसे पहले, हम डीएनएस कैश मेमोरी मिटाएंगे. <Cloud-Run-ServiceURL> की जगह, सेवा का वह यूआरएल डालें जिसे आपने पहले नोट किया था.

उपभोक्ता-क्लाइंट VM से

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

हालांकि, कर्ल पहले की तरह ही काम करेगा.

उपभोक्ता-क्लाइंट VM से

curl <CloudRun-Loop-ServiceURL>

अनुमानित आउटपुट

Hello World!

उपभोक्ता-क्लाइंट VM से

dig <CloudRun-Loop-ServiceURL>

dig से यह पता चलना चाहिए कि हमारी Cloud Run Loop सेवा, अब Google APIs एंडपॉइंट के लिए हमारे PSC को रिज़ॉल्व कर रही है.

आउटपुट का सैंपल

; <<>> 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 को डिप्लॉय करना
  • सेवा अटैचमेंट की मदद से पीएससी प्रोड्यूसर सेवा सेट अप करना
  • पीएससी एंडपॉइंट डिप्लॉय करना