Private Service Connect: PSC बैकएंड की मदद से, ग्लोबल Google API को ऐक्सेस करने के लिए कस्टम डोमेन का इस्तेमाल करना

1. परिचय

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

इस कोडलैब में, यह बताया गया है कि इंटरनल एफ़क्यूडीएन की मदद से Google Cloud Storage को ऐक्सेस करने के लिए, पीएससी बैकएंड कैसे सेट अप करें.

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

  • बुनियादी वीपीसी नेटवर्किंग इन्फ़्रास्ट्रक्चर डिप्लॉय करना
  • Google Cloud Storage में बेसिक बकेट डिप्लॉय करना
  • Google Cloud Storage के लिए, पीएससी बैकएंड के साथ क्रॉस-रीजन इंटरनल ऐप्लिकेशन लोड बैलेंसर डिप्लॉय करना

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

  • मालिक की अनुमतियों वाला Google Cloud प्रोजेक्ट
  • संगठन की ये नीतियां, Google Cloud प्रोजेक्ट में लागू नहीं की जाती हैं: शील्डेड वीएम

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

edffc1205f998be9.png

इस कोडलैब में, वीपीसी नेटवर्क, सबनेट, निजी डीएनएस ज़ोन, फ़ायरवॉल के नियम, Google Cloud Storage बकेट, सैंपल फ़ाइल, और टेस्ट वीएम डिप्लॉय किए जाएंगे. इसके बाद, Google Cloud Storage के लिए पीएससी बैकएंड के साथ क्रॉस-रीजनल ऐप्लिकेशन लोड बैलेंसर डिप्लॉय करें. आखिर में, Google Cloud Storage बकेट में मौजूद फ़ाइल से कनेक्टिविटी की जांच करें.

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

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.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 आइकॉन पर क्लिक करें:

Cloud Shell चालू करें

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

Google 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 region1=us-central1
export zone1=us-central1-a
export region2=us-south1
echo $projectid
echo $region1
echo $zone1
echo $region2

सभी ज़रूरी सेवाएं चालू करें

gcloud services enable compute.googleapis.com 
gcloud services enable networkmanagement.googleapis.com 
gcloud services enable storage.googleapis.com 
gcloud services enable dns.googleapis.com

5. वीपीसी नेटवर्क बनाना

वह वीपीसी नेटवर्क बनाएं जहां आपका वीएम क्लाइंट और लोड बैलेंसिंग कॉम्पोनेंट होस्ट किए जाएंगे.

VPC नेटवर्क

Cloud Shell से

gcloud compute networks create myvpc \
    --subnet-mode=custom \
    --bgp-routing-mode=global 

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

सबनेट बनाना

Cloud Shell से

gcloud compute networks subnets create $region2-subnet \
    --network=myvpc \
    --range=10.100.0.0/24 \
    --region=$region2

gcloud compute networks subnets create $region2-proxy-subnet \
    --network=myvpc \
    --range=10.100.100.0/24 \
    --region=$region2 \
    --purpose=GLOBAL_MANAGED_PROXY \
    --role=ACTIVE

gcloud compute networks subnets create $region1-subnet \
    --network=myvpc \
    --region=$region1 \
    --range=10.200.0.0/24 

नेटवर्क फ़ायरवॉल की नीति और फ़ायरवॉल के नियम बनाना

Cloud Shell से

gcloud compute network-firewall-policies create my-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy my-vpc-policy \
    --network myvpc \
    --name network-myvpc \
    --global-firewall-policy

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

  • यह उन सभी वीएम इंस्टेंस पर लागू होता है जिन्हें आपको आईएपी का इस्तेमाल करके ऐक्सेस करना है.
  • इसकी मदद से, 35.235.240.0/20 आईपी रेंज से इन्ग्रेस ट्रैफ़िक को आने की अनुमति मिलती है. इस रेंज में वे सभी आईपी पते शामिल हैं जिनका इस्तेमाल IAP, टीसीपी फ़ॉरवर्डिंग के लिए करता है.

Cloud Shell से

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy my-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

6. Google Cloud Storage बकेट, सैंपल फ़ाइल बनाना, और अनुमतियां देना

Cloud Shell से

gcloud storage buckets create gs://$projectid-pscbackend --location=us

