Looker Cloud को हाइब्रिड नेटवर्किंग पर कनेक्ट करें

1. परिचय

Looker (Google Cloud core) की मदद से, Google Cloud Console से Looker इंस्टेंस को आसानी से प्रोविज़न, कॉन्फ़िगर, और मैनेज किया जा सकता है. कंसोल से, इंस्टेंस एडमिन से जुड़े कुछ टास्क भी किए जा सकते हैं.

Looker (Google Cloud Core) इंस्टेंस के लिए, तीन नेटवर्क कॉन्फ़िगरेशन उपलब्ध हैं:

  • सार्वजनिक: नेटवर्क कनेक्शन, इंटरनेट से ऐक्सेस किए जा सकने वाले बाहरी आईपी पते का इस्तेमाल करता है.
  • निजी: नेटवर्क कनेक्शन, Google के होस्ट किए गए इंटरनल वर्चुअल प्राइवेट क्लाउड (वीपीसी) आईपी पते का इस्तेमाल करता है.
  • सार्वजनिक और निजी: नेटवर्क कनेक्शन, सार्वजनिक और निजी आईपी पते, दोनों का इस्तेमाल करता है. इसमें आने वाले ट्रैफ़िक को सार्वजनिक आईपी पते के ज़रिए और जाने वाले ट्रैफ़िक को निजी आईपी पते के ज़रिए रूट किया जाता है.

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

Looker (Google Cloud Core), उन इंस्टेंस के लिए निजी आईपी का इस्तेमाल करने की सुविधा देता है जो इन शर्तों को पूरा करते हैं:

आपको क्या बनाने को मिलेगा

इस ट्यूटोरियल में, आपको एक स्टैंडअलोन वीपीसी में, Looker के प्राइवेट नेटवर्क को पूरी तरह से डिप्लॉय करने का तरीका बताया जाएगा. इसमें मल्टी क्लाउड और ऑन-प्रिमाइसेस से हाइब्रिड कनेक्टिविटी होती है.

आपको on-prem-vpc नाम का वीपीसी नेटवर्क सेट अप करना होगा, ताकि ऑन-प्रिमाइसेस एनवायरमेंट को दिखाया जा सके. आपके डिप्लॉयमेंट के लिए, on-prem-vpc मौजूद नहीं होगा. इसके बजाय, आपके ऑन-प्रिमाइसेस डेटा सेंटर या क्लाउड सेवा देने वाली कंपनी के लिए हाइब्रिड नेटवर्किंग का इस्तेमाल किया जाएगा.

ट्यूटोरियल के मुख्य चरण यहां दिए गए हैं

  1. us-central1 में एक स्टैंडअलोन वीपीसी बनाएं
  2. प्राइवेट सर्विस ऐक्सेस के लिए आईपी सबनेट असाइन करना
  3. स्टैंडअलोन वीपीसी में Looker इंस्टेंस डिप्लॉय करना
  4. ऑन-प्रिमाइसेस वीपीसी और हाइब्रिड नेटवर्किंग बनाना
  5. बीजीपी पर Looker की आईपी रेंज का विज्ञापन दिखाना और पुष्टि करना
  6. Looker और Postgresql के बीच डेटा ट्रांसफ़र की प्रोसेस को इंटिग्रेट और उसकी पुष्टि करना

Figure1

8436cc4802b670db.png

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

  • वीपीसी और उससे जुड़े हाइब्रिड नेटवर्क बनाने का तरीका
  • स्टैंडअलोन वीपीसी में Looker को डिप्लॉय करने का तरीका
  • ऑन-प्रेम वीपीसी और उससे जुड़े हाइब्रिड नेटवर्क बनाने का तरीका
  • HA VPN की मदद से, on-prem-vpc को analytics-vps से कनेक्ट करें
  • हाइब्रिड नेटवर्किंग के ज़रिए Looker सबनेट का विज्ञापन कैसे दिखाया जाता है
  • हाइब्रिड नेटवर्किंग इंफ़्रास्ट्रक्चर को मॉनिटर करने का तरीका
  • Postgresql डेटाबेस को Looker Cloud Core के साथ इंटिग्रेट करने का तरीका

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

  • Google Cloud प्रोजेक्ट

IAM अनुमतियां

2. शुरू करने से पहले

ट्यूटोरियल के साथ काम करने के लिए प्रोजेक्ट को अपडेट करना

इस ट्यूटोरियल में, Cloud Shell में gcloud कॉन्फ़िगरेशन लागू करने में मदद के लिए, $variables का इस्तेमाल किया गया है.

Cloud Shell में, यह तरीका अपनाएं:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. वीपीसी सेटअप करना

analytics-vpc बनाएं

Cloud Shell में, यह तरीका अपनाएं:

gcloud compute networks create analytics-vpc --project=$projectid --subnet-mode=custom

on-prem-vpc बनाएं

Cloud Shell में, यह तरीका अपनाएं:

gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom

Postgresql डेटाबेस सबनेट बनाना

Cloud Shell में, यह तरीका अपनाएं:

gcloud compute networks subnets create database-subnet-us-central1 --project=$projectid --range=172.16.10.0/27 --network=on-prem-vpc --region=us-central1

Cloud Router और NAT कॉन्फ़िगरेशन

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

