1. ভূমিকা
ওভারভিউ
তাদের পরিষেবা এবং অ্যাপ্লিকেশনগুলির জন্য নেটওয়ার্ক ট্র্যাফিক সুরক্ষিত করতে, অনেক সংস্থা ডেটা অপসারণ রোধ করতে পরিধি নিয়ন্ত্রণ সহ Google ক্লাউডে একটি ভার্চুয়াল প্রাইভেট ক্লাউড (VCP) নেটওয়ার্ক ব্যবহার করে৷ একটি ভিপিসি নেটওয়ার্ক হল একটি ভৌত নেটওয়ার্কের একটি ভার্চুয়াল সংস্করণ যা Google এর উৎপাদন নেটওয়ার্কের ভিতরে প্রয়োগ করা হয়। একটি VPC নেটওয়ার্ক আপনার কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিন (VM) দৃষ্টান্তগুলির জন্য সংযোগ প্রদান করে, অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালেন্সারের জন্য নেটিভ অভ্যন্তরীণ পাসথ্রু নেটওয়ার্ক লোড ব্যালেন্সার এবং প্রক্সি সিস্টেম সরবরাহ করে, ক্লাউড ইন্টারকানেক্টের জন্য ক্লাউড VPN টানেল এবং VLAN সংযুক্তিগুলি ব্যবহার করে অন-প্রিমিসেস নেটওয়ার্কগুলির সাথে সংযোগ স্থাপন করে, এবং Google ক্লাউড এক্সটার্নাল লোড ব্যালেন্সার থেকে ব্যাকএন্ডে ট্রাফিক বিতরণ করে।
ভিএম-এর বিপরীতে, ক্লাউড রান পরিষেবাগুলি ডিফল্টরূপে কোনও নির্দিষ্ট ভিপিসি নেটওয়ার্কের সাথে যুক্ত নয়। এই কোডল্যাবটি দেখায় কিভাবে প্রবেশ (ইনবাউন্ড সংযোগ) সেটিংস পরিবর্তন করতে হয় যাতে শুধুমাত্র ভিপিসি থেকে আসা ট্রাফিক একটি ক্লাউড রান পরিষেবা (যেমন একটি ব্যাকএন্ড পরিষেবা) অ্যাক্সেস করতে পারে। উপরন্তু, এই কোডল্যাব আপনাকে দেখায় কিভাবে একটি দ্বিতীয় পরিষেবা (যেমন একটি ফ্রন্টএন্ড পরিষেবা) VPC-এর মাধ্যমে ব্যাকএন্ড ক্লাউড রান পরিষেবা উভয়ই অ্যাক্সেস করতে হয় এবং সর্বজনীন ইন্টারনেট অ্যাক্সেস চালিয়ে যেতে হয়।
এই উদাহরণে, ব্যাকএন্ড ক্লাউড রান সার্ভিস হ্যালো ওয়ার্ল্ড রিটার্ন করে। ফ্রন্টএন্ড ক্লাউড রান পরিষেবা একটি URL সংগ্রহ করতে UI-তে একটি ইনপুট ক্ষেত্র প্রদান করে। তারপর ফ্রন্টএন্ড পরিষেবা সেই URL-এ একটি GET অনুরোধ করে (যেমন ব্যাকএন্ড পরিষেবা), তাই এটিকে একটি পরিষেবা থেকে পরিষেবা অনুরোধ করে (একটি ব্রাউজার থেকে পরিষেবা অনুরোধের পরিবর্তে)। যখন ফ্রন্টএন্ড পরিষেবা সফলভাবে ব্যাকএন্ডে পৌঁছাতে পারে, তখন ব্রাউজারে হ্যালো ওয়ার্ল্ড বার্তাটি প্রদর্শিত হয়। তারপর, আপনি দেখতে পাবেন কিভাবে আপনি আপনার ফ্রন্টএন্ড পরিষেবার আইপি ঠিকানা পুনরুদ্ধার করতে https://curlmyip.org-এ একটি কল করতে পারেন৷
আপনি কি শিখবেন
- কিভাবে একটি VPC থেকে আপনার ক্লাউড রান পরিষেবাতে শুধুমাত্র ট্র্যাফিকের অনুমতি দেওয়া যায়
- ফ্রন্টএন্ড পরিষেবার জন্য সর্বজনীন ইন্টারনেট অ্যাক্সেস বজায় রেখে কেবলমাত্র ক্লাউড রান পরিষেবার (যেমন ব্যাকএন্ড) সাথে যোগাযোগ করতে ক্লাউড রান পরিষেবাতে (যেমন ফ্রন্টএন্ড) এগ্রেস কনফিগার করবেন।
2. সেটআপ এবং প্রয়োজনীয়তা
পূর্বশর্ত
- আপনি ক্লাউড কনসোলে লগ ইন করেছেন।
- আপনি পূর্বে একটি 2nd gen ফাংশন স্থাপন করেছেন। উদাহরণস্বরূপ, আপনি শুরু করতে একটি ক্লাউড ফাংশন 2nd gen quickstart স্থাপন অনুসরণ করতে পারেন।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন
.
যদি এটি আপনার প্রথমবার ক্লাউড শেল শুরু হয়, তাহলে এটি কী তা বর্ণনা করে আপনাকে একটি মধ্যবর্তী স্ক্রীন উপস্থাপন করা হবে। যদি আপনি একটি মধ্যবর্তী স্ক্রীনের সাথে উপস্থাপিত হন, তবে চালিয়ে যান ক্লিক করুন।
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণীকৃত হয়েছেন এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
3. ক্লাউড রান পরিষেবাগুলি তৈরি করুন৷
পরিবেশ ভেরিয়েবল সেটআপ করুন
আপনি পরিবেশের ভেরিয়েবল সেট করতে পারেন যা এই কোডল্যাব জুড়ে ব্যবহার করা হবে।
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> FRONTEND=frontend-with-internet BACKEND=backend SUBNET_NAME=default
ব্যাকএন্ড ক্লাউড রান পরিষেবা তৈরি করুন
প্রথমে, সেই ডিরেক্টরিতে সোর্স কোড এবং সিডির জন্য একটি ডিরেক্টরি তৈরি করুন।
mkdir -p egress-private-codelab/frontend-w-internet egress-private-codelab/backend && cd egress-private-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}`); });
অবশেষে, নিম্নলিখিত কমান্ডটি চালিত ক্লাউড রান পরিষেবা স্থাপন করুন।
gcloud run deploy $BACKEND --source . --allow-unauthenticated --region $REGION
ফ্রন্টএন্ড ক্লাউড রান পরিষেবা তৈরি করুন
ফ্রন্টএন্ড ডিরেক্টরিতে নেভিগেট করুন
cd ../frontend-w-internet
তারপর, নিম্নলিখিত বিষয়বস্তু সহ একটি 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", "htmx.org": "^1.9.10" } }
এরপরে, নিচের বিষয়বস্তু সহ একটি 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 Request Tester service on the Internet</h1> <form hx-trigger="submit" hx-post="/callService" hx-target="#zen"> <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="zen" style="white-space: pre-wrap"></div> <p></p> </form> </div> </body> </html>
অবশেষে, নিম্নলিখিত কমান্ডটি চালিত ক্লাউড রান পরিষেবা স্থাপন করুন।
gcloud run deploy $FRONTEND --source . --allow-unauthenticated --region $REGION
ব্যাকএন্ড সার্ভিসে কল করুন
এই বিভাগে, আপনি যাচাই করবেন যে আপনি দুটি ক্লাউড রান পরিষেবা সফলভাবে স্থাপন করেছেন৷
আপনার ওয়েব ব্রাউজারে ফ্রন্টএন্ড পরিষেবার URL খুলুন, যেমন https://frontend-your-hash-uc.a.run.app/
টেক্সটবক্সে, ব্যাকএন্ড পরিষেবার জন্য URL লিখুন। মনে রাখবেন যে এই অনুরোধটি ফ্রন্ট এন্ড ক্লাউড রান ইনস্ট্যান্স থেকে ব্যাকএন্ড ক্লাউড রান পরিষেবাতে রুট করা হয়েছে, আপনার ব্রাউজার থেকে নয়।
দেখবেন "হ্যালো ওয়ার্ল্ড"
4. শুধুমাত্র অভ্যন্তরীণ প্রবেশের জন্য ব্যাকএন্ড পরিষেবা সেট করুন
আপনার ব্যক্তিগত নেটওয়ার্কে একটি ক্লাউড রান পরিষেবা অন্তর্ভুক্ত করতে আপনি নিম্নলিখিত gcloud কমান্ডটি চালাতে পারেন।
gcloud run services update $BACKEND --ingress internal --region $REGION
আপনি যদি ফ্রন্টএন্ড পরিষেবা থেকে ব্যাকএন্ড পরিষেবাতে কল করার চেষ্টা করেন তবে আপনি একটি 404 ত্রুটি পাবেন৷ ফ্রন্টএন্ড ক্লাউড রান পরিষেবা আউটগোয়িং কানেকশন (বা ইগ্রেস) প্রথমে ইন্টারনেটে চলে যায়, তাই Google ক্লাউড অনুরোধের উৎস জানে না।
5. ভিপিসি অ্যাক্সেস করতে ফ্রন্টএন্ড পরিষেবা কনফিগার করুন
এই বিভাগে, আপনি একটি VPC এর মাধ্যমে আপনার ব্যাকএন্ড পরিষেবার সাথে যোগাযোগ করতে আপনার ফ্রন্টএন্ড ক্লাউড রান পরিষেবা কনফিগার করবেন।
এটি করার জন্য, আপনাকে আপনার ফ্রন্টএন্ড ক্লাউড রান পরিষেবাতে সরাসরি ভিপিসি এগ্রেস যোগ করতে হবে যাতে এটি VPC নেটওয়ার্কে অভ্যন্তরীণ আইপি ঠিকানাগুলিতে পৌঁছাতে পারে। তারপরে, আপনি বহির্গমনকে এমনভাবে কনফিগার করবেন যাতে শুধুমাত্র প্রাইভেট আইপি-র অনুরোধগুলি VPC-তে পাঠানো হবে। এই কনফিগারেশন আপনার ফ্রন্টএন্ডকে এখনও সর্বজনীন ইন্টারনেটে পৌঁছানোর অনুমতি দেবে। আপনি অন্যান্য ক্লাউড রান পরিষেবাগুলি থেকে অনুরোধ পাওয়ার বিষয়ে ডকুমেন্টেশনে আরও শিখতে পারেন৷
সরাসরি ভিপিসি এগ্রেস কনফিগার করুন
প্রথমে, আপনার ফ্রন্টএন্ড পরিষেবাতে সরাসরি ভিপিসি এগ্রেস ব্যবহার করতে এই কমান্ডটি চালান:
gcloud beta run services update $FRONTEND \ --network=$SUBNET_NAME \ --subnet=$SUBNET_NAME \ --vpc-egress=private-ranges-only \ --region=$REGION
আপনি এখন নিশ্চিত করতে পারেন যে আপনার ফ্রন্টএন্ড পরিষেবার ভিপিসিতে অ্যাক্সেস রয়েছে:
gcloud beta run services describe $FRONTEND \ --region=$REGION
আপনি অনুরূপ আউটপুট দেখতে হবে
VPC access: Network: default Subnet: default Egress: private-ranges-only
ব্যক্তিগত Google অ্যাক্সেস সক্ষম করুন৷
এরপরে, আপনি নিম্নলিখিত কমান্ডটি চালিয়ে সাবনেটে ব্যক্তিগত Google অ্যাক্সেস সক্ষম করবেন:
gcloud compute networks subnets update $SUBNET_NAME \ --region=$REGION \ --enable-private-ip-google-access
আপনি এই কমান্ডটি চালানোর মাধ্যমে ব্যক্তিগত Google অ্যাক্সেস সক্ষম করা হয়েছে তা যাচাই করতে পারেন:
gcloud compute networks subnets describe $SUBNET_NAME \ --region=$REGION \ --format="get(privateIpGoogleAccess)"
run.app URL-এর জন্য Cloud DNS জোন তৈরি করুন
অবশেষে, run.app URL-এর জন্য একটি ক্লাউড DNS জোন তৈরি করুন যাতে Google ক্লাউড সেগুলিকে অভ্যন্তরীণ আইপি ঠিকানা হিসাবে বিবেচনা করতে পারে৷
একটি পূর্ববর্তী ধাপে যখন আপনি সরাসরি VPC প্রস্থান শুধুমাত্র ব্যক্তিগত-রেঞ্জে কনফিগার করেন। এর মানে হল যে আপনার ফ্রন্টএন্ড পরিষেবা থেকে আউটবাউন্ড সংযোগগুলি শুধুমাত্র VPC নেটওয়ার্কে যাবে যদি গন্তব্যটি একটি অভ্যন্তরীণ IP হয়৷ যাইহোক, আপনার ব্যাকএন্ড পরিষেবা একটি run.app URL ব্যবহার করে যা একটি সর্বজনীন আইপিতে সমাধান করে।
এই ধাপে, আপনি private.googleapis.com আইপি অ্যাড্রেস রেঞ্জের সমাধান করতে run.app URL-এর জন্য একটি ক্লাউড DNS জোন তৈরি করবেন, যেগুলি অভ্যন্তরীণ IP ঠিকানা হিসেবে স্বীকৃত। এখন, এই রেঞ্জের যেকোনো অনুরোধ আপনার VPC নেটওয়ার্কের মাধ্যমে রুট করা হবে।
আপনি এটি এর মাধ্যমে করতে পারেন: https://cloud.google.com/run/docs/securing/private-networking#from-other-services
# do not include the https:// in your DNS Name # for example: backend-<hash>-uc.a.run.app DNS_NAME=<your backend service URL without the https://> gcloud dns --project=$PROJECT_ID managed-zones create codelab-backend-service \ --description="" \ --dns-name="a.run.app." \ --visibility="private" \ --networks=$SUBNET_NAME gcloud dns --project=$PROJECT_ID record-sets create $DNS_NAME. \ --zone="codelab-backend-service" \ --type="A" \ --ttl="60" \ --rrdatas="199.36.153.8,199.36.153.9,199.36.153.10,199.36.153.11"
এখন আপনি যখন আপনার ওয়েবসাইটের জন্য ব্যাকএন্ড পরিষেবাতে পৌঁছানোর চেষ্টা করবেন, আপনি দেখতে পাবেন "হ্যালো ওয়ার্ল্ড" ফিরে এসেছে।
এবং আপনি যখন https://curlmyip.org/ ব্যবহার করে ইন্টারনেটে পৌঁছানোর চেষ্টা করবেন, আপনি আপনার আইপি ঠিকানা দেখতে পাবেন।
6. সমস্যা সমাধান
সেটিংস সঠিকভাবে কনফিগার করা না থাকলে এখানে কিছু সম্ভাব্য ত্রুটির বার্তা রয়েছে যা আপনি সম্মুখীন হতে পারেন৷
- আপনি যদি একটি ত্রুটি পান
getaddrinfo ENOTFOUND backend-your-hash-uc.a.run.app
নিশ্চিত করুন যে আপনি DNS A রেকর্ডে "https://" যোগ করেননি - জোন কনফিগার করার পরে ব্যাকএন্ড অ্যাক্সেস করার চেষ্টা করার সময় আপনি যদি একটি 404 ত্রুটি পান, আপনি হয় গ্লোবাল run.app রেকর্ডে ক্যাশের মেয়াদ শেষ হওয়ার জন্য অপেক্ষা করতে পারেন (যেমন 6 ঘন্টা) অথবা আপনি একটি নতুন সংশোধন তৈরি করতে পারেন (অতএব ক্যাশে সাফ করা হচ্ছে) ) নিম্নলিখিত কমান্ড চালানোর মাধ্যমে:
gcloud beta run services update $FRONTEND --network=$SUBNET_NAME --subnet=$SUBNET_NAME --vpc-egress=private-ranges-only --region=$REGION
7. অভিনন্দন!
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন!
আমরা ক্লাউড রানে প্রাইভেট নেটওয়ার্কিং- এর ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই।
আমরা কভার করেছি কি
- কিভাবে একটি VPC থেকে আপনার ক্লাউড রান পরিষেবাতে শুধুমাত্র ট্র্যাফিকের অনুমতি দেওয়া যায়
- ফ্রন্টএন্ড পরিষেবার জন্য সর্বজনীন ইন্টারনেট অ্যাক্সেস বজায় রেখে কেবলমাত্র ক্লাউড রান পরিষেবার (যেমন ব্যাকএন্ড) সাথে যোগাযোগ করতে ক্লাউড রান পরিষেবাতে (যেমন ফ্রন্টএন্ড) এগ্রেস কনফিগার করবেন।
8. পরিষ্কার করুন
অসাবধানতাবশত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি এই ক্লাউড রান পরিষেবাটি আপনার মাসিক ক্লাউড রান ইনভোকমেন্ট বরাদ্দের চেয়ে বিনামূল্যের স্তরে অজান্তেই বেশি বার আহ্বান করা হয়), আপনি হয় ক্লাউড রান পরিষেবাটি মুছে ফেলতে পারেন বা ধাপ 2-এ আপনার তৈরি করা প্রকল্পটি মুছে ফেলতে পারেন৷
ক্লাউড রান পরিষেবাগুলি মুছতে, https://console.cloud.google.com/functions/- এ ক্লাউড রান ক্লাউড কনসোলে যান এবং এই কোডল্যাবে আপনার তৈরি করা $FRONTEND এবং $BACKEND পরিষেবাগুলি মুছুন৷
আপনি যদি সম্পূর্ণ প্রকল্প মুছে ফেলার সিদ্ধান্ত নেন, আপনি https://console.cloud.google.com/cloud-resource-manager- এ যেতে পারেন, ধাপ 2-এ আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন৷ আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud projects list
চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।