echo "Here is my bucket file contents" > my-bucket-contents.txt 

gcloud storage cp my-bucket-contents.txt gs://$projectid-pscbackend/my-bucket-contents.txt

computesa=$(gcloud iam service-accounts list \
    --filter='displayName:Compute Engine default service account' \
    --format='value(email)')

echo $computesa


gcloud storage buckets add-iam-policy-binding gs://$projectid-pscbackend \
    --member="serviceAccount:$computesa" \
    --role="roles/storage.objectViewer"

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

Creating gs://xxxxxxxxxxx-pscbackend/...
Copying file://my-bucket-contents.txt to gs://xxxxxxxxxxx-pscbackend/my-bucket-contents.txt
  Completed files 1/1 | 32.0B/32.0B                                                                                                                                                                  
xxxxxxxxxxx-compute@developer.gserviceaccount.com
bindings:
- members:
  - projectEditor:xxxxxxxxxxx
  - projectOwner:xxxxxxxxxxx
  role: roles/storage.legacyBucketOwner
- members:
  - projectViewer:xxxxxxxxxxx
  role: roles/storage.legacyBucketReader
- members:
  - projectEditor:xxxxxxxxxxx
  - projectOwner:xxxxxxxxxxx
  role: roles/storage.legacyObjectOwner
- members:
  - projectViewer:xxxxxxxxxxx
  role: roles/storage.legacyObjectReader
- members:
  - serviceAccount:xxxxxxxxxxx-compute@developer.gserviceaccount.com
  role: roles/storage.objectViewer
etag: CAI=
kind: storage#policy
resourceId: projects/_/buckets/xxxxxxxxxxx-pscbackend
version: 1

7. क्रॉस-रीजनल इंटरनल ऐप्लिकेशन लोड बैलेंसर के ज़रिए Google Cloud Storage को ऐक्सेस करने की अनुमति देना

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

सबसे पहले, लोड बैलेंसर के कॉम्पोनेंट बनाएं. आपको पीएससी एनईजी, बैकएंड सेवा, यूआरएल मैप, और एचटीटीपी टारगेट प्रॉक्सी बनानी होंगी.

Cloud Shell में

gcloud compute network-endpoint-groups create gcs-$region2-neg \
    --region=$region2 \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=storage.googleapis.com

gcloud compute backend-services create gcs-bes \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --global

gcloud compute backend-services add-backend gcs-bes \
    --global \
    --network-endpoint-group=gcs-$region2-neg \
    --network-endpoint-group-region=$region2

gcloud compute url-maps create gcsilb \
    --default-service=gcs-bes \
    --global

gcloud compute target-http-proxies create gcs-http-proxy \
    --url-map=gcsilb \
    --global

लोड बैलेंसर के लिए, ट्रैफ़िक आगे बढ़ाने का नियम बनाएं.

Cloud Shell में

gcloud compute forwarding-rules create gcs-ilb-fr \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --network=myvpc \
    --subnet=$region2-subnet \
    --target-http-proxy=gcs-http-proxy \
    --ports=80 \
    --subnet-region=$region2 \
    --global

8. company.com के लिए Cloud DNS Private Zone बनाएं

सबसे पहले, A-रिकॉर्ड के लिए लोड बैलेंसर का आईपी पता तय करें और इसे वैरिएबल के तौर पर एक्सपोर्ट करें

Cloud Shell में

gcloud compute forwarding-rules describe gcs-ilb-fr \
    --global

export lbip=$(gcloud compute forwarding-rules describe gcs-ilb-fr \
    --global \
    --format='value(IPAddress)')

echo $lbip

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

IPAddress: 10.100.0.4
IPProtocol: TCP
creationTimestamp: 'xxxxxxxxxxxxxxx'
description: ''
fingerprint: xxxxxxxxxx
id: 'xxxxxxxxxxxxxx'
kind: compute#forwardingRule
labelFingerprint: xxxxxxxxxx
loadBalancingScheme: INTERNAL_MANAGED
name: gcs-ilb-fr
network: https://www.googleapis.com/compute/v1/projects/[projectID]/global/networks/myvpc
networkTier: PREMIUM
portRange: 80-80
selfLink: https://www.googleapis.com/compute/v1/projects/[projectID]/global/forwardingRules/gcs-ilb-fr
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/[projectID]/global/forwardingRules/xxxxxxxxxxxxxx
subnetwork: https://www.googleapis.com/compute/v1/projects/[projectID]/regions/us-south1/subnetworks/us-south1-subnet
target: https://www.googleapis.com/compute/v1/projects/[projectID]/global/targetHttpProxies/gcs-http-proxy
10.100.0.4