Cloud Shell में, Cloud Router बनाएं.

gcloud compute routers create on-prem-cr-us-central1-nat --network on-prem-vpc --region us-central1

Cloud Shell में, NAT गेटवे बनाएं.

gcloud compute routers nats create on-prem-nat-us-central1 --router=on-prem-cr-us-central1-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

डेटाबेस का टेस्ट इंस्टेंस बनाना

Postgres-database इंस्टेंस बनाएं. इसका इस्तेमाल Looker से कनेक्टिविटी की जांच करने और उसकी पुष्टि करने के लिए किया जाएगा.

Cloud Shell में जाकर, इंस्टेंस बनाएं.

gcloud compute instances create postgres-database \
    --project=$projectid \
    --zone=us-central1-a \
    --machine-type=e2-medium \
    --subnet=database-subnet-us-central1 \
    --no-address \
   --image=projects/ubuntu-os-cloud/global/images/ubuntu-2304-lunar-amd64-v20230621 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt -y install postgresql postgresql-client postgresql-contrib -y"

फ़ायरवॉल के नियम बनाना

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

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

Cloud Shell से

gcloud compute firewall-rules create on-prem-ssh \
    --network on-prem-vpc --allow tcp:22 --source-ranges=35.235.240.0/20

4. Private Service Access

निजी सेवाओं का ऐक्सेस, आपके वीपीसी नेटवर्क और Google या किसी तीसरे पक्ष के मालिकाना हक वाले नेटवर्क के बीच एक निजी कनेक्शन होता है. Google या तीसरे पक्ष की सेवा देने वाली इकाइयों को, सेवा देने वाली कंपनियां भी कहा जाता है. Looker Cloud Core, सेवा देने वाली कंपनी है.

प्राइवेट कनेक्शन की मदद से, आपके वीपीसी नेटवर्क में मौजूद वीएम इंस्टेंस और ऐक्सेस की जाने वाली सेवाएं, सिर्फ़ इंटरनल आईपी पतों का इस्तेमाल करके कम्यूनिकेट कर सकती हैं.

निजी सेवा ऐक्सेस का इस्तेमाल करने के लिए, आपको अपने वीपीसी नेटवर्क में आईपी पतों की एक रेंज (सीआईडीआर ब्लॉक) तय करनी होगी. इसके बाद, आपको सेवा देने वाली कंपनी के साथ एक निजी कनेक्शन बनाना होगा.

सेवाओं के लिए आईपी पते की रेंज असाइन करना

निजी कनेक्शन बनाने से पहले, आपको सेवा देने वाली कंपनी के वीपीसी नेटवर्क के लिए, IPv4 पते की एक रेंज असाइन करनी होगी. इससे यह पक्का किया जाता है कि आपके वीपीसी नेटवर्क और सेवा देने वाली कंपनी के नेटवर्क के बीच आईपी पते का टकराव न हो.

अपने वीपीसी नेटवर्क में कोई रेंज असाइन करने पर, वह रेंज सबनेट (प्राइमरी और सेकंडरी रेंज) और कस्टम स्टैटिक राउट के डेस्टिनेशन के लिए इस्तेमाल नहीं की जा सकती.

निजी सेवाओं को ऐक्सेस करने के लिए, IPv6 पते की रेंज का इस्तेमाल नहीं किया जा सकता.

Google Cloud Console में जाकर, अपने प्रोजेक्ट के लिए Service Networking API चालू करें. एपीआई चालू करते समय, आपको कंसोल पेज को रीफ़्रेश करना पड़ सकता है. इससे यह पुष्टि की जा सकेगी कि एपीआई चालू हो गया है.

आईपी पते का असाइनमेंट बनाना

पते की रेंज और प्रीफ़िक्स की लंबाई (सबनेट मास्क) तय करने के लिए, पतों और प्रीफ़िक्स की लंबाई वाले फ़्लैग का इस्तेमाल करें. उदाहरण के लिए, सीआईडीआर ब्लॉक 192.168.0.0/22 असाइन करने के लिए, पते के तौर पर 192.168.0.0 और प्रीफ़िक्स की लंबाई के तौर पर 22 डालें.

Cloud Shell में, Looker के लिए आईपी पते का असाइनमेंट बनाएं.

gcloud compute addresses create psa-range-looker \
    --global \
    --purpose=VPC_PEERING \
    --addresses=192.168.0.0 \
    --prefix-length=22 \
    --description="psa range for looker" \
    --network=analytics-vpc

Cloud Shell में, आईपी पते के असाइनमेंट की पुष्टि करें.

gcloud compute addresses list --global --filter="purpose=VPC_PEERING"

उदाहरण:

userl@cloudshell$ gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
NAME: psa-range-looker
ADDRESS/RANGE: 192.168.0.0/22
TYPE: INTERNAL
PURPOSE: VPC_PEERING
NETWORK: analytics-vpc
REGION: 
SUBNET: 
STATUS: RESERVED

प्राइवेट कनेक्शन बनाना

बंटाई गई रेंज बनाने के बाद, सेवा देने वाली कंपनी, Looker Cloud Core से निजी कनेक्शन बनाया जा सकता है. निजी कनेक्शन, Looker इंस्टेंस सेट अप होने के बाद, आपके वीपीसी नेटवर्क और सेवा देने वाली कंपनी के नेटवर्क के बीच वीपीसी नेटवर्क पियरिंग कनेक्शन बनाता है.

