GKE पर एजेंट सैंडबॉक्स की मदद से कोड का अपने-आप आकलन होना

1. परिचय

इस कोडलैब में, Google Kubernetes Engine (GKE) पर Hackathon Judge ऐप्लिकेशन को डिप्लॉय करने का तरीका बताया गया है. साथ ही, एजेंटिक वर्कलोड को सुरक्षित तरीके से चलाने के लिए, Kubernetes-sigs Agent Sandbox का इस्तेमाल करने का तरीका बताया गया है.

इस प्लैटफ़ॉर्म को इस तरह से डिज़ाइन किया गया है कि यह एलएलएम एजेंट का इस्तेमाल करके, हैकथॉन प्रोजेक्ट की समीक्षा, टेस्टिंग, और ग्रेडिंग की प्रोसेस को ऑटोमेट कर सके. जज करने के लिए, कोड सबमिट करने वाले ऐसे लोगों के कोड का आकलन करना ज़रूरी होता है जिन पर भरोसा नहीं किया जा सकता. इसलिए, कोड इंजेक्शन, खास सुविधाओं का गलत इस्तेमाल या संसाधनों का गलत इस्तेमाल रोकने के लिए, सुरक्षित एक्ज़ीक्यूशन सैंडबॉक्स बहुत ज़रूरी है.

आपको क्या करना होगा

  • टारगेट की गई Google Cloud सेवाओं को चालू करें और टारगेट एपीआई सेट अप करें.
  • GKE Autopilot को शुरू करें. साथ ही, एजेंट सैंडबॉक्स सीआरडी, क्लस्टर कॉन्फ़िगरेशन, और सैंडबॉक्स राउटर इंस्टॉल करें.
  • सैंडबॉक्स गेटवे, सैंडबॉक्स क्लेम टेंप्लेट, और सैंडबॉक्स वार्मपूल को डिप्लॉय करें.
  • REST बैकएंड एपीआई, ADK जजिंग वर्कर एजेंट, और React फ़्रंटएंड यूज़र इंटरफ़ेस (यूआई) को डिप्लॉय करें.
  • बाहरी लोड-बैलेंस वाली राउटिंग को वायर करें और सुरक्षित, सैंडबॉक्स वाले जजिंग वर्कफ़्लो चलाने के लिए प्लैटफ़ॉर्म को ऐक्सेस करें.

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

  • कोई वेब ब्राउज़र, जैसे कि Chrome.
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट.

इस कोडलैब में बनाए गए संसाधनों का कुल रनटाइम शुल्क, 5 डॉलर से कम होना चाहिए.

2. समस्या: भरोसेमंद न होने वाले कोड का सुरक्षित तरीके से आकलन करना

हैकाथॉन, तेज़ी से होने वाले इनोवेशन इवेंट होते हैं. इनमें हिस्सा लेने वाले लोग, प्रोजेक्ट बनाते और सबमिट करते हैं. अक्सर, इनमें सोर्स कोड भी शामिल होता है, ताकि उसका आकलन किया जा सके. इन सबमिशन का मैन्युअल तरीके से आकलन करने में समय लगता है और इसके लिए ज़्यादा संसाधनों की ज़रूरत होती है. ग्रेडिंग को अपने-आप करने के लिए, एआई एजेंट का इस्तेमाल करना एक अच्छा विकल्प है. हालांकि, इससे सुरक्षा से जुड़ी एक बड़ी चुनौती सामने आती है: हिस्सा लेने वाले व्यक्ति के दिए गए कोड को सुरक्षित तरीके से कैसे चलाया जाए. ऐसा हो सकता है कि कोड में गड़बड़ियां हों, वह नुकसान पहुंचाने वाला हो या उसमें बहुत ज़्यादा संसाधनों की ज़रूरत हो?

अपने इंफ़्रास्ट्रक्चर पर सीधे तौर पर ऐसे कोड को चलाने से आपको इन जोखिमों का सामना करना पड़ सकता है:

  • कोड इंजेक्शन: नुकसान पहुंचाने वाली स्क्रिप्ट, संवेदनशील डेटा को ऐक्सेस करने या उसमें बदलाव करने की कोशिश कर सकती हैं.
  • ज़्यादा अनुमतियां पाना: कोड, अन्य सिस्टम या नेटवर्क संसाधनों को बिना अनुमति के ऐक्सेस करने की कोशिश कर सकता है.
  • संसाधन का गलत इस्तेमाल: खराब तरीके से लिखा गया कोड या सेवा से इनकार करने वाले हमलों की वजह से, सीपीयू, मेमोरी या नेटवर्क बैंडविथ का बहुत ज़्यादा इस्तेमाल हो सकता है. इससे अन्य कार्रवाइयों पर असर पड़ता है.

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

3. समस्या हल करने का तरीका: GKE एजेंट सैंडबॉक्स

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

