1. परिचय
खास जानकारी
कई संगठन, अपनी सेवाओं और ऐप्लिकेशन के नेटवर्क ट्रैफ़िक को सुरक्षित रखने के लिए, Google Cloud पर वर्चुअल प्राइवेट क्लाउड (VPC) नेटवर्क का इस्तेमाल करते हैं. साथ ही, डेटा को बाहर जाने से रोकने के लिए, पेरिमीटर कंट्रोल का इस्तेमाल करते हैं. VPC नेटवर्क, किसी फ़िज़िकल नेटवर्क का वर्चुअल वर्शन होता है. इसे Google के प्रोडक्शन नेटवर्क में लागू किया जाता है. VPC नेटवर्क, आपके Compute Engine वर्चुअल मशीन (वीएम) इंस्टेंस के लिए कनेक्टिविटी उपलब्ध कराता है. साथ ही, यह इंटरनल ऐप्लिकेशन लोड बैलेंसर के लिए, नेटिव इंटरनल पासथ्रू नेटवर्क लोड बैलेंसर और प्रॉक्सी सिस्टम उपलब्ध कराता है. यह Cloud VPN टनल और Cloud Interconnect के लिए VLAN अटैचमेंट का इस्तेमाल करके, ऑन-प्रिमाइसेस नेटवर्क से कनेक्ट होता है. इसके अलावा, यह Google Cloud के एक्सटर्नल लोड बैलेंसर से बैकएंड तक ट्रैफ़िक डिस्ट्रिब्यूट करता है.
वीएम के उलट, Cloud Run की सेवाएं डिफ़ॉल्ट रूप से किसी खास VPC नेटवर्क से जुड़ी नहीं होती हैं. इस कोडलैब में, इनग्रेस (इनबाउंड कनेक्शन) की सेटिंग बदलने का तरीका बताया गया है. इससे सिर्फ़ VPC से आने वाला ट्रैफ़िक ही Cloud Run की किसी सेवा (जैसे, बैकएंड सेवा) को ऐक्सेस कर पाएगा. इसके अलावा, इस कोडलैब में यह भी बताया गया है कि VPC के ज़रिए, दूसरी सेवा (जैसे, फ़्रंटएंड सेवा) को बैकएंड Cloud Run सेवा को ऐक्सेस करने की अनुमति कैसे दी जाए.
इस उदाहरण में, बैकएंड Cloud Run सेवा "hello world" मैसेज दिखाती है. फ़्रंटएंड Cloud Run सेवा, यूज़र इंटरफ़ेस (यूआई) में यूआरएल इकट्ठा करने के लिए, एक इनपुट फ़ील्ड उपलब्ध कराती है. इसके बाद, फ़्रंटएंड सेवा उस यूआरएल (जैसे, बैकएंड सेवा) के लिए GET अनुरोध करती है. इसलिए, यह ब्राउज़र से सेवा के अनुरोध के बजाय, सेवा से सेवा का अनुरोध बन जाता है. जब फ़्रंटएंड सेवा, बैकएंड सेवा तक पहुंच जाती है, तो ब्राउज़र में "hello world" मैसेज दिखता है.
आपको क्या सीखने को मिलेगा
- Cloud Run की सेवा को सिर्फ़ VPC से आने वाले ट्रैफ़िक को ऐक्सेस करने की अनुमति देना
- सिर्फ़ इंटरनल-इनग्रेस वाले Cloud Run की सेवा से कम्यूनिकेट करने के लिए, Cloud Run की सेवा पर इग्रेस कॉन्फ़िगर करना
2. सेटअप और ज़रूरी शर्तें
ज़रूरी शर्तें
- आपने Cloud Console में लॉग इन किया हो.
- आपने पहले Cloud Run की कोई सेवा डिप्लॉय की हो. उदाहरण के लिए, शुरू करने के लिए, सोर्स कोड से वेब सेवा डिप्लॉय करने से जुड़ा क्विकस्टार्ट देखें.
Cloud Shell चालू करें
- Cloud Console में, Cloud Shell चालू करें
पर क्लिक करें.

अगर आपने Cloud Shell को पहली बार शुरू किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. इसमें Cloud Shell के बारे में बताया गया होगा. अगर आपको इंटरमीडिएट स्क्रीन दिखती है, तो जारी रखें पर क्लिक करें.