निजी कनेक्शन, आपके वीपीसी नेटवर्क और सेवा देने वाली कंपनी के बीच एक-से-एक संबंध होता है. अगर सेवा देने वाली कोई कंपनी एक से ज़्यादा सेवाएं देती है, तो आपको उसकी सभी सेवाओं के लिए सिर्फ़ एक प्राइवेट कनेक्शन की ज़रूरत होगी.

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

Cloud Shell में, एक निजी कनेक्शन बनाएं और ऑपरेशन का नाम नोट करें.

gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc

उदाहरण:

user@cloudshell$ gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=psa-range-looker \
    --network=analytics-vpc
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

Cloud Shell में जाकर देखें कि कार्रवाई पूरी हुई या नहीं. इसके लिए, OPERATION_NAME को पिछले चरण में जनरेट हुए नाम से बदलें.

gcloud services vpc-peerings operations describe \
    --name=OPERATION_NAME

उदाहरण:

user@cloudshell$ gcloud services vpc-peerings operations describe \
    --name=operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea
Operation "operations/pssn.p24-1049481044803-f16d61ba-7db0-4516-b525-cd0be063d4ea" finished successfully.

5. Looker (Google Cloud core) इंस्टेंस बनाना

शुरू करने से पहले

Google Cloud Console में जाकर, अपने प्रोजेक्ट के लिए Looker API चालू करें. एपीआई चालू करते समय, आपको कंसोल पेज को रीफ़्रेश करना पड़ सकता है. इससे यह पुष्टि की जा सकेगी कि एपीआई चालू हो गया है.

OAuth क्लाइंट सेट अप करें, ताकि इंस्टेंस की पुष्टि की जा सके और उसे ऐक्सेस किया जा सके.

Looker इंस्टेंस बनाने के लिए, आपको नीचे दिए गए सेक्शन में OAuth क्लाइंट आईडी और सीक्रेट का इस्तेमाल करना होगा.

ऑथराइज़्ड JavaScript ऑरिजिन और रीडायरेक्ट यूआरआई की ज़रूरत नहीं होती.

103601bca0b6ebe8.png

Cloud Console में, दिए गए स्क्रीनशॉट के आधार पर एक इंस्टेंस बनाएं.

LOOKER → CREATE AN INSTANCE पर जाएं

पहले से बनाए गए OAuth क्लाइंट आईडी और सीक्रेट को भरें.

b780ed751824176c.png

3fe880e26a81a756.png

91acffd74c68a067.png

बनाएं को चुनें

इंस्टेंस बनने के दौरान, आपको कंसोल में इंस्टेंस पेज पर रीडायरेक्ट कर दिया जाएगा. नए इंस्टेंस का स्टेटस देखने के लिए, आपको पेज रीफ़्रेश करना पड़ सकता है. Google Cloud Console मेन्यू में मौजूद सूचनाएं आइकॉन पर क्लिक करके, इंस्टेंस बनाने से जुड़ी गतिविधि भी देखी जा सकती है. जब आपका इंस्टेंस बनाया जा रहा होगा, तब Google Cloud Console मेन्यू में मौजूद सूचनाएं आइकॉन के चारों ओर, लोड हो रहा है आइकॉन दिखेगा.

Looker इंस्टेंस बनने के बाद, इंस्टेंस यूआरएल जनरेट होता है. यूआरएल को नोट करें.

5ac8a1b8b438dce6.png

6. OAuth 2.0 क्लाइंट आईडी अपडेट करना

यहां दिए गए सेक्शन में, आपको पहले से बनाए गए OAuth क्लाइंट आईडी अनुमति वाले रीडायरेक्ट यूआरआई को अपडेट करना होगा. इसके लिए, इंस्टेंस यूआरएल में /oauth2callback जोड़ें.

इसके बाद, Looker के यूज़र इंटरफ़ेस (यूआई) में लॉग इन करने के लिए, इंस्टेंस यूआरएल का इस्तेमाल किया जा सकता है.

Cloud Console में, एपीआई और सेवाएं → क्रेडेंशियल पर जाएं

अपना OAuth 2.0 क्लाइंट आईडी चुनें और इंस्टेंस का यूआरएल अपडेट करें. उदाहरण के लिए, यहां देखें:

793c5b82ec34fb1f.png

7. Looker के ऐक्सेस की पुष्टि करना

Cloud Console में, Looker पर जाएं और अपने इंस्टेंस का यूआरएल चुनें. इससे Looker का यूज़र इंटरफ़ेस (यूआई) खुलेगा.

9d132a67c532279e.png

लॉन्च होने के बाद, आपको नीचे दिए गए स्क्रीनशॉट के हिसाब से लैंडिंग पेज दिखेगा. इससे पुष्टि होगी कि आपके पास Looker Cloud Core का ऐक्सेस है.

b77055fd674f8a69.png

8. हाइब्रिड कनेक्टिविटी

