1. परिचय
इस कोडलैब में, Google Kubernetes Engine (GKE) पर Hackathon Judge ऐप्लिकेशन को डिप्लॉय करने का तरीका बताया गया है. साथ ही, एजेंटिक वर्कलोड को सुरक्षित तरीके से चलाने के लिए, Kubernetes-sigs Agent Sandbox का इस्तेमाल करने का तरीका बताया गया है.
इस प्लैटफ़ॉर्म को एलएलएम एजेंट का इस्तेमाल करके, हैकथॉन प्रोजेक्ट की समीक्षा करने, उन्हें टेस्ट करने, और उन्हें ग्रेड देने की प्रोसेस को ऑटोमेट करने के लिए डिज़ाइन किया गया है. जज करने के लिए, उन लोगों के सबमिट किए गए कोड का आकलन करना ज़रूरी होता है जिन पर भरोसा नहीं किया जा सकता. इसलिए, कोड इंजेक्शन, खास सुविधाओं का गलत इस्तेमाल या संसाधनों का गलत इस्तेमाल रोकने के लिए, सुरक्षित एक्ज़ीक्यूशन सैंडबॉक्स बहुत ज़रूरी है.
आपको क्या करना होगा
- टारगेट Google Cloud सेवाएं उपलब्ध कराएं और टारगेट एपीआई सेट अप करें.
- GKE Autopilot को शुरू करें. साथ ही, एजेंट सैंडबॉक्स सीआरडी, क्लस्टर कॉन्फ़िगरेशन, और सैंडबॉक्स राउटर इंस्टॉल करें.
- सैंडबॉक्स गेटवे, सैंडबॉक्स क्लेम टेंप्लेट, और सैंडबॉक्स वार्मपूल को डिप्लॉय करें.
- REST Backend API, ADK Judging worker Agent, और React Frontend UI को डिप्लॉय करें.
- बाहरी लोड-बैलेंस वाली राउटिंग को वायर करें और सुरक्षित, सैंडबॉक्स वाले जजिंग वर्कफ़्लो चलाने के लिए प्लैटफ़ॉर्म को ऐक्सेस करें.
आपको किन चीज़ों की ज़रूरत होगी
- कोई वेब ब्राउज़र, जैसे कि Chrome.
- बिलिंग की सुविधा वाला Google क्लाउड प्रोजेक्ट.
इस कोडलैब में बनाए गए संसाधनों के लिए, कुल रनटाइम शुल्क 5 डॉलर से कम होना चाहिए.
2. समस्या: गैर-भरोसेमंद कोड का सुरक्षित तरीके से आकलन करना
हैकाथॉन, तेज़ी से होने वाले इनोवेशन इवेंट होते हैं. इनमें हिस्सा लेने वाले लोग, प्रोजेक्ट बनाते और सबमिट करते हैं. अक्सर, इनमें सोर्स कोड भी शामिल होता है, ताकि उसका आकलन किया जा सके. इन सबमिशन का मैन्युअल तरीके से आकलन करने में समय लगता है और इसके लिए ज़्यादा संसाधनों की ज़रूरत होती है. ग्रेडिंग को अपने-आप करने के लिए, एआई एजेंट का इस्तेमाल करना एक अच्छा विकल्प है. हालांकि, इससे सुरक्षा से जुड़ी एक बड़ी चुनौती सामने आती है: हिस्सा लेने वाले व्यक्ति के दिए गए कोड को सुरक्षित तरीके से कैसे चलाया जाए. ऐसा हो सकता है कि कोड में गड़बड़ियां हों, वह नुकसान पहुंचाने वाला हो या उसमें बहुत ज़्यादा संसाधनों की ज़रूरत हो.
अपने इंफ़्रास्ट्रक्चर पर सीधे तौर पर ऐसे कोड को चलाने से आपको इन जोखिमों का सामना करना पड़ सकता है:
- कोड डालना: नुकसान पहुंचाने वाली स्क्रिप्ट, संवेदनशील डेटा को ऐक्सेस करने या उसमें बदलाव करने की कोशिश कर सकती हैं.
- ज़्यादा अनुमतियां हासिल करना: कोड, अन्य सिस्टम या नेटवर्क संसाधनों को बिना अनुमति के ऐक्सेस करने की कोशिश कर सकता है.
- संसाधन का गलत इस्तेमाल: खराब तरीके से लिखा गया कोड या सेवा से इनकार करने वाले हमलों की वजह से, सीपीयू, मेमोरी या नेटवर्क बैंडविथ का बहुत ज़्यादा इस्तेमाल हो सकता है. इससे अन्य कार्रवाइयों पर असर पड़ता है.
एआई की मदद से हैकथॉन में सबमिट किए गए कोड की जांच को ऑटोमेट करने के लिए, हमें सबमिट किए गए कोड को ऐसे एनवायरमेंट में चलाने का तरीका चाहिए जो हमारे सिस्टम और अन्य सबमिशन से पूरी तरह से अलग हो.
3. समाधान: GKE एजेंट सैंडबॉक्स
GKE एजेंट सैंडबॉक्स, इस समस्या को हल करने के लिए बनाई गई सुविधा है. यह GKE पर अलग-अलग, स्टेटफ़ुल, और सिंगल-रेप्लिका वर्कलोड को मैनेज करने में मदद करता है. इसे एआई एजेंट रनटाइम जैसे इस्तेमाल के उदाहरणों के लिए ऑप्टिमाइज़ किया गया है. इनमें ऐसे कोड को सुरक्षित और असरदार तरीके से एक्ज़ीक्यूट करना ज़रूरी होता है जिस पर भरोसा नहीं किया जा सकता.
Agent Sandbox के मुख्य फ़ायदे:
- कर्नल-लेवल आइसोलेशन: यह सुविधा, gVisor जैसी टेक्नोलॉजी का इस्तेमाल करके, भरोसेमंद न होने वाले कोड के लिए कर्नल-लेवल आइसोलेशन उपलब्ध कराती है. इससे कोड को होस्ट सिस्टम या अन्य कंटेनर को ऐक्सेस करने से रोका जा सकता है.
- एक सेकंड से भी कम समय में उपलब्ध कराना: सैंडबॉक्स एनवायरमेंट को तेज़ी से उपलब्ध कराता है. आम तौर पर, इसमें एक सेकंड से भी कम समय लगता है. यह सुविधा, मांग पर कोड का आकलन करने के लिए ज़रूरी है.
- क्लाउड-नेटिव एक्सटेंसिबिलिटी: यह Kubernetes और GKE के मैनेज किए गए इन्फ़्रास्ट्रक्चर की सुविधाओं का फ़ायदा उठाता है.
Agent Sandbox का इस्तेमाल करके, हम हर हैकथॉन सबमिशन के लिए, ज़रूरत के हिसाब से अलग-अलग एनवायरमेंट बना सकते हैं. इसके बाद, एआई जजिंग एजेंट, एजेंट सैंडबॉक्स को टेस्ट चलाने, कोड कंपाइल करने या इस सुरक्षित सैंडबॉक्स में आकलन के अन्य चरण पूरे करने के लिए निर्देश दे सकता है. इससे पूरे प्लैटफ़ॉर्म की सुरक्षा को कोई खतरा नहीं होगा. इससे हैकथॉन की ग्रेडिंग को अपने-आप करने का एक ऐसा तरीका मिलता है जो सुरक्षित, असरदार, और ज़रूरत के हिसाब से बढ़ाया जा सकता है.
4. शुरू करने से पहले
कोई प्रोजेक्ट चुनें या बनाएं
पक्का करें कि आप सही Google Cloud प्रोजेक्ट में काम कर रहे हों:
- कोई प्रोजेक्ट चुनें या नया प्रोजेक्ट बनाएं: Google Cloud Console में, कोई मौजूदा प्रोजेक्ट चुनें या नया प्रोजेक्ट बनाएं.
- ऐक्टिव प्रोजेक्ट सेट करना: Cloud Shell को कॉन्फ़िगर करने के लिए, अपना प्रोजेक्ट आईडी नोट करें:
gcloud config set project [YOUR_PROJECT_ID]
बिलिंग की पुष्टि करना
पक्का करें कि आपके Google Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. ऐसा करने के तरीके के बारे में ज़्यादा जानने के लिए, यह गाइड पढ़ें.
Cloud Shell शुरू करना
Google Cloud Shell शुरू करने के लिए, नीचे दिए गए बटन पर क्लिक करें. इसमें डेवलपर और क्लाउड कमांड-लाइन यूटिलिटी पहले से कॉन्फ़िगर की गई हैं.
एपीआई चालू करें
प्लैटफ़ॉर्म को चलाने के लिए ज़रूरी सभी टारगेट Google Cloud API चालू करने के लिए, Cloud Shell में यह कमांड चलाएं:
gcloud services enable \
container.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
pubsub.googleapis.com \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
iam.googleapis.com \
bigquery.googleapis.com \
bigqueryconnection.googleapis.com
हम इन एपीआई को क्यों चालू करते हैं: Google Cloud की सेवाएं डिफ़ॉल्ट रूप से बंद होती हैं, ताकि अनधिकृत ऐक्सेस और शुल्क को रोका जा सके. हम इन खास एपीआई को चालू करते हैं, ताकि कंटेनर ऑर्केस्ट्रेशन (GKE), सुरक्षित कंटेनर स्टोरेज (Artifact Registry), बिना सर्वर वाली बिल्ड पैकेजिंग (Cloud Build), भरोसेमंद मैसेजिंग कतारें (Pub/Sub), एआई मॉडल सेवाएं (Vertex AI), प्रोजेक्ट कॉन्फ़िगरेशन (Cloud Resource Manager और IAM), बिना सर्वर वाली डेटा विश्लेषण सेवा (BigQuery), और डेटाबेस-लेवल एआई बाइंडिंग (BigQuery Connection) को चालू किया जा सके.
5. इंफ़्रास्ट्रक्चर सेट अप करना
इस चरण में, आपको कोड रिपॉज़िटरी को क्लोन करना होगा. साथ ही, टारगेट क्लाउड आर्किटेक्चर और बेसलाइन क्लस्टर कॉम्पोनेंट को डिप्लॉय करने के लिए, ऑटोमेटेड सेटअप स्क्रिप्ट को एक्ज़ीक्यूट करना होगा.
रिपॉज़िटरी का क्लोन बनाना
ऐप्लिकेशन की सभी सेवाओं, सेटअप स्क्रिप्ट, और Kubernetes मेनिफ़ेस्ट के एलान वाली रिपॉज़िटरी को क्लोन करें:
git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos
git sparse-checkout set codelabs/ai-toolkit-lab-2/hackathon-judge
cd codelabs/ai-toolkit-lab-2/hackathon-judge
डिप्लॉयमेंट स्क्रिप्ट चलाना
deploy.sh स्क्रिप्ट, क्लाउड रिसॉर्स, डेटाबेस मॉडल, और Kubernetes क्लस्टर की बुनियादी नीतियों के सेटअप को अपने-आप पूरा करती है.
स्क्रिप्ट चलाएं:
./deploy.sh
इंटरैक्टिव शेल में दिए गए निर्देशों का पालन करके, कॉन्फ़िगरेशन की जानकारी दें. जैसे, चालू प्रोजेक्ट आईडी और टारगेट क्षेत्र. यह स्क्रिप्ट, लोकल .env कॉन्फ़िगरेशन अपने-आप जनरेट करती है. साथ ही, संसाधनों को बाइंड करती है, कंटेनर इमेज कंपाइल करती है, और GKE के बुनियादी ढांचे को रजिस्टर करती है.
यहां स्क्रिप्ट की मदद से की गई टारगेट कार्रवाइयां दी गई हैं:
1. एनवायरमेंट कॉन्फ़िगरेशन सेटअप
यह स्क्रिप्ट, .env कॉन्फ़िगरेशन फ़ाइल बनाती है. इसका इस्तेमाल GKE, Pub/Sub, BigQuery, और प्रोजेक्ट वैरिएबल पैरामीटर को सेव करने के लिए किया जाता है. इस फ़ाइल को डाइनैमिक तरीके से सोर्स करने पर, Kubernetes मेनिफ़ेस्ट की सभी परिभाषाएं अपने-आप भर जाती हैं.
हम इस एनवायरमेंट फ़ाइल को क्यों कॉन्फ़िगर करते हैं: .env फ़ाइल, कॉन्फ़िगरेशन पैरामीटर को एक जगह पर इकट्ठा करती है. इससे यह पक्का होता है कि बाद के चरणों में, मैन्युअल तरीके से लागू किए गए GKE मेनिफ़ेस्ट, एक जैसी क्षेत्रीय सेटिंग, प्रोजेक्ट के नाम, और संसाधनों का इस्तेमाल करते हैं. साथ ही, एनवायरमेंट कॉन्फ़िगरेशन को सोर्स कोड से अलग करते हैं.
2. Google Cloud CLI और टारगेट प्रोजेक्ट का कॉन्फ़िगरेशन
यह स्क्रिप्ट पुष्टि करती है कि gcloud, bq, kubectl, और envsubst यूटिलिटी इंस्टॉल की गई हैं. साथ ही, यह पुष्टि करती है कि स्क्रिप्ट चालू है या नहीं. इसके अलावा, यह स्क्रिप्ट चालू कॉन्फ़िगरेशन टारगेट को आपके चालू Google Cloud प्रोजेक्ट पर लॉक करती है.
हम ऐक्टिव प्रोजेक्ट को टारगेट क्यों करते हैं: ऐक्टिव टारगेट प्रोजेक्ट सेट करने से, सीएलआई कमांड आपके खाते के अन्य प्रोजेक्ट पर असर नहीं डालती हैं. साथ ही, यह प्री-फ़्लाइट पुष्टि की जांच करती है. इससे यह पक्का होता है कि सेटअप कमांड, अमान्य क्रेडेंशियल की वजह से डिप्लॉयमेंट के बीच में फ़ेल न हों.
3. Google Cloud के टारगेट एपीआई चालू करना
यह स्क्रिप्ट, टारगेट की गई Google Cloud सेवा के एपीआई (GKE, Artifact Registry, Cloud Build, Pub/Sub, Vertex AI, BigQuery, और IAM) की पुष्टि करने और उन्हें चालू करने के लिए, आइडमपोटेंट जांच करती है.
हम Google Cloud API क्यों चालू करते हैं: मैनेज की गई क्लाउड सेवाओं के एंडपॉइंट तक पहुंचने या संसाधन बनाने से पहले, उन्हें चालू करना ज़रूरी है. इन्हें शुरू में चालू करने से, रीजनल GCP API गेटवे को संसाधन उपलब्ध कराने के बाद के निर्देशों को मैनेज करने में मदद मिलती है.
4. Artifact Registry में Docker इमेज स्टोर करने की जगह बनाना
यह स्क्रिप्ट, चुनी गई टारगेट लोकेशन में hackathon-judge-repo नाम की Docker कंटेनर रिपॉज़िटरी उपलब्ध कराती है.
हम Artifact Registry रिपॉज़िटरी क्यों बनाते हैं: GKE क्लस्टर को एक ही रीजनल नेटवर्क में मौजूद प्राइवेट कंटेनर रजिस्ट्री को सुरक्षित तरीके से ऐक्सेस करने की ज़रूरत होती है, ताकि वे ऐप्लिकेशन इमेज को तुरंत पुल कर सकें. Artifact Registry, Docker कंटेनर इमेज को कैटलॉग करने, स्कैन करने, और सेव करने के लिए एक सुरक्षित और निजी होस्ट उपलब्ध कराता है.
5. GKE Autopilot क्लस्टर को प्रोविज़न करना
यह स्क्रिप्ट, hackathon-judge-cluster नाम का Google Kubernetes Engine (GKE) Autopilot क्लस्टर उपलब्ध कराती है.
हम GKE Autopilot क्लस्टर क्यों डिप्लॉय करते हैं: GKE Autopilot, नोड प्रोविज़निंग, स्केलिंग, हेल्थ मॉनिटरिंग, और होस्ट ओएस की सुरक्षा से जुड़े अपग्रेड को अपने-आप मैनेज करता है. यह एक प्रोडक्शन-ग्रेड कंटेनर प्लैटफ़ॉर्म है. यह हमारी लगातार काम करने वाली सेवाओं को व्यवस्थित करता है. साथ ही, ज़रूरत पड़ने पर सुरक्षित वर्कर सैंडबॉक्स को डाइनैमिक तरीके से शेड्यूल करता है.
6. Pub/Sub विषयों और सदस्यताओं को कॉन्फ़िगर करना
यह स्क्रिप्ट, मैसेज के विषयों (judging-tasks और judging-results) के साथ-साथ उनसे जुड़ी वर्कर और एपीआई सदस्यताएं उपलब्ध कराती है.
हम Pub/Sub विषयों और सदस्यताओं को क्यों डिप्लॉय करते हैं: कोड सबमिट करने की प्रोसेस धीमी होती है और इसमें ज़्यादा संसाधनों की ज़रूरत होती है. मैसेज-कतार आर्किटेक्चर का इस्तेमाल करने से, उपयोगकर्ता के सामने दिखने वाला सिंक्रोनस एपीआई, वर्कर नोड से अलग हो जाता है. एपीआई बैकएंड, judging-tasks विषय पर जॉब पुश करता है. साथ ही, वर्कर एजेंट उपलब्ध होने पर टास्क खींचते हैं. इससे एपीआई ब्लॉक होने से बचता है और अपने-आप फिर से कोशिश करने की सुविधा मिलती है.
7. BigQuery डेटासेट, टेबल, और एआई कनेक्शन कॉन्फ़िगर करना
यह स्क्रिप्ट, hackathon_judge डेटासेट बनाती है, स्ट्रक्चरल एसक्यूएल डेटाबेस स्कीमा लागू करती है, सीड रिकॉर्ड लोड करती है, और BigQuery ML कनेक्शन सेवा खाते को एआई और स्टोरेज की ज़रूरी भूमिकाएं असाइन करती है.
8. Cloud Build का इस्तेमाल करके कंटेनर बिल्ड ट्रिगर करना
यह स्क्रिप्ट, cloudbuild.yaml की परिभाषा को ट्रिगर करती है. इससे हमारे React यूज़र इंटरफ़ेस (यूआई), Go REST सर्वर, Python ADK वर्कर, और FastAPI सैंडबॉक्स को कंपाइल किया जाता है. साथ ही, उन्हें अलग-अलग कंटेनर इमेज में पैकेज किया जाता है. इन इमेज को, चालू रिपॉज़िटरी के Git कमिट SHA के साथ टैग किया जाता है और Artifact Registry में सेव किया जाता है.
9. एजेंट सैंडबॉक्स की कस्टम रिसॉर्स डेफ़िनिशन (सीआरडी) रजिस्टर करना
यह स्क्रिप्ट, Kubernetes-sigs Agent Sandbox की कस्टम रिसॉर्स डेफ़िनिशन (manifest.yaml और extensions.yaml) के नए वर्शन को डाउनलोड और रजिस्टर करती है, ताकि GKE की मुख्य क्षमताओं को बढ़ाया जा सके.
हम एजेंट सैंडबॉक्स इन्फ़्रास्ट्रक्चर क्यों इंस्टॉल करते हैं: स्टैंडर्ड Kubernetes क्लस्टर में, सुरक्षित ऑन-डिमांड सैंडबॉक्स को असाइन करने की सुविधा नहीं होती है. एजेंट सैंडबॉक्स सीआरडी रजिस्टर करने से, GKE के कंट्रोल प्लैन का दायरा बढ़ जाता है. इससे Kubernetes, कस्टम रिसॉर्स (जैसे कि SandboxTemplates और SandboxClaims) का इस्तेमाल करके, सुरक्षित सैंडबॉक्स वाले माइक्रो-कंटेनर को नेटिव तरीके से व्यवस्थित कर पाता है.
10. नेमसpace, सेवा खाते, और Workload Identity को कॉन्फ़िगर करना
यह स्क्रिप्ट, hackathon-judge नेमस्पेस उपलब्ध कराती है, Kubernetes सेवा खातों (केएसए) को रजिस्टर करती है, और वर्कलोड आइडेंटिटी मैपिंग सेट अप करती है, ताकि GKE पॉड को Google Cloud की अनुमतियां दी जा सकें.
11. सैंडबॉक्स राउटर को डिप्लॉय करना
यह स्क्रिप्ट, k8s/sandbox_router.yaml मेनिफ़ेस्ट लागू करती है. इससे सैंडबॉक्स राउटर को डिप्लॉय करने और सेवा शुरू करने की प्रोसेस शुरू हो जाती है. साथ ही, यह स्क्रिप्ट उनके सही तरीके से काम करने का इंतज़ार करती है.
हम Sandbox Router को क्यों डिप्लॉय करते हैं: Sandbox Router, इंटरनल कंट्रोल-प्लेन का मुख्य गेटवे होता है. यह एक आसान एपीआई दिखाता है. ADK का जजिंग वर्कर एजेंट, सुरक्षित सैंडबॉक्स को ऐक्सेस करने, उन पर दावा करने या उन्हें रिलीज़ करने के लिए इस एपीआई को कॉल करता है. यह राउटिंग मैपिंग को मैनेज करता है और ऐप्लिकेशन लॉजिक से क्लस्टर-लेवल पॉड असाइनमेंट को अलग करता है.
6. एजेंट सैंडबॉक्स गेटवे, दावे, और WarmPool को कॉन्फ़िगर करना
इस चरण में, आपको खास सैंडबॉक्स नेटवर्क गेटवे को मैन्युअल तरीके से कॉन्फ़िगर करना होगा. साथ ही, सैंडबॉक्स के दावे वाले टेंप्लेट को रजिस्टर करना होगा और सैंडबॉक्स के WarmPool को डिप्लॉय करना होगा, ताकि इंतज़ार का समय बहुत कम रखने से जुड़ी सेटिंग वाली सैंडबॉक्सिंग को चालू किया जा सके.
सोर्स एनवायरमेंट वैरिएबल
ऐसे टेंप्लेट लागू करने से पहले जिनमें एनवायरमेंट वैरिएबल की ज़रूरत होती है, setup-env.sh स्क्रिप्ट को सोर्स करें, ताकि सभी ज़रूरी वैरिएबल को पार्स किया जा सके और आपके शेल में एक्सपोर्ट किया जा सके:
source ./setup-env.sh
सैंडबॉक्स गेटवे लागू करना
रूटिंग सैंडबॉक्स के ट्रैफ़िक के लिए, खास तौर पर कॉन्फ़िगर किए गए गेटवे को डिप्लॉय करें:
kubectl apply -f k8s/sandbox-gateway.yaml
हम सैंडबॉक्स गेटवे को क्यों डिप्लॉय करते हैं: सैंडबॉक्स गेटवे, सुरक्षित और बेहतर परफ़ॉर्मेंस वाला इनग्रेस कंट्रोलर है. यह सिर्फ़ सैंडबॉक्स राउटिंग के लिए काम करता है. यह सैंडबॉक्स नेटवर्क को अलग करता है. साथ ही, एक सुरक्षित लोकल टारगेट उपलब्ध कराता है. इससे वर्कर एजेंट, दावा किए गए सैंडबॉक्स के साथ कम्यूनिकेट कर पाते हैं. हालांकि, इससे एंडपॉइंट बाहरी तौर पर नहीं दिखते.
सैंडबॉक्स के लिए दावा करने का टेंप्लेट लागू करना
envsubst का इस्तेमाल करके, सैंडबॉक्स टेंप्लेट की परिभाषा में अपने ऐक्टिव एनवायरमेंट वैरिएबल भरें और इसे लागू करें:
source ./setup-env.sh
envsubst < k8s/sandbox-claim-template.yaml | kubectl apply -f -
हम सैंडबॉक्स क्लेम टेंप्लेट क्यों डिप्लॉय करते हैं: सैंडबॉक्स क्लेम टेंप्लेट, एनवायरमेंट को तय करने वाले ब्लूप्रिंट कॉन्फ़िगरेशन के तौर पर काम करता है. यह कंटेनर इमेज को चलाने के लिए, डेवलपर टूल के साथ पहले से पैकेज की गई इमेज, एनवायरमेंट पैरामीटर (GCP प्रोजेक्ट आईडी), पोर्ट, और संसाधन सीमाएं (सीपीयू/मेमोरी टारगेट) तय करता है. यह GKE को इन कंटेनर इंस्टेंस को gVisor (gvisor रनटाइम) का इस्तेमाल करके चलाने के लिए कॉन्फ़िगर करता है. इससे यह पक्का होता है कि भरोसेमंद नहीं माने जाने वाले लोगों का कोड, कर्नेल वर्चुअलाइज़ेशन आइसोलेशन की एक अतिरिक्त लेयर के तहत चलता है.
सैंडबॉक्स WarmPool लागू करना
सैंडबॉक्स को पहले से शुरू करने के लिए, सैंडबॉक्स वार्मपूल लागू करें:
kubectl apply -f k8s/sandbox-warmpool.yaml
पुष्टि करें कि वार्म पूल के स्टैंडबाय इंस्टेंस सही तरीके से शुरू हो गए हैं:
kubectl get pods -n hackathon-judge -l app=sandbox
हम सैंडबॉक्स WarmPool को क्यों डिप्लॉय करते हैं: मांग के हिसाब से नई कंटेनर पॉड को चालू करने, इमेज को पुल करने, शेड्यूल करने, और उपलब्ध कराने से स्टार्टअप ओवरहेड (कोल्ड स्टार्ट में 30 सेकंड से ज़्यादा समय लगता है) बढ़ जाता है. सैंडबॉक्स वार्मपूल, चालू और पहले से तैयार सैंडबॉक्स पॉड का स्टैंडबाय पूल बनाए रखता है. डिफ़ॉल्ट रूप से, पांच रेप्लिका होते हैं. जब वर्कर एजेंट, इवैलुएशन एनवायरमेंट का अनुरोध करता है, तो सैंडबॉक्स राऊटर तुरंत पहले से तैयार पॉड असाइन कर देता है. इससे, स्टार्ट-अप में लगने वाला समय कम हो जाता है.
7. ऐप्लिकेशन कॉम्पोनेंट डिप्लॉय करना
सुरक्षित सैंडबॉक्सिंग इन्फ़्रास्ट्रक्चर पूरी तरह से चालू होने के बाद, अब आपको सेंट्रल बैकएंड एपीआई, वर्कर एजेंट, React वेब इंटरफ़ेस, और इनग्रेस गेटवे मैपिंग को डिप्लॉय करना होगा.
बैकएंड डिप्लॉय करना
ऑर्केस्ट्रेटर REST API बैकएंड को डिप्लॉय करें:
source ./setup-env.sh
envsubst < k8s/backend.yaml | kubectl apply -f -
एजेंट डिप्लॉय करना
ADK के जजिंग वर्कर एजेंट को डिप्लॉय करें:
source ./setup-env.sh
envsubst < k8s/agent.yaml | kubectl apply -f -
फ़्रंटएंड डिप्लॉय करें
इंटरैक्टिव वेब यूज़र इंटरफ़ेस को डिप्लॉय करें:
source ./setup-env.sh
envsubst < k8s/frontend.yaml | kubectl apply -f -
बाहरी गेटवे और रूटिंग कॉन्फ़िगर करना
बाहरी क्लाइंट ट्रैफ़िक को मैप करने वाली मुख्य गेटवे और इनग्रेस एचटीटीपी राउट मैपिंग को डिप्लॉय करें:
kubectl apply -f k8s/gateway.yaml
हम बाहरी इनग्रेस गेटवे को क्यों डिप्लॉय करते हैं: बाहरी गेटवे, Kubernetes Gateway API का इस्तेमाल करके हमारी सेवाओं को दिखाता है. यह लोड-बैलेंस किया गया सार्वजनिक आईपी पता उपलब्ध कराता है और पाथ के नियमों के आधार पर रास्तों को मैप करता है. जैसे, /api/* के तहत एपीआई अनुरोधों को Go बैकएंड पर भेजना और अन्य सभी क्लाइंट वेब ट्रैफ़िक (/) को React फ़्रंटएंड पर मैप करना. इससे सार्वजनिक क्लस्टर ऐक्सेस सुरक्षित होता है.
रोलआउट की पुष्टि करना
शेल एक्ज़ीक्यूशन को ब्लॉक करें और तब तक इंतज़ार करें, जब तक कि तीनों मुख्य सेवाओं की डिप्लॉयमेंट प्रोसेस, रोलआउट के लिए तैयार न हो जाए:
kubectl rollout status deployment/backend -n hackathon-judge --timeout=300s
kubectl rollout status deployment/agent -n hackathon-judge --timeout=300s
kubectl rollout status deployment/frontend -n hackathon-judge --timeout=300s
8. ऐप्लिकेशन की पुष्टि करना और उसका इस्तेमाल करना
यूज़र इंटरफ़ेस (यूआई) को ऐक्सेस करना
नए तरीके से उपलब्ध कराए गए मुख्य लोड बैलेंसर गेटवे का बाहरी सार्वजनिक आईपी पता फ़ेच करें:
प्रोविज़निंग की स्थिति को रीयल टाइम में देखने के लिए, वॉच फ़्लैग (-w) के साथ कमांड चलाएं. इसके बाद, तब तक इंतज़ार करें, जब तक ADDRESS फ़ील्ड में कोई सार्वजनिक आईपी पता नहीं भर जाता:
kubectl get gateway -n hackathon-judge hackathon-judge-gateway -w
सफल तरीके से प्रोविज़न किए जाने के बाद, आपको इससे मिलता-जुलता आउटपुट दिखेगा:
NAME CLASS ADDRESS PROGRAMMED AGE hackathon-judge-gateway gke-l7 34.120.120.120 True 3m
जब आपको ADDRESS कॉलम में कोई मान्य सार्वजनिक आईपी पता दिखे और PROGRAMMED की स्थिति True हो, तब घड़ी को रोकने के लिए Ctrl+C दबाएं.
हमें गेटवे का स्टेटस क्यों मिलता है: गेटवे एपीआई, सार्वजनिक इनग्रेस को मैनेज करता है. गेटवे की स्थिति की जांच करने पर, Google Cloud के एक्सटर्नल ग्लोबल लोड बैलेंसर की ओर से हमारे क्लस्टर को असाइन किया गया सार्वजनिक, लोड-बैलेंस किया गया एक्सटर्नल आईपी पता दिखता है. यह हमारे प्लैटफ़ॉर्म का सार्वजनिक पता होता है.
अपने ब्राउज़र में, असाइन किया गया सार्वजनिक आईपी पता खोलें, ताकि हैकथॉन जज का डैशबोर्ड लोड हो सके.
टास्क सबमिट करना
- डैशबोर्ड पर जाने के लिए, फ़्रंटएंड यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करें. इसके बाद, हैकथॉन चुनें.

- किसी भी प्रोजेक्ट पर,
Run Agentपर क्लिक करके, रूब्रिक के हिसाब से पूरे प्रोजेक्ट का आकलन शुरू किया जा सकता है.

Watch Sandbox Kickoff
hackathon-judge नेमस्पेस में मौजूद ऐक्टिव पॉड को मॉनिटर करें. इससे आपको यह पता चलेगा कि सैंडबॉक्स पॉड को डाइनैमिक तरीके से दावा किया गया है और उसे एक्ज़ीक्यूशन का आकलन करने के लिए उपलब्ध कराया गया है:
kubectl get pods -n hackathon-judge -w
एडीके के आकलन के लॉजिक को स्टेप-बाय-स्टेप देखने के लिए, वर्कर एजेंट पॉड के लॉग देखें:
kubectl logs -l app=agent -n hackathon-judge
हम एजेंट के लॉग की जांच क्यों करते हैं: एजेंट के लॉग की जांच करने से, मूल्यांकन पाइपलाइन के अंदरूनी चरणों की पूरी जानकारी रीयल-टाइम में दिखती है. टास्क को फ़ेच करने वाले एडीके एजेंट, सैंडबॉक्स कंटेनर का अनुरोध करने वाले एजेंट, कंपाइलेशन टारगेट को लागू करने वाले एजेंट, Gemini की मदद से रिपोर्ट का विश्लेषण करने वाले एजेंट, और स्कोरकार्ड पब्लिश करने वाले एजेंट को ट्रैक किया जा सकता है.
9. (ज़रूरी नहीं) यह सुविधा कैसे काम करती है
एजेंट सैंडबॉक्स आर्किटेक्चर
BigQuery के एआई फ़ंक्शन, टेक्स्ट पर आधारित सबमिशन और README में किए गए दावों का आकलन करने के लिए बेहतरीन हैं. हालांकि, किसी इंजीनियरिंग प्रोजेक्ट का आकलन करने के लिए, कोड को कंपाइल करना, तीसरे पक्ष की लाइब्रेरी इंस्टॉल करना, और असली टेस्ट सुइट चलाना ज़रूरी होता है.
उपयोगकर्ता के रॉ कोड को चलाने से सुरक्षा से जुड़े गंभीर जोखिम पैदा हो सकते हैं. जैसे, होस्ट से समझौता करना, कंटेनर ब्रेकआउट, और बिना अनुमति के संसाधन को ऐक्सेस करना. GKE एजेंट सैंडबॉक्स फ़्रेमवर्क, gVisor (runsc) वर्चुअलाइज़ेशन का इस्तेमाल करके, अलग-अलग सैंडबॉक्स वर्कलोड को व्यवस्थित करता है. इससे इन जोखिमों को कम किया जा सकता है.
सिस्टम इंटरैक्शन फ़्लो
नीचे दिए गए डायग्राम में बताया गया है कि इवेंट-ड्रिवन सिस्टम के अलग-अलग एलिमेंट, सुरक्षित सैंडबॉक्स में जजिंग के दौरान कैसे कम्यूनिकेट करते हैं:

उपयोगकर्ता की दिलचस्पी बढ़ाने वाले टूल और कॉम्पोनेंट एक साथ कैसे काम करते हैं
- React फ़्रंटएंड यूज़र इंटरफ़ेस (यूआई): यह एक इंटरैक्टिव इंटरफ़ेस दिखाता है. यहाँ उपयोगकर्ता, मानदंड मॉडल कॉन्फ़िगर करते हैं, टीमें रजिस्टर करते हैं, प्रोजेक्ट के यूआरएल सबमिट करते हैं, और फ़ाइनल किए गए ग्रेडिंग स्कोरकार्ड की समीक्षा करते हैं. इसमें फ़ाइल में मौजूद सभी गड़बड़ियाँ और इंजीनियरिंग से जुड़ी टिप्पणियाँ शामिल होती हैं.
- Go REST Backend API: यह ग्लोबल एपीआई एंडपॉइंट मैनेज करता है. यह प्रोजेक्ट कॉन्फ़िगरेशन को BigQuery में सेव करता है और Pub/Sub में जजिंग जॉब को पुश करता है, ताकि भारी कंप्यूटेशनल एक्ज़ीक्यूशन पाइपलाइन को अलग किया जा सके.
- Google Pub/Sub: यह मैसेज-ओरिएंटेड ब्रोकर है. यह टास्क के मैसेज को सुरक्षित तरीके से ऑन-क्यू रखता है. साथ ही, एपीआई और ऐक्टिव वर्कर इंस्टेंस के बीच एसिंक्रोनस तरीके से कम्यूनिकेशन को व्यवस्थित करता है.
- Python ADK वर्कर (सुपरवाइज़र एजेंट): यह एक बैकग्राउंड वर्कर होता है, जो Pub/Sub से टास्क लेता है. यह Google Agent Development Kit (ADK) का इस्तेमाल करके, सुपरवाइज़र एजेंट को शुरू करता है. इसे आकलन को व्यवस्थित करने का निर्देश दिया जाता है. सुपरवाइज़र, डीप रॉ कमांड की टेस्टिंग को सौंपने के लिए, अपने मुख्य टूल
evaluate_repositoryका इस्तेमाल करता है. - सैंडबॉक्स राउटर और गेटवे (GKE कंट्रोल प्लैन): यह एक इंटरनल कंट्रोल गेटवे है. यह स्टैंडर्ड सैंडबॉक्स कस्टम रिसोर्स डेफ़िनिशन (
SandboxClaims,SandboxTemplates) को रजिस्टर करता है. यह पॉड को असाइन करने और सुरक्षित करने के लिए, GKE नेटवर्क को कोऑर्डिनेट करता है. साथ ही, कनेक्शन स्ट्रीम को वर्कर क्लाइंट को वापस भेजता है. - सैंडबॉक्स WarmPool: GKE कंटेनर को शुरू होने में ज़्यादा समय लगने से बचने के लिए, WarmPool ऐक्टिव स्टैंडबाय पॉड बनाए रखता है. कंटेनर को शुरू होने में ज़्यादा समय लगने को "कोल्ड स्टार्ट" कहा जाता है. इसमें 30 सेकंड से ज़्यादा समय लगता है. सैंडबॉक्स पर दावा किए जाने पर, राऊटर उसे तुरंत मैप कर देता है. इसके बाद, रिलीज़ होने पर उसे रीसाइकल करने के लिए शेड्यूल कर देता है.
- gVisor (runsc) आइसोलेशन: यह एक यूज़र-स्पेस वर्चुअल कर्नल है, जो सुरक्षित सैंडबॉक्सिंग बाउंड्री के तौर पर काम करता है. यह कंटेनर स्पेस से GKE नोड कर्नल तक सिस्टम कॉल को इंटरसेप्ट करता है. इससे यह पक्का होता है कि खतरनाक रॉ कमांड (जैसे कि सिस्टम स्क्रिप्ट या पैकेज सेटअप) पूरी तरह से वर्चुअलाइज़ेशन आइसोलेशन में चलें.
- FastAPI सैंडबॉक्स रनटाइम: यह एक लाइटवेट Python API सर्वर है, जो सैंडबॉक्स कंटेनर में चलता है. यह सुरक्षित एंडपॉइंट (
/execute,/upload,/download) दिखाता है. इनकी मदद से, बाहरी वर्कर टूल फ़ाइलों में बदलाव कर सकते हैं और शेल टास्क ट्रिगर कर सकते हैं. - Gemini CLI (
@google/gemini-cli): यह सैंडबॉक्स में इंस्टॉल की गई ऑटोनॉमस एजेंट स्क्रिप्ट है. डेवलपर एनवायरमेंट के रनटाइम फ़्लैग (--yolo) के साथ ट्रिगर होने पर, यह ग्रेडिंग के लिए निर्देशों वाली शीट (prompt.md) और शर्तों की परिभाषा (criteria.md) का इस्तेमाल करके ये काम करता है:treeयाripgrepजैसे टूल का इस्तेमाल करके, कोडबेस के क्रम का डाइनैमिक तरीके से विश्लेषण करें.- ज़रूरी शर्तें अपने-आप इंस्टॉल हो जाती हैं. इसके लिए,
npm install,pip install,go buildजैसी कमांड का इस्तेमाल किया जाता है. - फ़ंक्शन की पुष्टि करने के लिए, डेवलपमेंट की असली जांच करें. जैसे,
npm testयाpytest. - फ़ाइल के लॉजिक का आकलन करने, README फ़ाइल में दिए गए दावों की पुष्टि करने, घोस्ट फ़ीचर का पता लगाने, क्वालिटी से जुड़ी समस्याओं को लॉग करने, और
evaluation.jsonमें स्ट्रक्चर्ड स्कोरकार्ड रिपोर्ट लिखने के लिए, कंटेनर की Workload Identity बाइंडिंग क्रेडेंशियल के ज़रिए Vertex AI मॉडल को कॉल करें.
- स्टैंडर्ड डेवलपर एनवायरमेंट: यह सैंडबॉक्स कंटेनर इमेज में नोड, npm, yarn, pnpm, python, pip, uv, go, gh, git, tree, ripgrep, और playwright को बंडल करता है. इससे ऑटोनॉमस सब-एजेंट को टेस्ट करने के लिए पूरा वर्कस्पेस मिलता है.
10. स्टोरेज में जगह बनाएं
अपने Google Cloud खाते से लगातार शुल्क लिए जाने से बचने के लिए, इस कोडलैब के दौरान बनाई गई संसाधन मिटाएं.
./destroy.sh
हम संसाधनों को क्यों हटाते हैं: Google Cloud, संसाधन के इस्तेमाल के आधार पर बिलिंग करता है. GKE Autopilot क्लस्टर, नेटवर्क लोड बैलेंसर, और परसिस्टेंट डिस्क जैसे चालू संसाधनों के लिए, इस्तेमाल न करने पर भी शुल्क लगता रहता है. इस चरण को पूरा करने पर, क्लस्टर नेमस्पेस मिट जाता है. इससे Kubernetes ऑब्जेक्ट मिट जाते हैं. साथ ही, GKE Autopilot क्लस्टर होस्ट भी मिट जाता है, ताकि बिलिंग से जुड़े सभी शुल्क तुरंत बंद किए जा सकें.
11. बधाई हो
बधाई हो! आपने GKE पर, एजेंट सैंडबॉक्स के साथ हैकथॉन जज ऐप्लिकेशन को सफलतापूर्वक डिप्लॉय कर लिया है!
आपने एक सुरक्षित, आधुनिक इवेंट-ड्रिवन एआई प्लैटफ़ॉर्म लागू किया है जो अलग-थलग कंटेनर वाली सुरक्षा से जुड़ी पाबंदियों के तहत, ऐसे कोड बेस सबमिशन की जांच और आकलन कर सकता है जिन पर भरोसा नहीं किया जा सकता.
आपने क्या सीखा
- GKE इन्फ़्रास्ट्रक्चर: GKE Autopilot और Google Cloud की अन्य सेवाओं, जैसे कि Pub/Sub और BigQuery को कैसे उपलब्ध कराएं.
- एजेंट सैंडबॉक्स का कॉन्फ़िगरेशन: कस्टम रिसॉर्स डेफ़िनिशन, SandboxTemplates, SandboxClaims, और ज़्यादा परफ़ॉर्मेंस वाले Sandbox WarmPools को कॉन्फ़िगर करने का तरीका.
- माइक्रोसर्विसेज़ डिप्लॉयमेंट: Workload Identity बाइंडिंग को कैसे कॉन्फ़िगर करें और मल्टी-कंपोनेंट माइक्रोसर्विसेज़ आर्किटेक्चर (फ़्रंटएंड React, REST Go, वर्कर एडीके एजेंट, और आइसोलेटेड सैंडबॉक्स) को कैसे डिप्लॉय करें.
- सुरक्षित सैंडबॉक्सिंग: GKE नोड पर, तीसरे पक्ष के ऐसे कमांड को सुरक्षित तरीके से चलाने के लिए gVisor वर्चुअलाइज़्ड कंटेनर का इस्तेमाल कैसे करें जिन पर भरोसा नहीं किया जा सकता.
अगले चरण
- Agent Sandbox के दस्तावेज़ देखें.
- GKE Autopilot की सुविधाओं के बारे में ज़्यादा जानें.
- Agent Platform Documentation देखें.