Cloud Shell को प्रोविज़न करने और उससे कनेक्ट होने में कुछ सेकंड लगेंगे.

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल लोड होते हैं. इसमें 5 जीबी की परसिस्टेंट होम डायरेक्ट्री मिलती है. साथ ही, यह Google Cloud पर चलती है. इससे नेटवर्क परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. इस कोडलैब में ज़्यादातर काम ब्राउज़र से किया जा सकता है.
Cloud Shell से कनेक्ट होने के बाद, आपको दिखेगा कि आपकी पुष्टि हो गई है और प्रोजेक्ट, आपके प्रोजेक्ट आईडी पर सेट है.
- पुष्टि करने के लिए, Cloud Shell में यह कमांड चलाएं कि आपकी पुष्टि हो गई है या नहीं:
gcloud auth list
कमांड का आउटपुट
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- पुष्टि करने के लिए, Cloud Shell में यह कमांड चलाएं कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है या नहीं:
gcloud config list project
कमांड का आउटपुट
[core] project = <PROJECT_ID>
अगर ऐसा नहीं है, तो इस कमांड से इसे सेट किया जा सकता है:
gcloud config set project <PROJECT_ID>
कमांड का आउटपुट
Updated property [core/project].
3. Cloud Run की सेवाएं बनाना
एनवायरमेंट वैरिएबल सेट अप करना
एनवायरमेंट वैरिएबल सेट किए जा सकते हैं. इनका इस्तेमाल इस कोडलैब में किया जाएगा.
REGION=<YOUR_REGION, e.g. us-central1> FRONTEND=frontend BACKEND=backend
बैकएंड Cloud Run की सेवा बनाना
सबसे पहले, सोर्स कोड के लिए कोई डायरेक्ट्री बनाएं और उस डायरेक्ट्री में सीडी करें.
mkdir -p internal-codelab/frontend internal-codelab/backend && cd internal-codelab/backend
इसके बाद, यहां दिया गया कॉन्टेंट वाली package.json फ़ाइल बनाएं:
{
"name": "backend-service",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.1"
}
}
इसके बाद, यहां दिया गया कॉन्टेंट वाली index.js सोर्स फ़ाइल बनाएं. इस फ़ाइल में, सेवा के लिए एंट्री पॉइंट होता है. साथ ही, इसमें ऐप्लिकेशन के लिए मुख्य लॉजिक होता है.
const express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));
app.get('/', function (req, res) {
res.send("hello world");
});
const port = parseInt(process.env.PORT) || 8080;
app.listen(port, () => {
console.log(`helloworld: listening on port ${port}`);
});
आखिर में, Cloud Run की सेवा को डिप्लॉय करने के लिए, यह कमांड चलाएं.
gcloud run deploy $BACKEND --source . --allow-unauthenticated --region $REGION
फ़्रंटएंड Cloud Run की सेवा बनाना
फ़्रंटएंड डायरेक्ट्री पर जाएं.
cd ../frontend
इसके बाद, यहां दिया गया कॉन्टेंट वाली package.json फ़ाइल बनाएं:
{
"name": "frontend",
"version": "1.0.0",
"description": "",
"scripts": {
"start": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.6.6",
"express": "^4.18.2"
}
}
इसके बाद, यहां दिया गया कॉन्टेंट वाली index.js सोर्स फ़ाइल बनाएं. इस फ़ाइल में, सेवा के लिए एंट्री पॉइंट होता है. साथ ही, इसमें ऐप्लिकेशन के लिए मुख्य लॉजिक होता है.
const express = require("express");
const app = express();
const port = 8080;
const path = require('path');
const axios = require('axios');
// serve static content (index.html) using
// built-in middleware function in Express
app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }));
// this endpoint receives a URL in the post body
// and then makes a get request to that URL
// results are sent back to the caller
app.post('/callService', async (req, res) => {
const url = req.body.url;
let message = "";
try {
console.log("url: ", url);
const response = await axios.get(url);
message = response.data;
} catch (error) {
message = error.message;
console.error(error.message);
}
res.send(`
${message}
<p>
</p>
`);
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
index.html फ़ाइल के लिए, सार्वजनिक डायरेक्ट्री बनाएं
mkdir public touch public/index.html
साथ ही, index.html को अपडेट करके, उसमें यह कॉन्टेंट शामिल करें:
<html>
<script
src="https://unpkg.com/htmx.org@1.9.10"
integrity="sha384-D1Kt99CQMDuVetoL1lrYwg5t+9QdHe7NLX/SoJYkXDFfX37iInKRy5xLSi8nO7UC"
crossorigin="anonymous"
></script>
<body>
<div style="margin-top: 100px; margin-left: 100px">
<h1>I'm the Frontend service on the Internet</h1>
<form hx-trigger="submit" hx-post="/callService" hx-target="#message">
<label for="url"> URL:</label>
<input
style="width: 308px"
type="text"
id="url"
name="url"
placeholder="The backend service URL"
required
/>
<button hx-indicator="#loading" type="submit">Submit</button>
<p></p>
<span class="htmx-indicator" id="loading"> Loading... </span>
<div id="message" style="white-space: pre-wrap"></div>
<p></p>
</form>
</div>
</body>
</html>
आखिर में, Cloud Run की सेवा को डिप्लॉय करने के लिए, यह कमांड चलाएं.
gcloud run deploy $FRONTEND --source . --allow-unauthenticated --region $REGION
बैकएंड सेवा को कॉल करना
पुष्टि करें कि आपने Cloud Run की दो सेवाएं डिप्लॉय कर ली हैं.
अपने वेब ब्राउज़र में, फ़्रंटएंड सेवा का यूआरएल खोलें.
टेक्स्टबॉक्स में, बैकएंड सेवा का यूआरएल डालें. ध्यान दें कि यह अनुरोध, आपके ब्राउज़र से रूट होने के बजाय, फ़्रंटएंड Cloud Run इंस्टेंस से बैकएंड Cloud Run सेवा पर रूट होता है.
आपको "hello world" दिखेगा.
4. बैकएंड सेवा को सिर्फ़ इंटरनल इनग्रेस के लिए सेट करना
बैकएंड सेवा को सिर्फ़ अपने VPC नेटवर्क से ऐक्सेस करने की अनुमति देने के लिए, gcloud का यह कमांड चलाएं.
gcloud run services update $BACKEND --ingress internal --region $REGION
पुष्टि करने के लिए कि आपकी बैकएंड सेवा को सिर्फ़ आपके VPC से ट्रैफ़िक मिल सकता है, फ़्रंटएंड सेवा से अपनी बैकएंड सेवा को कॉल करने की कोशिश करें.
इस बार आपको "अनुरोध, स्टेटस कोड 404 के साथ पूरा नहीं हो सका" दिखेगा
आपको यह गड़बड़ी इसलिए मिली, क्योंकि फ़्रंटएंड Cloud Run सेवा का आउटबाउंड अनुरोध (यानी, इग्रेस) सबसे पहले इंटरनेट पर जाता है. इसलिए, Google Cloud को अनुरोध के सोर्स के बारे में पता नहीं चलता.
अगले सेक्शन में, फ़्रंटएंड सेवा को VPC ऐक्सेस करने के लिए कॉन्फ़िगर किया जाएगा. इससे Google Cloud को पता चलेगा कि अनुरोध VPC से आया है. इसे इंटरनल सोर्स के तौर पर पहचाना जाता है.
5. फ़्रंटएंड सेवा को VPC ऐक्सेस करने के लिए कॉन्फ़िगर करना
इस सेक्शन में, फ़्रंटएंड Cloud Run सेवा को VPC के ज़रिए, बैकएंड सेवा से कम्यूनिकेट करने के लिए कॉन्फ़िगर किया जाएगा.
इसके लिए, आपको फ़्रंटएंड Cloud Run इंस्टेंस में डायरेक्ट VPC इग्रेस जोड़ना होगा. इससे आपकी सेवा को VPC में इस्तेमाल करने के लिए, इंटरनल आईपी मिलेगा. इसके बाद, इग्रेस को इस तरह कॉन्फ़िगर करें कि फ़्रंटएंड सेवा से सभी आउटबाउंड कनेक्शन, VPC पर जाएं.
सबसे पहले, डायरेक्ट VPC इग्रेस चालू करने के लिए, यह कमांड चलाएं:
gcloud beta run services update $FRONTEND \ --network=default \ --subnet=default \ --vpc-egress=all-traffic \ --region=$REGION
अब पुष्टि की जा सकती है कि आपकी फ़्रंटएंड सेवा के पास VPC का ऐक्सेस है या नहीं:
gcloud beta run services describe $FRONTEND \ --region=$REGION
आपको इसके जैसा आउटपुट दिखेगा
VPC access:
Network: default
Subnet: default
Egress: all-traffic
अब फ़्रंटएंड सेवा से अपनी बैकएंड सेवा को कॉल करने की कोशिश करें.
इस बार आपको "hello world" दिखेगा.
ध्यान दें: आपकी फ़्रंटएंड सेवा के पास इंटरनेट का ऐक्सेस नहीं होगा, क्योंकि सभी इग्रेस को VPC पर रूट किया गया है. उदाहरण के लिए, अगर आपकी फ़्रंटएंड सेवा https://curlmyip.org/ को ऐक्सेस करने की कोशिश करती है, तो वह टाइम आउट हो जाएगी.
6. बधाई हो!
कोडलैब पूरा करने के लिए बधाई!
हमारा सुझाव है कि Cloud Run और Cloud Run की सेवाओं के लिए प्राइवेट नेटवर्किंग कॉन्फ़िगर करने का तरीका से जुड़ा दस्तावेज़ पढ़ें.
हमने क्या कवर किया
- Cloud Run की सेवा को सिर्फ़ VPC से आने वाले ट्रैफ़िक को ऐक्सेस करने की अनुमति देना
- सिर्फ़ इंटरनल-इनग्रेस वाले Cloud Run की सेवा से कम्यूनिकेट करने के लिए, Cloud Run की सेवा पर इग्रेस कॉन्फ़िगर करना
7. व्यवस्थित करें
Cloud Run की सेवा मिटाने के लिए, Cloud Run Cloud Console पर जाएं. इसके लिए, https://console.cloud.google.com/run पर जाएं. इसके बाद, $FRONTEND और $BACKEND सेवाएं मिटाएं.
अगर पूरा प्रोजेक्ट मिटाना है, तो https://console.cloud.google.com/cloud-resource-manager पर जाएं. इसके बाद, चरण 2 में बनाया गया प्रोजेक्ट चुनें और 'मिटाएं' को चुनें. प्रोजेक्ट मिटाने पर, आपको Cloud SDK में प्रोजेक्ट बदलने होंगे. gcloud projects list चलाकर, उपलब्ध सभी प्रोजेक्ट की सूची देखी जा सकती है.