इस सेक्शन में, आपको एक Cloud Router बनाना होगा. इससे बॉर्डर गेटवे प्रोटोकॉल (बीजीपी) का इस्तेमाल करके, अपने वर्चुअल प्राइवेट क्लाउड (वीपीसी) और पीयर नेटवर्क के बीच डाइनैमिक तरीके से रास्तों को बदला जा सकता है.

Cloud Router, आपके नेटवर्क को कनेक्ट करने के लिए Cloud VPN टनल पर बीजीपी सेशन सेट अप कर सकता है. यह नए सबनेट आईपी पते की रेंज को अपने-आप पहचान लेता है और उन्हें आपके पीयर नेटवर्क पर ब्रॉडकास्ट करता है.

इस ट्यूटोरियल में, Looker से प्राइवेट कनेक्टिविटी दिखाने के लिए, analytics-vpc और on-prem-vpc के बीच HA वीपीएन डिप्लॉय किया जाएगा.

analytics-vpc के लिए HA VPN GW बनाएं

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

Cloud Shell में, HA VPN GW बनाएं

gcloud compute vpn-gateways create analytics-vpn-gw \
   --network=analytics-vpc\
   --region=us-central1

on-prem-vpc के लिए HA VPN GW बनाएं

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

Cloud Shell में, HA VPN GW बनाएं.

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

एचए वीपीएन गेटवे बनाने की पुष्टि करना

कंसोल का इस्तेमाल करके, HYBRID CONNECTIVITY → VPN → CLOUD VPN GATEWAYS पर जाएं.

a3973b2bbb832bae.png

analytics-vpc के लिए Cloud Router बनाएं

Cloud Shell में, us-central1 में मौजूद Cloud Router बनाएं

gcloud compute routers create analytics-cr-us-central1 \
   --region=us-central1 \
   --network=analytics-vpc\
   --asn=65001

ऑन-प्रेम-वीपीसी के लिए Cloud Router बनाना

Cloud Shell में, us-central1 में मौजूद Cloud Router बनाएं

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

analytics-vpc के लिए वीपीएन टनल बनाएं

आपको हर एचए वीपीएन गेटवे पर दो वीपीएन टनल बनाने होंगे.

वीपीएन टनल बनाएं0

Cloud Shell में, tunnel0 बनाएं:

gcloud compute vpn-tunnels create analytics-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 0

वीपीएन टनल1 बनाएं

Cloud Shell में, tunnel1 बनाएं:

gcloud compute vpn-tunnels create analytics-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router analytics-cr-us-central1 \
    --vpn-gateway analytics-vpn-gw \
    --interface 1

on-prem-vpc के लिए वीपीएन टनल बनाएं

आपको हर एचए वीपीएन गेटवे पर दो वीपीएन टनल बनाने होंगे.

वीपीएन टनल बनाएं0

Cloud Shell में, tunnel0 बनाएं:

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

वीपीएन टनल1 बनाएं

Cloud Shell में, tunnel1 बनाएं:

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway analytics-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

वीपीएन टनल बनाने की पुष्टि करना

कंसोल का इस्तेमाल करके, HYBRID CONNECTIVITY → VPN → CLOUD VPN TUNNELS पर जाएं.

61c09b3d3102149d.png

9. बीजीपी नेबर को सेट अप करना

BGP सेशन बनाना

इस सेक्शन में, Cloud Router इंटरफ़ेस और बीजीपी पियर कॉन्फ़िगर किए जाते हैं.

analytics-vpc के लिए बीजीपी इंटरफ़ेस और पियरिंग बनाना

Cloud Shell में, BGP इंटरफ़ेस बनाएं:

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel0 \
    --region us-central1

Cloud Shell में, BGP पीयर बनाएं:

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

Cloud Shell में, BGP इंटरफ़ेस बनाएं:

gcloud compute routers add-interface analytics-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel analytics-vpc-tunnel1 \
    --region us-central1

Cloud Shell में, BGP पीयर बनाएं:

gcloud compute routers add-bgp-peer analytics-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

ऑन-प्रेम-वीपीसी के लिए बीजीपी इंटरफ़ेस और पियरिंग बनाना

Cloud Shell में, BGP इंटरफ़ेस बनाएं:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-analytics-vpc \
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

Cloud Shell में, BGP पीयर बनाएं:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel0 \
    --interface if-tunnel1-to-analytics-vpc \
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

Cloud Shell में, BGP इंटरफ़ेस बनाएं:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-analytics-vpc \
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

Cloud Shell में, BGP पीयर बनाएं:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-analytics-vpc-tunnel1\
    --interface if-tunnel2-to-analytics-vpc \
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

वीपीएन टनल की जानकारी देखने के लिए, हाइब्रिड कनेक्टिविटी → वीपीएन पर जाएं.

ddd4a8f851d44fd6.png

HA वीपीएन पर, analytics-vpc से मिले रास्तों की पुष्टि करना

एचए वीपीएन टनल और बीजीपी सेशन सेट अप किए गए हैं. इसलिए, on-prem-vpc के रास्तों के बारे में analytics-vpc से जानकारी मिलती है. कंसोल का इस्तेमाल करके, VPC नेटवर्क → वीपीसी नेटवर्क → analytics-vpc → राउट → क्षेत्र → us-central1 → देखें पर जाएं