Agent Sandbox के मुख्य फ़ायदे:

  • कर्नल-लेवल आइसोलेशन: यह gVisor जैसी टेक्नोलॉजी का इस्तेमाल करके, भरोसेमंद न होने वाले कोड के लिए मज़बूत, कर्नल-लेवल आइसोलेशन उपलब्ध कराता है. इससे कोड को होस्ट सिस्टम या अन्य कंटेनर को ऐक्सेस करने से रोका जा सकता है.
  • एक सेकंड से भी कम समय में उपलब्ध कराना: सैंडबॉक्स एनवायरमेंट को तेज़ी से उपलब्ध कराता है. आम तौर पर, इसमें एक सेकंड से भी कम समय लगता है. यह सुविधा, मांग पर कोड का आकलन करने के लिए ज़रूरी है.
  • क्लाउड-नेटिव एक्सटेंसिबिलिटी: यह Kubernetes और GKE के मैनेज किए गए इन्फ़्रास्ट्रक्चर की सुविधाओं का फ़ायदा उठाता है.

Agent Sandbox का इस्तेमाल करके, हम हर हैकथॉन सबमिशन के लिए, ज़रूरत के हिसाब से अलग-अलग एनवायरमेंट बना सकते हैं. इसके बाद, एआई जजिंग एजेंट, एजेंट सैंडबॉक्स को टेस्ट चलाने, कोड कंपाइल करने या इस सुरक्षित सैंडबॉक्स में मूल्यांकन के अन्य चरण पूरे करने के लिए निर्देश दे सकता है. इससे पूरे प्लैटफ़ॉर्म की सुरक्षा को कोई खतरा नहीं होगा. इससे हैकथॉन की ग्रेडिंग को अपने-आप करने का एक ऐसा तरीका मिलता है जो सुरक्षित, असरदार, और ज़रूरत के हिसाब से बढ़ाया जा सकता है.

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

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 Repository को चालू करना

यह स्क्रिप्ट, चुनी गई टारगेट लोकेशन में 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 क्लस्टर में, सुरक्षित किए गए ऑन-डिमांड सैंडबॉक्स को असाइन करने की सुविधा नहीं होती है. Agent Sandbox CRD रजिस्टर करने से, 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 runtime) का इस्तेमाल करके चलाने के लिए कॉन्फ़िगर करता है. इससे यह पक्का होता है कि भरोसेमंद नहीं माने जाने वाले लोगों का कोड, कर्नेल वर्चुअलाइज़ेशन आइसोलेशन की एक अतिरिक्त लेयर के तहत चलता है.

सैंडबॉक्स वार्मपूल लागू करना

सैंडबॉक्स को पहले से शुरू करने के लिए, Sandbox 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. ऐप्लिकेशन की पुष्टि करना और उसका इस्तेमाल करना

यूज़र इंटरफ़ेस (यूआई) को ऐक्सेस करना

नए तरीके से उपलब्ध कराए गए मुख्य लोड बैलेंसर गेटवे का बाहरी सार्वजनिक आईपी पता पाएं:

प्रोविज़निंग की स्थिति को रीयल टाइम में देखने के लिए, watch फ़्लैग (-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 पर क्लिक करके, रूब्रिक के हिसाब से पूरे प्रोजेक्ट का आकलन शुरू किया जा सकता है.

प्रोजेक्ट

सैंडबॉक्स किकऑफ़ देखें

hackathon-judge नेमस्पेस में मौजूद ऐक्टिव पॉड की निगरानी करें. इससे आपको यह पता चलेगा कि सैंडबॉक्स पॉड को डाइनैमिक तरीके से दावा किया गया है और उसे एक्ज़ीक्यूशन का आकलन करने के लिए उपलब्ध कराया गया है:

kubectl get pods -n hackathon-judge -w

एडीके के आकलन के लॉजिक को स्टेप-बाय-स्टेप देखने के लिए, वर्कर एजेंट पॉड के लॉग देखें:

kubectl logs -l app=agent -n hackathon-judge

हम एजेंट के लॉग की जांच क्यों करते हैं: एजेंट के लॉग की जांच करने से, मूल्यांकन पाइपलाइन के अंदरूनी चरणों की पूरी जानकारी रीयल-टाइम में दिखती है. टास्क को फ़ेच करने वाले एडीके एजेंट, सैंडबॉक्स कंटेनर का अनुरोध करने वाले एजेंट, कंपाइलेशन टारगेट को एक्ज़ीक्यूट करने वाले एजेंट, Gemini की मदद से रिपोर्ट का विश्लेषण करने वाले एजेंट, और स्कोरकार्ड पब्लिश करने वाले एजेंट को ट्रैक किया जा सकता है.

9. (ज़रूरी नहीं) यह कैसे काम करता है

Agent Sandbox Architecture

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 नेटवर्क को कोऑर्डिनेट करता है. साथ ही, वर्कर क्लाइंट को कनेक्शन स्ट्रीम वापस भेजता है.
  • सैंडबॉक्स वार्मपूल: GKE कंटेनर को शुरू होने में ज़्यादा समय लगने से बचने के लिए, वार्मपूल में स्टैंडबाय पॉड चालू रहते हैं. कंटेनर को शुरू होने में 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 में स्ट्रक्चर्ड स्कोरकार्ड रिपोर्ट लिखने के लिए, कंटेनर की वर्कलोड आइडेंटिटी बाइंडिंग क्रेडेंशियल के ज़रिए 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 वर्चुअलाइज़्ड कंटेनर का इस्तेमाल कैसे करें जिन पर भरोसा नहीं किया जा सकता.

अगले चरण

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