इसके बाद, अभी बनाए गए इंटरनल लोड बैलेंसर के लिए, डीएनएस प्राइवेट ज़ोन और A रिकॉर्ड बनाएं.

Cloud Shell से

gcloud dns managed-zones create "company-com" \
    --dns-name=company.com. \
    --description="company.com private dns zone" \
    --visibility=private \
    --networks=myvpc

gcloud dns record-sets create "storage.company.com" \
    --zone="company-com" \
    --type="A" \
    --ttl="300" \
    --rrdatas="$lbip"

9. टेस्ट वीएम बनाना

उपयोगकर्ता-क्लाइंट VM बनाना

Cloud Shell से

gcloud compute instances create testvm \
    --zone="$zone1" \
    --subnet="$region1-subnet" \
    --no-address \
    --metadata "startup-script=#! /bin/bash
cat <<EOF > /etc/profile.d/gcp-startup-vars.sh
export MYBUCKET=\"$projectid-pscbackend\"
export computesa=\"$computesa\"
EOF
chmod +x /etc/profile.d/gcp-startup-vars.sh"

10. लोड बैलेंसर के ज़रिए Google Cloud Storage से कनेक्ट करने की जांच करना

टेस्ट वीएम से कनेक्ट करना

Cloud Shell में

gcloud compute ssh "testvm"\
    --zone "$zone1"\
    --tunnel-through-iap \
    --project $projectid

कनेक्टिविटी की जांच करना

In Test VM

TOKEN=$(curl -s -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/$computesa/token" | jq -r .access_token)

curl -H "Authorization: Bearer $TOKEN" "http://storage.company.com/$MYBUCKET/my-bucket-contents.txt"

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

Here is my bucket file contents

वीएम से बाहर निकलें.

TestVM में

exit

सफल!

11. क्लीनअप करने का तरीका

Cloud Shell से

gcloud dns record-sets delete "storage.company.com" \
    --zone="company-com" \
    --type="A"

gcloud dns managed-zones delete "company-com"

gcloud compute forwarding-rules delete gcs-ilb-fr \
    --global \
    --quiet

gcloud compute target-http-proxies delete gcs-http-proxy \
    --global \
    --quiet

gcloud compute url-maps delete gcsilb \
    --global \
    --quiet

gcloud compute backend-services delete gcs-bes \
    --global \
    --quiet

gcloud compute network-endpoint-groups delete gcs-$region2-neg \
    --region=$region2 \
    --quiet

gcloud storage rm -r gs://$projectid-pscbackend \
    --quiet

gcloud compute instances delete testvm \
    --zone=$zone1 \
    --quiet

gcloud compute network-firewall-policies rules delete 1000 \
    --firewall-policy my-vpc-policy \
    --global-firewall-policy \
    --quiet

gcloud compute network-firewall-policies associations delete \
    --firewall-policy my-vpc-policy \
    --name=network-myvpc \
    --global-firewall-policy \
    --quiet

gcloud compute network-firewall-policies delete my-vpc-policy \
    --global \
    --quiet

gcloud compute networks subnets delete $region1-subnet \
    --region=$region1 \
    --quiet

gcloud compute networks subnets delete $region2-proxy-subnet \
    --region=$region2 \
    --quiet

gcloud compute networks subnets delete $region2-subnet \
    --region=$region2 \
    --quiet

gcloud compute networks delete myvpc \
    --quiet

12. बधाई हो!

कोडलैब पूरा करने के लिए बधाई.

हमने क्या-क्या बताया

  • Google Cloud Storage में बुनियादी फ़ाइलें डिप्लॉय करना
  • Google Cloud Storage के लिए पीएससी बैकएंड डिप्लॉय करना
  • एक से ज़्यादा क्षेत्रों में इंटरनल ऐप्लिकेशन लोड बैलेंसर को डिप्लॉय करना