देखें कि analytics-vpc ने on-prem-vpc database-subnet-us-central1 172.16.10.0/27 से रूट सीख लिए हैं

57c7898390db4bcb.png

पुष्टि करें कि ऑन-प्रेम-वीपीसी ने एचए वीपीएन पर रूट नहीं सीखे हैं

analytics-vpc में कोई सबनेट नहीं है. इसलिए, Cloud Router, on-prem-vpc को किसी भी सबनेट का विज्ञापन नहीं दिखाएगा. कंसोल का इस्तेमाल करके, VPC नेटवर्क → वीपीसी नेटवर्क → on-prem-vpc → रूट → क्षेत्र → us-central1 → देखें पर जाएं

5b007e46a7c7026.png

10. Looker सबनेट का विज्ञापन, ऑन-प्रेम पर दिखाना

Looker के प्राइवेट सर्विस ऐक्सेस (पीएसए) सबनेट का विज्ञापन, analytics-cr-us-central1 क्लाउड राउटर अपने-आप नहीं दिखाता है. ऐसा इसलिए, क्योंकि सबनेट को पीएसए को असाइन किया गया है, न कि वीपीसी को.

आपको analytics-cr-central1 से, पीएसए सबनेट 192.168.0.0/22 (psa-range-looker) के लिए कस्टम रूट विज्ञापन बनाना होगा. इसका विज्ञापन ऑन-प्रिमाइसेस एनवायरमेंट में दिखाया जाएगा. साथ ही, इसका इस्तेमाल वर्कलोड, Looker को ऐक्सेस करने के लिए करेंगे.

कंसोल में जाकर, HYBRID CONNECTIVITY → CLOUD ROUTERS → analytics-cr-us-central1 पर जाएं. इसके बाद, EDIT चुनें.

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

87f95ee3d1cd8521.png

11. पुष्टि करें कि ऑन-प्रेम-वीपीसी को Looker सबनेट के बारे में पता चल गया है

अब on-prem-vpc, Looker PSA सबनेट को ऐक्सेस कर पाएगा. ऐसा इसलिए, क्योंकि इसे analytics-cr-us-central1 से कस्टम रूट विज्ञापन के तौर पर विज्ञापित किया गया है.

कंसोल का इस्तेमाल करके, VPC NETWORK → VPC NETWORKS → on-prem-vpc → ROUTES → REGION → us-central1 → VIEW पर जाएं

analytics-vpc से दिखाए गए Looker रास्तों को देखें:

a987a76fd57ddedd.png

12. मौजूदा वीपीसी पीयरिंग की पुष्टि करना

Looker Cloud Core और analytics-vpc के बीच कनेक्शन, वीपीसी पीयरिंग के ज़रिए होता है. इससे बीजीपी के ज़रिए सीखी गई कस्टम राउटिंग को एक्सचेंज किया जा सकता है. ट्यूटोरियल में, analytics-vpc को on-prem-vpc से मिले रास्तों को Looker पर पब्लिश करना होगा. इस सुविधा को चालू करने के लिए, वीपीसी पियरिंग को कस्टम राउट एक्सपोर्ट करने के लिए अपडेट करना होगा.

इंपोर्ट और एक्सपोर्ट किए गए मौजूदा रूट की पुष्टि करें.

VPC नेटवर्क → वीपीसी नेटवर्क पीयरिंग → servicenetworking-googleapis-com पर जाएं

f6d9395712934cd8.png

यहां दिए गए स्क्रीनशॉट में, analytics-vpc के बारे में जानकारी दी गई है. यह Google के मैनेज किए गए पियर किए गए वीपीसी नेटवर्किंग, servicesnetworking से psa-range-looker को इंपोर्ट करता है.

86a0e8c3534c6986.png

Select EXPORTED ROUTES से पता चलता है कि Peered VPC नेटवर्क में कोई भी रूट एक्सपोर्ट नहीं किया गया है, क्योंकि 1) analytics-vpc में सबनेट कॉन्फ़िगर नहीं किए गए हैं 2) 'कस्टम रूट एक्सपोर्ट करें' विकल्प नहीं चुना गया है

a52de427fa73fb22.png

13. VPC पीयरिंग अपडेट करना

वीपीसी नेटवर्क → वीपीसी नेटवर्क पियरिंग → servicenetworking-googleapis-com → बदलाव करें पर जाएं

कस्टम रूट एक्सपोर्ट करें → सेव करें को चुनें

a2309e4c3a7cee80.png

14. अपडेट की गई वीपीसी पीयरिंग की पुष्टि करना

एक्सपोर्ट किए गए रूट की पुष्टि करें.

VPC नेटवर्क → वीपीसी नेटवर्क पीयरिंग → servicenetworking-googleapis-com पर जाएं

EXPORTED ROUTES चुनने पर पता चलता है कि on-prem-vpc के रूट (डेटाबेस सबनेट 172.16.10.0/27) को analytics-vpc के ज़रिए, Looker को होस्ट करने वाले Peered VPC networking में एक्सपोर्ट किया जाता है.

47e953268d78a469.png

15. Looker postgres-database creation

इस सेक्शन में, Cloud Shell का इस्तेमाल करके postgres-database वीएम में एसएसएच किया जाएगा.

Cloud Shell में, postgres-database इंस्टेंस** में ssh करें.

 gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

