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

1. परिचय

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

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

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

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

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

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

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

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

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

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

455a040761a8fab9.png

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी 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 नेटवर्क

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. लोड बैलेंसर के ज़रिए Cloud Run पर डिप्लॉय किए गए Hello World ऐप्लिकेशन को टेस्ट करना

टेस्ट वीएम बनाएं

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.

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

इस चरण में, हम एक पीएससी एंडपॉइंट बनाएंगे और उसे उस 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> को असल आईपी पते से बदलें.

उपयोगकर्ता-क्लाइंट वीएम से

curl <cloudrun-service-ip>

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

Hello World!

उपयोगकर्ता-क्लाइंट वीएम से

exit

13. Cloud Run लूप सर्विस बनाना

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

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

अपनी index.php फ़ाइल के लिए इस कोड का इस्तेमाल करें. <cloudrun-service-ip> की जगह, अपने पीएससी एंडपॉइंट का वह आईपी पता डालें जिसकी आपने पिछले चरण में जांच की थी.

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 के ट्रैफ़िक को पीएससी एंडपॉइंट को ऐक्सेस करने के लिए, वीपीसी में वापस जाना होता है. हम Cloud Run को डायरेक्ट वीपीसी इग्रेस के लिए, cloudrun-egress सबनेट का इस्तेमाल करने का निर्देश दे रहे हैं. हम पूरे ट्रैफ़िक को डायरेक्ट वीपीसी इग्रेस सबनेट के ज़रिए, वीपीसी में वापस भेज रहे हैं.

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> की जगह, पिछले चरण में नोट किया गया सेवा का यूआरएल डालें.

उपयोगकर्ता-क्लाइंट वीएम से

curl <Cloud-Run-ServiceURL>

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

Hello World!

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

उपयोगकर्ता-क्लाइंट वीएम से

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 APIs एंडपॉइंट के लिए एक पीएससी बना सकते हैं, ताकि इस रिज़ॉल्यूशन को निजी में बदला जा सके. इससे ट्रैफ़िक को सार्वजनिक इंटरनेट से दूर रखा जा सकेगा.

उपयोगकर्ता-क्लाइंट वीएम से

exit

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

यह पीएससी एंडपॉइंट, उस एंडपॉइंट से अलग है जिसे हमने पहले बनाया था. Google APIs के लिए पीएससी, Google APIs के बंडल की ओर इशारा करता है. इसमें सभी एपीआई या वीपीसी-एससी के साथ काम करने वाले एपीआई शामिल होते हैं. आईपी पते को किसी क्षेत्रीय सबनेट से नहीं लिया जाता है. इसके बजाय, इसे एक ग्लोबल /32 आईपी पते के तौर पर बनाया जाता है. यह किसी भी मौजूदा वीपीसी सबनेट, पीयर किए गए वीपीसी सबनेट या हाइब्रिड रास्तों से ओवरलैप नहीं हो सकता.

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 Private Zone बनाएं

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

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 कमांड चलाएंगे. अब हमें दिखेगा कि हमारा Cloud Run यूआरएल, Google APIs के लिए हमारे पीएससी एंडपॉइंट पर रीडायरेक्ट हो जाएगा.

Cloud Shell से

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

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

उपयोगकर्ता-क्लाइंट वीएम से

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

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

उपयोगकर्ता-क्लाइंट वीएम से

curl <CloudRun-Loop-ServiceURL>

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

Hello World!

उपयोगकर्ता-क्लाइंट वीएम से

dig <CloudRun-Loop-ServiceURL>

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

आउटपुट का उदाहरण

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