ओएस में, postgres-database इंस्टेंस का आईपी पता (ens4) ढूंढें और उसे नोट करें.

ip a

उदाहरण:

user@postgres-database:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc mq state UP group default qlen 1000
    link/ether 42:01:ac:10:0a:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 172.16.10.2/32 metric 100 scope global dynamic ens4
       valid_lft 84592sec preferred_lft 84592sec
    inet6 fe80::4001:acff:fe10:a02/64 scope link 
       valid_lft forever preferred_lft forever

ओएस में, postgresql में लॉग इन करें.

sudo -u postgres psql postgres

ओएस में, पासवर्ड डालने का प्रॉम्प्ट डालें.

\password postgres

ओएस में, postgres के लिए पासवर्ड सेट करें (एक ही पासवर्ड दो बार डालें)

postgres

उदाहरण:

user@postgres-database:~$ sudo -u postgres psql postgres
\password postgres
psql (13.11 (Debian 13.11-0+deb11u1))
Type "help" for help.

postgres=# \password postgres
Enter new password for user "postgres": 
Enter it again: 

ओएस में, postgres से बाहर निकलें.

\q

उदाहरण:

postgres=# \q
user@postgres-database:~$ 

नीचे दिए गए सेक्शन में, आपको pg_hba.conf फ़ाइल में अपना postgres-database इंस्टेंस आईपी पता और Looker Private Google Access सबनेट (192.168.0.0/22) डालना होगा. यह काम, IPv4 लोकल कनेक्शन के तहत करना होगा. इसके लिए, नीचे दिया गया स्क्रीनशॉट देखें:

178364a8ee9b6233.png

sudo nano /etc/postgresql/15/main/pg_hba.conf

नीचे दिए गए सेक्शन में, postgresql.conf को अनकमेंट करें, ताकि नीचे दिए गए स्क्रीनशॉट के मुताबिक सभी ‘*' आईपी पतों को सुना जा सके:

sudo nano /etc/postgresql/15/main/postgresql.conf

पहले:

aad52092c0a9408.png

बाद में:

7e80b916d29e097c.png

ओएस में, postgresql सेवा को रीस्टार्ट करें.

sudo service postgresql restart

ओएस में, postgresql के स्टेटस की पुष्टि करें कि वह चालू है.

sudo service postgresql status

उदाहरण:

ओएस में, postgresql के स्टेटस की पुष्टि करें कि वह चालू है.

user@postgres-database$ sudo service postgresql status
 postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; preset: enabled)
     Active: active (exited) since Sat 2023-07-01 23:40:59 UTC; 7s ago
    Process: 4073 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4073 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Jul 01 23:40:59 postgres-database systemd[1]: Starting postgresql.service - PostgreSQL RDBMS...
Jul 01 23:40:59 postgres-database systemd[1]: Finished postgresql.service - PostgreSQL RDBMS.

16. Postgres डेटाबेस बनाना

यहां दिए गए सेक्शन में, postgres_looker नाम का एक postgres डेटाबेस और looker_schema नाम का स्कीमा बनाया जाएगा. इनका इस्तेमाल, Looker को ऑन-प्रिमाइसेस कनेक्टिविटी की पुष्टि करने के लिए किया जाता है.

ओएस में, postgres में लॉग इन करें.

sudo -u postgres psql postgres

ओएस में डेटाबेस बनाएं.

create database postgres_looker;

ओएस में, डेटाबेस की सूची बनाएं.

\l

OS में, looker उपयोगकर्ता को looker पासवर्ड के साथ बनाएं

create user postgres_looker with password 'postgreslooker';

ओएस में जाकर, डेटाबेस से कनेक्ट करें.

\c postgres_looker;

ओएस में, looker-schema स्कीमा बनाएं और Cloud Shell प्रॉम्प्ट से बाहर निकलें.

create schema looker_schema;
create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
exit

उदाहरण:

user@postgres-database$ sudo -u postgres psql postgres
psql (15.3 (Ubuntu 15.3-0ubuntu0.23.04.1))
Type "help" for help.

postgres=# create database postgres_looker;
CREATE DATABASE
postgres=# \l
                                                List of databases
      Name       |  Owner   | Encoding | Collate |  Ctype  | ICU Locale | Locale Provider |   Access privileges   
-----------------+----------+----------+---------+---------+------------+-----------------+-----------------------
 postgres        | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 postgres_looker | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | 
 template0       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
 template1       | postgres | UTF8     | C.UTF-8 | C.UTF-8 |            | libc            | =c/postgres          +
                 |          |          |         |         |            |                 | postgres=CTc/postgres
(4 rows)

postgres=# create user postgres_looker with password 'postgreslooker';
CREATE ROLE
postgres=# \c postgres_looker;
You are now connected to database "postgres_looker" as user "postgres".
postgres_looker=# create schema looker_schema;
CREATE SCHEMA
postgres_looker=# create table looker_schema.test(firstname CHAR(15), lastname CHAR(20));
CREATE TABLE
postgres_looker=# exit

ओएस से बाहर निकलें. इससे आपको क्लाउड शेल पर वापस ले जाया जाएगा.

\q
exit

17. on-prem-vpc में फ़ायरवॉल बनाना

नीचे दिए गए सेक्शन में, लॉगिंग की सुविधा वाला एक इनग्रेस फ़ायरवॉल बनाएं. इससे Looker सबनेट, postgres-database इंस्टेंस से कम्यूनिकेट कर पाएगा.

Cloud Shell से, on-prem-vpc फ़ायरवॉल बनाएं.

gcloud compute --project=$projectid firewall-rules create looker-access-to-postgres --direction=INGRESS --priority=1000 --network=on-prem-vpc --action=ALLOW --rules=all --source-ranges=192.168.0.0/22 --enable-logging

18. analytics-vpc में प्राइवेट डीएनएस बनाना

Looker को Google के मैनेज किए गए VPC में डिप्लॉय किया जाता है. हालांकि, ऐनलिटिक्स-vpc के निजी डीएनएस को ऐक्सेस करने की सुविधा, सेवाओं के नेटवर्क के साथ पीयरिंग के ज़रिए मिलती है.

यहां दिए गए सेक्शन में, analytics-vpc में एक प्राइवेट डीएनएस ज़ोन बनाया जाएगा. इसमें postgres-database इंस्टेंस का पूरी तरह से क्वालिफ़ाइड डोमेन नेम (postgres.analytics.com)और आईपी पता) का A रिकॉर्ड शामिल होगा.

Cloud Shell से, analytics.com का प्राइवेट ज़ोन बनाएं.

gcloud dns --project=$projectid managed-zones create gcp-private-zone --description="" --dns-name="analytics.com." --visibility="private" --networks="https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/analytics-vpc"

Cloud Shell से, postgres-database इंस्टेंस के आईपी पते का पता लगाएं.

gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:

उदाहरण:

user@cloudshell$ gcloud compute instances describe postgres-database --zone=us-central1-a | grep networkIP:
  networkIP: 172.16.10.2

Cloud Shell से, A रिकॉर्ड बनाएं. साथ ही, यह पक्का करें कि आपने पहले से पहचाना गया आईपी पता जोड़ दिया हो.

gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="your-postgres-database-ip"

उदाहरण:

user@cloudshell$ gcloud dns --project=$projectid record-sets create postgres.analytics.com. --zone="gcp-private-zone" --type="A" --ttl="300" --rrdatas="172.16.10.2"
NAME: postgres.analytics.com.
TYPE: A
TTL: 300
DATA: 172.16.10.2

Cloud Shell से, analytics.com को services networking से पियर करें. इससे Looker को analytics-vpc के निजी ज़ोन को ऐक्सेस करने की अनुमति मिल जाएगी.

gcloud services peered-dns-domains create looker-com --network=analytics-vpc --service=servicenetworking.googleapis.com --dns-suffix=analytics.com.

19. Looker को Postgres postgres-database के साथ इंटिग्रेट करना

यहां दिए गए सेक्शन में, Cloud Console का इस्तेमाल करके, ऑन-प्रिमाइसेस postgres-database इंस्टेंस से डेटाबेस कनेक्शन बनाया जाएगा.

Cloud Console में, Looker पर जाएं और अपने इंस्टेंस का यूआरएल चुनें. इससे Looker का यूज़र इंटरफ़ेस (यूआई) खुलेगा.

9d132a67c532279e.png

लॉन्च होने के बाद, आपको नीचे दिए गए स्क्रीनशॉट के हिसाब से लैंडिंग पेज दिखेगा.

b77055fd674f8a69.png

ADMIN → DATABASE → CONNECTIONS → ADD CONNECTION को चुनें

नीचे दिए गए स्क्रीनशॉट के मुताबिक, कनेक्शन की जानकारी भरें. इसके बाद, कनेक्ट करें को चुनें

c8cca15252c2020d.png

अब कनेक्शन बन गया है

3e51b7e2cc62fb45.png

20. Looker कनेक्टिविटी की पुष्टि करना

यहां दिए गए सेक्शन में, Looker के ‘test' ऐक्शन और TCPDUMP का इस्तेमाल करके, यह पुष्टि करने का तरीका बताया गया है कि Looker, ऑन-प्रेम-वीपीसी में postgres-database से कनेक्ट है या नहीं.

अगर सेशन की समयसीमा खत्म हो गई है, तो Cloud Shell से postgres-database में लॉग इन करें.

Cloud Shell में, यह तरीका अपनाएं:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
gcloud compute ssh --zone "us-central1-a" "postgres-database" --project "$projectid"

ओएस से, psa-range-looker सबनेट 192.168.0.0/22 के साथ TCPDUMP फ़िल्टर बनाएं

sudo tcpdump -i any net 192.168.0.0/22 -nn

डेटा कनेक्शन पर जाएं ADMIN → DATABASE → CONNECTIONS → Select → Test

'जांच करें' को चुनने के बाद, Looker, postgres-database से कनेक्ट हो जाएगा. इसकी जानकारी यहां दी गई है:

ef25b837b6a41fe.png

ओएस टर्मिनल पर वापस जाएं और पुष्टि करें कि TCPDUMP ने यह पहचान कर ली है कि psc-range-looker, ऑन-प्रिमाइसेस postgres-database इंस्टेंस से कनेक्ट हो रहा है.

यह नोट जोड़ें कि पीएसए रेंज का कोई भी आईपी पता, Looker से दिखेगा

user@postgres-database$ sudo tcpdump -i any net 192.168.0.0/22 -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
00:16:55.121631 ens4  In  IP 192.168.1.24.46892 > 172.16.10.2.5432: Flags [S], seq 2221858189, win 42600, options [mss 1366,sackOK,TS val 4045928414 ecr 0,nop,wscale 7], length 0
00:16:55.121683 ens4  Out IP 172.16.10.2.5432 > 192.168.1.24.46892: Flags [S.], seq 1464964586, ack 2221858190, win 64768, options [mss 1420,sackOK,TS val 368503074 ecr 4045928414,nop,wscale 7], length 0

21. सुरक्षा से जुड़े सुझाव

Looker और Postgres डेटाबेस को सुरक्षित रखने के लिए, सुरक्षा से जुड़े कुछ सुझाव और सबसे सही तरीके दिए गए हैं. इनमें ये शामिल हैं:

  • Looker के लिए, डेटाबेस खाते की कम से कम अनुमतियां सेट अप करना. इससे Looker को ज़रूरी फ़ंक्शन परफॉर्म करने की अनुमति मिलती है.
  • क्लाइंट और Looker यूज़र इंटरफ़ेस (यूआई) के बीच डेटा ट्रांसफ़र होने के दौरान, उसे TLS 1.2+ का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया जाता है. साथ ही, Looker से डेटाबेस के बीच डेटा ट्रांसफ़र होने के दौरान भी ऐसा किया जाता है
  • डिफ़ॉल्ट रूप से, डेटा को एन्क्रिप्ट (सुरक्षित) किया जाता है. ग्राहक, Looker इंस्टेंस ( https://cloud.google.com/looker/docs/looker-core-cmek) और Postgres ( https://cloud.google.com/sql/docs/postgres/configure-cmek) के लिए, सीएमईके का इस्तेमाल भी कर सकता है
  • Looker में ऐक्सेस कंट्रोल करने की सुविधा - Looker एडमिन, यह कंट्रोल कर सकते हैं कि कोई प्रिंसिपल या उपयोगकर्ताओं का ग्रुप, Looker में क्या देख सकता है और क्या कर सकता है. इसके लिए, वे कॉन्टेंट, डेटा, और सुविधाओं का ऐक्सेस दे सकते हैं. इन विकल्पों की मदद से Looker एडमिन, कुछ भूमिकाएं तय कर सकता है. इनमें मॉडल और अनुमतियों का सेट शामिल होता है. साथ ही, वह डेटा के लिए ऐक्सेस कंट्रोल भी बना सकता है.
  • Looker, ऑडिट लॉग और डेटा ऐक्सेस लॉग, दोनों का इस्तेमाल करता है. इससे यह पता चलता है कि किसने, कब, और कहां क्या किया. ऑडिट लॉग डिफ़ॉल्ट रूप से चालू होते हैं, जबकि डेटा ऐक्सेस लॉग को मैन्युअल तरीके से चालू करना होता है.
  • फ़िलहाल, VPC-SC, Enterprise और Embed इंस्टेंस के साथ काम करता है. ये इंस्टेंस सिर्फ़ निजी आईपी के साथ कॉन्फ़िगर किए जाते हैं

22. व्यवस्थित करें

Looker Cloud Core इंस्टेंस मिटाएं. इसके लिए, यहां जाएं:

LOOKER → looker-tutorial → मिटाएं

e5a2e3af9e7ffd40.png

Cloud Shell से, ट्यूटोरियल के कॉम्पोनेंट मिटाएं.

gcloud compute vpn-tunnels delete analytics-vpc-tunnel0 analytics-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete analytics-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet

gcloud compute routers delete analytics-cr-us-central1 on-prem-cr-us-central1 on-prem-cr-us-central1-nat --region=us-central1 --quiet

gcloud compute instances delete postgres-database --zone=us-central1-a --quiet

gcloud compute networks subnets delete database-subnet-us-central1 --region=us-central1 --quiet

gcloud compute firewall-rules delete looker-access-to-postgres on-prem-ssh --quiet

gcloud dns record-sets delete postgres.analytics.com. --type=A --zone=gcp-private-zone
        
gcloud dns managed-zones delete gcp-private-zone

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute addresses delete psa-range-looker --global --quiet

gcloud compute networks delete analytics-vpc --quiet

23. बधाई हो

बधाई हो, आपने हाइब्रिड नेटवर्किंग के ज़रिए Looker कनेक्टिविटी को कॉन्फ़िगर और पुष्टि कर ली है. इससे, ऑन-प्रिमाइसेस और मल्टी क्लाउड एनवायरमेंट में डेटा कम्यूनिकेशन किया जा सकेगा.

आपने Looker Connect के ‘Test' टूल और postgres-database इंस्टेंस में TCPDUMP का इस्तेमाल करके, postgres-database से Looker Cloud Core की कनेक्टिविटी की जांच भी कर ली है.

Cosmopup को लगता है कि ट्यूटोरियल बहुत अच्छे होते हैं!!

e6d3675ca7c6911f.jpeg

ज़्यादा जानकारी और वीडियो

रेफ़रंस दस्तावेज़