GKE-তে এজেন্ট স্যান্ডবক্সের মাধ্যমে স্বয়ংক্রিয় কোড মূল্যায়ন

১. ভূমিকা

এই কোডল্যাবে, আপনি গুগল কুবারনেটিস ইঞ্জিন (GKE)-এ হ্যাকাথন জাজ অ্যাপ্লিকেশনটি ডেপ্লয় করবেন এবং কুবারনেটিস-সিগস এজেন্ট স্যান্ডবক্স ব্যবহার করে এজেন্টিক ওয়ার্কলোডগুলি নিরাপদে ও সুরক্ষিতভাবে চালাবেন।

প্ল্যাটফর্মটি এলএলএম এজেন্ট ব্যবহার করে হ্যাকাথন প্রজেক্ট পর্যালোচনা, পরীক্ষা এবং গ্রেডিং করার প্রক্রিয়াকে স্বয়ংক্রিয় করার জন্য ডিজাইন করা হয়েছে। যেহেতু মূল্যায়নের জন্য অংশগ্রহণকারীদের অবিশ্বস্ত কোড জমা দেওয়ার বিষয়টি পরীক্ষা করতে হয়, তাই কোড ইনজেকশন, প্রিভিলেজ এসকেলেশন বা রিসোর্স অপব্যবহার রোধ করার জন্য একটি সুরক্ষিত এক্সিকিউশন স্যান্ডবক্স অপরিহার্য।

আপনি যা করবেন

  • লক্ষ্য গুগল ক্লাউড পরিষেবাগুলো প্রস্তুত করুন এবং লক্ষ্য এপিআইগুলো স্থাপন করুন।
  • GKE অটোপাইলট চালু করুন এবং এজেন্ট স্যান্ডবক্স CRD, ক্লাস্টার কনফিগারেশন ও স্যান্ডবক্স রাউটার ইনস্টল করুন।
  • স্যান্ডবক্স গেটওয়ে, স্যান্ডবক্স ক্লেইম টেমপ্লেট এবং একটি স্যান্ডবক্স ওয়ার্মপুল স্থাপন করুন।
  • REST ব্যাকএন্ড API, ADK Judging ওয়ার্কার এজেন্ট এবং React ফ্রন্টএন্ড UI ডিপ্লয় করুন।
  • এক্সটার্নাল লোড-ব্যালেন্সড রাউটিং সংযুক্ত করুন এবং সুরক্ষিত, স্যান্ডবক্সড বিচার কার্যপ্রবাহ চালানোর জন্য প্ল্যাটফর্মটি অ্যাক্সেস করুন।

আপনার যা যা লাগবে

  • ক্রোমের মতো একটি ওয়েব ব্রাউজার।
  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট।

এই কোডল্যাবে তৈরি রিসোর্সগুলোর মোট রানটাইম চার্জ ৫ ডলারের কম হওয়া উচিত।

২. সমস্যাটি: অবিশ্বস্ত কোডের নিরাপদ মূল্যায়ন

হ্যাকাথন হলো দ্রুতগতির উদ্ভাবনী অনুষ্ঠান, যেখানে অংশগ্রহণকারীরা মূল্যায়নের জন্য প্রজেক্ট তৈরি করে জমা দেন—যার মধ্যে প্রায়শই সোর্স কোডও অন্তর্ভুক্ত থাকে। এই জমা দেওয়া প্রজেক্টগুলো হাতে-কলমে বিচার করা সময়সাপেক্ষ এবং সম্পদ-নিবিড়। গ্রেডিং স্বয়ংক্রিয় করতে এআই এজেন্ট ব্যবহার করা একটি সম্ভাবনাময় সমাধান, কিন্তু এটি একটি বড় নিরাপত্তা ঝুঁকি তৈরি করে: অংশগ্রহণকারীদের দেওয়া ত্রুটিপূর্ণ, ক্ষতিকর বা সম্পদ-নিবিড় কোড কীভাবে নিরাপদে চালানো যাবে?

আপনার পরিকাঠামোতে সরাসরি অবিশ্বস্ত কোড চালানো আপনাকে নিম্নলিখিত ঝুঁকিগুলোর সম্মুখীন করে:

  • কোড ইনজেকশন : ক্ষতিকারক স্ক্রিপ্টগুলো সংবেদনশীল তথ্য অ্যাক্সেস বা পরিবর্তন করার চেষ্টা করতে পারে।
  • প্রিভিলেজ এসকেলেশন : কোডটি অন্যান্য সিস্টেম বা নেটওয়ার্ক রিসোর্সে অননুমোদিত অ্যাক্সেস পাওয়ার চেষ্টা করতে পারে।
  • সম্পদের অপব্যবহার : ত্রুটিপূর্ণভাবে লেখা কোড অথবা ডিনায়াল-অফ-সার্ভিস অ্যাটাক অতিরিক্ত সিপিইউ, মেমরি বা নেটওয়ার্ক ব্যান্ডউইথ ব্যবহার করতে পারে, যা অন্যান্য কার্যক্রমকে প্রভাবিত করে।

এআই-এর সাহায্যে হ্যাকাথনের বিচার প্রক্রিয়া স্বয়ংক্রিয় করতে, আমাদের এমন একটি উপায় প্রয়োজন যার মাধ্যমে জমা দেওয়া কোডকে আমাদের সিস্টেমের বাকি অংশ এবং অন্যান্য জমা দেওয়া কোড থেকে সম্পূর্ণ বিচ্ছিন্ন একটি পরিবেশে চালানো যাবে।

৩. সমাধান: GKE এজেন্ট স্যান্ডবক্স

GKE এজেন্ট স্যান্ডবক্স হলো এমন একটি ফিচার যা ঠিক এই চ্যালেঞ্জটির জন্যই ডিজাইন করা হয়েছে। এটি GKE-তে আইসোলেটেড, স্টেটফুল এবং সিঙ্গেল-রেপ্লিকা ওয়ার্কলোড পরিচালনা করতে সাহায্য করে এবং AI এজেন্ট রানটাইমের মতো ব্যবহারের ক্ষেত্রগুলোর জন্য বিশেষভাবে অপ্টিমাইজ করা হয়েছে, যেখানে অবিশ্বস্ত কোডকে অবশ্যই নিরাপদে ও দক্ষতার সাথে কার্যকর করতে হয়।

এজেন্ট স্যান্ডবক্সের প্রধান সুবিধাগুলো হলো:

  • কার্নেল-স্তরের আইসোলেশন : gVisor-এর মতো প্রযুক্তি ব্যবহার করে অবিশ্বস্ত কোডের জন্য শক্তিশালী কার্নেল-স্তরের আইসোলেশন প্রদান করে, যা কোডকে হোস্ট সিস্টেম বা অন্যান্য কন্টেইনার অ্যাক্সেস করা থেকে বিরত রাখে।
  • সাব-সেকেন্ড প্রোভিশনিং : স্যান্ডবক্স এনভায়রনমেন্ট দ্রুত প্রোভিশন করার সুবিধা দেয় (সাধারণত ১ সেকেন্ডেরও কম), যা অন-ডিমান্ড কোড ইভ্যালুয়েশনের জন্য অত্যন্ত গুরুত্বপূর্ণ।
  • ক্লাউড-নেটিভ এক্সটেনসিবিলিটি : কুবারনেটিস (Kubernetes)-এর শক্তি এবং জিকেই (GKE)-এর পরিচালিত অবকাঠামোকে কাজে লাগায়।

এজেন্ট স্যান্ডবক্স ব্যবহার করে, আমরা প্রতিটি হ্যাকাথন সাবমিশনের জন্য চাহিদা অনুযায়ী বিচ্ছিন্ন পরিবেশ তৈরি করতে পারি। এরপর এআই জাজিং এজেন্ট পুরো প্ল্যাটফর্মের অখণ্ডতার ঝুঁকি না নিয়েই এই সুরক্ষিত স্যান্ডবক্সের মধ্যে এজেন্ট স্যান্ডবক্সকে টেস্ট চালানো, কোড কম্পাইল করা বা অন্যান্য মূল্যায়ন ধাপ সম্পাদন করার নির্দেশ দিতে পারে। এটি হ্যাকাথনের গ্রেডিং স্বয়ংক্রিয় করার জন্য একটি পরিবর্ধনযোগ্য, সুরক্ষিত এবং কার্যকর উপায় প্রদান করে।

৪. শুরু করার আগে

ক্লাউড শেল শুরু করুন

গুগল ক্লাউড শেল চালু করতে নিচের বোতামটি ক্লিক করুন, যেটি প্রয়োজনীয় ডেভেলপার ও ক্লাউড কমান্ড-লাইন ইউটিলিটিসহ আগে থেকেই কনফিগার করা থাকে।

এপিআই সক্ষম করুন

প্ল্যাটফর্মটি চালানোর জন্য প্রয়োজনীয় সমস্ত টার্গেট গুগল ক্লাউড এপিআই সক্রিয় করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

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

কেন আমরা এই API-গুলো সক্রিয় করি: অননুমোদিত অ্যাক্সেস এবং চার্জ এড়ানোর জন্য Google Cloud পরিষেবাগুলো ডিফল্টরূপে নিষ্ক্রিয় থাকে। কন্টেইনার অর্কেস্ট্রেশন (GKE), সুরক্ষিত কন্টেইনার স্টোরেজ (আর্টিফ্যাক্ট রেজিস্ট্রি), সার্ভারলেস বিল্ড প্যাকেজিং (ক্লাউড বিল্ড), নির্ভরযোগ্য মেসেজিং কিউ (পাব/সাব), এআই মডেল পরিষেবা (ভার্টেক্স এআই), প্রজেক্ট কনফিগারেশন (ক্লাউড রিসোর্স ম্যানেজার ও আইএএম), সার্ভারলেস ডেটা অ্যানালিটিক্স (বিগকোয়েরি), এবং ডাটাবেস-স্তরের এআই বাইন্ডিং (বিগকোয়েরি কানেকশন) সক্রিয় করার জন্য আমরা এই নির্দিষ্ট API-গুলো চালু করি।

৫. পরিকাঠামো স্থাপন করুন

এই ধাপে, আপনি কোড রিপোজিটরি ক্লোন করবেন এবং টার্গেট ক্লাউড আর্কিটেকচার ও বেসলাইন ক্লাস্টার কম্পোনেন্টগুলো ডেপ্লয় করার জন্য অটোমেটেড সেটআপ স্ক্রিপ্টটি এক্সিকিউট করবেন।

রিপোজিটরি ক্লোন করুন

সমস্ত অ্যাপ্লিকেশন সার্ভিস, সেটআপ স্ক্রিপ্ট এবং কুবারনেটিস ম্যানিফেস্ট ডিক্লারেশন ধারণকারী রিপোজিটরিটি ক্লোন করুন:

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 স্ক্রিপ্ট দ্বারা স্বয়ংক্রিয়ভাবে সম্পন্ন হয়।

স্ক্রিপ্টটি চালান:

./deploy.sh

আপনার সক্রিয় প্রজেক্ট আইডি এবং টার্গেট রিজিয়নের মতো কনফিগারেশন সরবরাহ করতে ইন্টারেক্টিভ শেল প্রম্পটগুলো অনুসরণ করুন। স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে একটি স্থানীয় .env কনফিগারেশন তৈরি করে, রিসোর্স বাইন্ড করে, কন্টেইনার ইমেজ কম্পাইল করে এবং GKE বেসলাইন ইনফ্রাস্ট্রাকচার রেজিস্টার করে।

স্ক্রিপ্টটি দ্বারা সম্পাদিত লক্ষ্য অপারেশনগুলো নিচে দেওয়া হলো:

১. পরিবেশ কনফিগারেশন সেটআপ

এই স্ক্রিপ্টটি GKE, Pub/Sub, BigQuery, এবং প্রোজেক্ট ভেরিয়েবল প্যারামিটার সংরক্ষণের জন্য একটি .env কনফিগারেশন ফাইল তৈরি করে। এই ফাইলটি সোর্স করলে পরবর্তী সমস্ত Kubernetes ম্যানিফেস্ট ডেফিনিশন ডায়নামিকভাবে পূরণ হয়ে যায়।

কেন আমরা এই এনভায়রনমেন্ট ফাইলটি কনফিগার করি: .env ফাইলটি কনফিগারেশন প্যারামিটারগুলোকে কেন্দ্রীভূত করে, যা নিশ্চিত করে যে পরবর্তী ধাপগুলোতে আমরা ম্যানুয়ালি যে GKE ম্যানিফেস্টগুলো প্রয়োগ করি, সেগুলো অভিন্ন আঞ্চলিক সেটিংস, প্রোজেক্টের নাম এবং রিসোর্স ব্যবহার করে, এবং এর মাধ্যমে সোর্স কোড থেকে এনভায়রনমেন্টাল কনফিগারেশনকে কঠোরভাবে বিচ্ছিন্ন রাখে।

২. গুগল ক্লাউড সিএলআই এবং টার্গেট প্রজেক্ট কনফিগারেশন

এই স্ক্রিপ্টটি gcloud , bq , kubectl , এবং envsubst ইউটিলিটিগুলো ইনস্টল করা আছে কিনা তা যাচাই করে, প্রমাণীকরণের অবস্থা পরীক্ষা করে, এবং আপনার সক্রিয় গুগল ক্লাউড প্রজেক্টে সক্রিয় কনফিগারেশন টার্গেটগুলোকে লক করে।

কেন আমরা সক্রিয় প্রজেক্টকে টার্গেট করি: সক্রিয় টার্গেট প্রজেক্ট সেট করলে CLI কমান্ডগুলো আপনার অ্যাকাউন্টের অন্যান্য প্রজেক্টকে প্রভাবিত করতে পারে না এবং প্রি-ফ্লাইট অথেন্টিকেশন চেক সম্পন্ন হয়, যা নিশ্চিত করে যে ভুল ক্রেডেনশিয়ালের কারণে সেটআপ কমান্ডগুলো ডেপ্লয়মেন্টের মাঝপথে ব্যর্থ হবে না।

৩. টার্গেট গুগল ক্লাউড এপিআই সক্রিয় করা

স্ক্রিপ্টটি টার্গেট গুগল ক্লাউড সার্ভিস এপিআই (GKE, Artifact Registry, Cloud Build, Pub/Sub, Vertex AI, BigQuery, এবং IAM) যাচাই ও সক্রিয় করার জন্য একটি আইডম্পোটেন্ট চেক সম্পাদন করে।

কেন আমরা গুগল ক্লাউড এপিআই সক্রিয় করি: ম্যানেজড ক্লাউড পরিষেবাগুলির এন্ডপয়েন্টগুলি অ্যাক্সেসযোগ্য হওয়ার বা রিসোর্স তৈরি করার আগে সেগুলিকে অবশ্যই সক্রিয় করতে হয়। শুরুতে এগুলি সক্রিয় করলে আঞ্চলিক GCP এপিআই গেটওয়ে পরবর্তী রিসোর্স প্রোভিশনিং কমান্ডগুলি পরিচালনা করার জন্য প্রস্তুত থাকে।

৪. আর্টিফ্যাক্ট রেজিস্ট্রি ডকার রিপোজিটরি প্রোভিশনিং করা

স্ক্রিপ্টটি নির্বাচিত টার্গেট লোকেশনে hackathon-judge-repo নামের একটি ডকার কন্টেইনার রিপোজিটরি প্রস্তুত করে।

কেন আমরা একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করি: অ্যাপ্লিকেশন ইমেজ দ্রুত পুল করার জন্য GKE ক্লাস্টারগুলোর একই আঞ্চলিক নেটওয়ার্কে অবস্থিত প্রাইভেট কন্টেইনার রেজিস্ট্রিগুলোতে সুরক্ষিত অ্যাক্সেসের প্রয়োজন হয়। আর্টিফ্যাক্ট রেজিস্ট্রি ডকার কন্টেইনার ইমেজ ক্যাটালগ, স্ক্যান এবং সংরক্ষণ করার জন্য একটি সুরক্ষিত ও প্রাইভেট হোস্ট প্রদান করে।

৫. GKE অটোপাইলট ক্লাস্টারের প্রোভিশনিং

এই স্ক্রিপ্টটি hackathon-judge-cluster নামের একটি গুগল কুবারনেটিস ইঞ্জিন (GKE) অটোপাইলট ক্লাস্টার প্রস্তুত করে।

কেন আমরা একটি GKE Autopilot ক্লাস্টার স্থাপন করি: GKE Autopilot স্বয়ংক্রিয়ভাবে নোড প্রভিশনিং, স্কেলিং, হেলথ মনিটরিং এবং হোস্ট ওএস নিরাপত্তা আপগ্রেড পরিচালনা করে। এটি আমাদের পারসিস্টেন্ট সার্ভিসগুলোকে অর্কেস্ট্রেট করার জন্য একটি প্রোডাকশন-গ্রেড কন্টেইনার প্ল্যাটফর্ম প্রদান করে এবং চাহিদা অনুযায়ী সুরক্ষিত ওয়ার্কার স্যান্ডবক্সগুলোকে ডায়নামিকভাবে শিডিউল করে।

৬. পাব/সাব টপিক এবং সাবস্ক্রিপশন কনফিগার করা

স্ক্রিপ্টটি মেসেজ টপিকগুলো ( judging-tasks এবং judging-results ) এবং সেগুলোর সাথে সংশ্লিষ্ট ওয়ার্কার ও এপিআই সাবস্ক্রিপশনগুলো সরবরাহ করে।

আমরা কেন পাব/সাব টপিক এবং সাবস্ক্রিপশন ব্যবহার করি: কোড সাবমিশন মূল্যায়ন করা একটি ধীর এবং সম্পদ-নিবিড় প্রক্রিয়া। একটি মেসেজ-কিউ আর্কিটেকচার ব্যবহার করে সিঙ্ক্রোনাস ইউজার-ফেসিং এপিআই-কে ওয়ার্কার নোড থেকে বিচ্ছিন্ন করা হয়। এপিআই ব্যাকএন্ড ' judging-tasks টপিকে জবগুলো পুশ করে, এবং ওয়ার্কার এজেন্টরা উপলব্ধ হওয়ার সাথে সাথে টাস্কগুলো পুল করে, যা এপিআই ব্লক হওয়া প্রতিরোধ করে এবং স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করার সুবিধা প্রদান করে।

৭. BigQuery ডেটাসেট, টেবিল এবং এআই সংযোগ কনফিগার করা

এই স্ক্রিপ্টটি hackathon_judge ডেটাসেট তৈরি করে, স্ট্রাকচারাল SQL ডাটাবেস স্কিমা প্রয়োগ করে, সিড রেকর্ড লোড করে এবং BigQuery ML কানেকশন সার্ভিস অ্যাকাউন্টকে প্রয়োজনীয় AI ও স্টোরেজ রোল প্রদান করে।

৮. ক্লাউড বিল্ড ব্যবহার করে কন্টেইনার বিল্ড চালু করা

এই স্ক্রিপ্টটি cloudbuild.yaml ডেফিনিশনকে ট্রিগার করে আমাদের React UI, Go REST সার্ভার, Python ADK ওয়ার্কার এবং FastAPI স্যান্ডবক্স কম্পাইল করে। এরপর এটি সেগুলোকে সক্রিয় রিপোজিটরির Git কমিট SHA দিয়ে ট্যাগ করা পৃথক কন্টেইনার ইমেজে প্যাকেজ করে এবং আর্টিফ্যাক্ট রেজিস্ট্রি-তে সংরক্ষণ করে।

৯. এজেন্ট স্যান্ডবক্স কাস্টম রিসোর্স ডেফিনিশন (CRD) নিবন্ধন করা

এই স্ক্রিপ্টটি GKE-এর মূল কার্যক্ষমতা প্রসারিত করার জন্য সর্বশেষ Kubernetes-sigs Agent Sandbox Custom Resource Definitions ( manifest.yaml এবং extensions.yaml ) ডাউনলোড এবং রেজিস্টার করে।

আমরা কেন এজেন্ট স্যান্ডবক্স পরিকাঠামো ইনস্টল করি: স্ট্যান্ডার্ড কুবারনেটিস ক্লাস্টারগুলিতে সুরক্ষিত অন-ডিমান্ড স্যান্ডবক্স বরাদ্দ করার জন্য সমর্থনের অভাব রয়েছে। এজেন্ট স্যান্ডবক্স CRD রেজিস্টার করা GKE-এর কন্ট্রোল প্লেনকে প্রসারিত করে, যা কুবারনেটিসকে কাস্টম রিসোর্স (যেমন স্যান্ডবক্স টেমপ্লেট এবং স্যান্ডবক্স ক্লেইম) ব্যবহার করে সুরক্ষিত স্যান্ডবক্সযুক্ত মাইক্রো-কন্টেইনারগুলিকে স্বাভাবিকভাবে অর্কেস্ট্রেট করতে সক্ষম করে।

১০. নেমস্পেস, সার্ভিস অ্যাকাউন্ট এবং ওয়ার্কলোড আইডেন্টিটি কনফিগার করা

এই স্ক্রিপ্টটি hackathon-judge নেমস্পেস প্রস্তুত করে, কুবারনেটিস সার্ভিস অ্যাকাউন্ট (কেএসএ) নিবন্ধন করে এবং জিকেই পডগুলোকে টার্গেট গুগল ক্লাউড পারমিশন দেওয়ার জন্য ওয়ার্কলোড আইডেন্টিটি ম্যাপিং স্থাপন করে।

১১. স্যান্ডবক্স রাউটার স্থাপন করা

স্ক্রিপ্টটি k8s/sandbox_router.yaml ম্যানিফেস্টটি প্রয়োগ করে, স্যান্ডবক্স রাউটার ডেপ্লয়মেন্ট ও সার্ভিস শুরু করে এবং সেগুলোর একটি স্বাস্থ্যকর অবস্থায় পৌঁছানোর জন্য অপেক্ষা করে।

আমরা কেন স্যান্ডবক্স রাউটার স্থাপন করি: স্যান্ডবক্স রাউটার হলো কেন্দ্রীয় অভ্যন্তরীণ কন্ট্রোল-প্লেন গেটওয়ে। এটি একটি সহজ এপিআই (API) প্রদান করে, যা ADK জাজিং ওয়ার্কার এজেন্ট সুরক্ষিত স্যান্ডবক্স দাবি করতে, অ্যাক্সেস করতে বা মুক্ত করতে কল করে। এটি রাউটিং ম্যাপিং পরিচালনা করে এবং অ্যাপ্লিকেশন লজিক থেকে ক্লাস্টার-স্তরের পড বরাদ্দকে আড়াল করে।

৬. এজেন্ট স্যান্ডবক্স গেটওয়ে, ক্লেইমস এবং ওয়ার্মপুল কনফিগার করুন

এই ধাপে, আপনি অতি-স্বল্প লেটেন্সির স্যান্ডবক্সিং সক্ষম করার জন্য বিশেষায়িত স্যান্ডবক্স নেটওয়ার্ক গেটওয়ে ম্যানুয়ালি কনফিগার করবেন, স্যান্ডবক্স ক্লেইম টেমপ্লেট রেজিস্টার করবেন এবং স্যান্ডবক্স ওয়ার্মপুল ডেপ্লয় করবেন।

উৎস পরিবেশ ভেরিয়েবল

যেসব টেমপ্লেটের জন্য এনভায়রনমেন্ট ভেরিয়েবল প্রয়োজন, সেগুলো প্রয়োগ করার আগে 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 প্রজেক্ট আইডি), পোর্ট এবং রিসোর্স সীমা (CPU/মেমরি টার্গেট) নির্দিষ্ট করে। এটি gVisor (gvisor রানটাইম) ব্যবহার করে এই কন্টেইনার ইনস্ট্যান্সগুলো চালানোর জন্য GKE কনফিগার করে, যা নিশ্চিত করে যে অবিশ্বস্ত অংশগ্রহণকারী কোড কার্নেল ভার্চুয়ালাইজেশন আইসোলেশনের একটি অতিরিক্ত স্তরের অধীনে চলে।

স্যান্ডবক্স ওয়ার্মপুল প্রয়োগ করুন

চলমান স্যান্ডবক্সগুলোকে আগে থেকে চালু করার জন্য স্যান্ডবক্স ওয়ার্মপুল প্রয়োগ করুন:

kubectl apply -f k8s/sandbox-warmpool.yaml

ওয়ার্ম পুল স্ট্যান্ডবাই ইনস্ট্যান্সগুলো সফলভাবে চালু হয়েছে কিনা তা যাচাই করুন:

kubectl get pods -n hackathon-judge -l app=sandbox

আমরা কেন স্যান্ডবক্স ওয়ার্মপুল ব্যবহার করি: চাহিদা অনুযায়ী প্রোভিশনিং, শিডিউলিং, ইমেজ পুল করা এবং নতুন কন্টেইনার পড বুট করার ফলে স্টার্টআপে যথেষ্ট ওভারহেড তৈরি হয় (কোল্ড স্টার্ট টাইম ৩০+ সেকেন্ড)। স্যান্ডবক্স ওয়ার্মপুল সক্রিয়, আগে থেকে ওয়ার্ম করা স্যান্ডবক্স পডের একটি স্ট্যান্ডবাই পুল বজায় রাখে (ডিফল্টরূপে ৫টি রেপ্লিকা)। যখন ওয়ার্কার এজেন্ট একটি ইভ্যালুয়েশন এনভায়রনমেন্টের জন্য অনুরোধ করে, তখন স্যান্ডবক্স রাউটার তাৎক্ষণিকভাবে একটি চলমান আগে থেকে ওয়ার্ম করা পড বরাদ্দ করে, যার ফলে স্টার্ট-আপের বিলম্ব এক সেকেন্ডেরও কম সময়ে নেমে আসে।

৭. অ্যাপ্লিকেশন উপাদানসমূহ স্থাপন করুন

সুরক্ষিত স্যান্ডবক্সিং পরিকাঠামো সম্পূর্ণরূপে সক্রিয় হয়ে গেলে, আপনি এখন কেন্দ্রীয় ব্যাকএন্ড এপিআই, ওয়ার্কার এজেন্ট, রিয়্যাক্ট ওয়েব ইন্টারফেস এবং ইনগ্রেস গেটওয়ে ম্যাপিং স্থাপন করবেন।

ব্যাকএন্ড স্থাপন করুন

অর্কেস্ট্রেটর 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 -

বাহ্যিক গেটওয়ে এবং রাউটিং কনফিগার করুন

বাহ্যিক ক্লায়েন্ট ট্র্যাফিক ম্যাপ করে প্রধান গেটওয়ে এবং ইনগ্রেস HTTP রুটগুলি স্থাপন করুন:

kubectl apply -f k8s/gateway.yaml

আমরা কেন এক্সটার্নাল ইনগ্রেস গেটওয়ে স্থাপন করি: এক্সটার্নাল গেটওয়েটি কুবারনেটিস গেটওয়ে এপিআই (Kubernetes Gateway API) ব্যবহার করে আমাদের সার্ভিসগুলোকে উন্মুক্ত করে। এটি একটি লোড-ব্যালেন্সড পাবলিক আইপি অ্যাড্রেস সরবরাহ করে এবং পাথ রুলের উপর ভিত্তি করে রুট ম্যাপ করে—যা /api/* এর অধীনে থাকা এপিআই রিকোয়েস্টগুলোকে গো ব্যাকএন্ডে (Go Backend) পাঠায় এবং অন্য সব ক্লায়েন্ট ওয়েব ট্র্যাফিক ( / ) রিয়্যাক্ট ফ্রন্টএন্ডে (React Frontend) ম্যাপ করে, যার ফলে পাবলিক ক্লাস্টার অ্যাক্সেস সুরক্ষিত হয়।

রোলআউটগুলি যাচাই করুন

শেল এক্সিকিউশন ব্লক করুন এবং তিনটি কোর সার্ভিস ডেপ্লয়মেন্টই একটি হেলদি ও রেডি রোলআউট স্ট্যাটাসে না পৌঁছানো পর্যন্ত অপেক্ষা করুন:

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

৮. অ্যাপ্লিকেশনটি যাচাই করুন এবং ব্যবহার করুন

UI অ্যাক্সেস করুন

নতুনভাবে সরবরাহ করা প্রধান লোড ব্যালেন্সার গেটওয়ের বাহ্যিক পাবলিক আইপি ঠিকানাটি সংগ্রহ করুন:

রিয়েল টাইমে প্রোভিশনিং স্ট্যাটাস দেখতে, ওয়াচ ফ্ল্যাগ ( -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 চাপুন।

আমরা কেন গেটওয়ে স্ট্যাটাস দেখি: গেটওয়ে এপিআই পাবলিক ইনগ্রেস পরিচালনা করে। গেটওয়ে স্ট্যাটাস চেক করলে গুগল ক্লাউডের এক্সটার্নাল গ্লোবাল লোড ব্যালেন্সার দ্বারা আমাদের ক্লাস্টারে বরাদ্দ করা পাবলিক, লোড-ব্যালেন্সড এক্সটার্নাল আইপি অ্যাড্রেসটি ফেরত আসে, যা আমাদের প্ল্যাটফর্মের পাবলিক অ্যাড্রেসকে প্রতিনিধিত্ব করে।

হ্যাকাথন জাজ ড্যাশবোর্ড লোড করতে আপনার ব্রাউজারে বরাদ্দকৃত পাবলিক আইপি অ্যাড্রেসটি খুলুন।

কাজ জমা দিন

  • ফ্রন্টএন্ড UI ব্যবহার করে ড্যাশবোর্ডে যান এবং হ্যাকাথনটি নির্বাচন করুন।

ড্যাশবোর্ড

  • যেকোনো প্রজেক্টে আপনি Run Agent -এ ক্লিক করে এজেন্টকে চালু করতে পারেন, যা রুব্রিকের ভিত্তিতে পুরো প্রজেক্টটি বিচার করবে।

প্রকল্প

স্যান্ডবক্স কিকঅফ দেখুন

বিচারকার্য সম্পাদনের জন্য একটি স্যান্ডবক্স পড গতিশীলভাবে দাবি ও প্রস্তুত হতে দেখতে hackathon-judge নেমস্পেসের ভেতরের সক্রিয় পডগুলো পর্যবেক্ষণ করুন:

kubectl get pods -n hackathon-judge -w

ধাপে ধাপে ADK বিচার মূল্যায়ন যুক্তি প্রত্যক্ষ করতে ওয়ার্কার এজেন্ট পডের লগগুলি পরীক্ষা করুন:

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

কেন আমরা এজেন্ট লগ পরীক্ষা করি: ওয়ার্কার এজেন্ট লগ পরীক্ষা করলে ইভ্যালুয়েশন পাইপলাইনের বিস্তারিত অভ্যন্তরীণ ধাপগুলো রিয়েল-টাইমে দেখা যায়। এর মাধ্যমে আপনি ADK এজেন্টের টাস্ক ফেচ করা, স্যান্ডবক্স কন্টেইনারের জন্য অনুরোধ করা, কম্পাইলেশন টার্গেট এক্সিকিউট করা, Gemini দিয়ে রিপোর্ট বিশ্লেষণ করা এবং স্কোরকার্ড পাবলিশ করার প্রক্রিয়া ট্রেস করতে পারেন।

৯. (ঐচ্ছিক) এটি কীভাবে কাজ করে

এজেন্ট স্যান্ডবক্স আর্কিটেকচার

যদিও BigQuery-এর AI ফাংশনগুলো টেক্সট-ভিত্তিক সাবমিশন এবং README-এর দাবিগুলো মূল্যায়নের জন্য অসাধারণ, একটি ইঞ্জিনিয়ারিং প্রজেক্ট বিচার করার জন্য কোড কম্পাইল করা, থার্ড-পার্টি লাইব্রেরি ইনস্টল করা এবং আসল টেস্ট স্যুট চালানো প্রয়োজন হয়।

সরাসরি ইউজার কোড চালানো ব্যাপক নিরাপত্তা ঝুঁকি তৈরি করে, যার মধ্যে রয়েছে হোস্টের নিরাপত্তা লঙ্ঘন, কন্টেইনার হ্যাকিং এবং অননুমোদিত রিসোর্স অ্যাক্সেস। GKE এজেন্ট স্যান্ডবক্স ফ্রেমওয়ার্ক gVisor (runsc) ভার্চুয়ালাইজেশন ব্যবহার করে বিচ্ছিন্ন স্যান্ডবক্স ওয়ার্কলোডগুলোকে অর্কেস্ট্রেট করার মাধ্যমে এই ঝুঁকিগুলো প্রশমিত করে।

সিস্টেম ইন্টারঅ্যাকশন প্রবাহ

নিচের ডায়াগ্রামটি একটি সুরক্ষিত স্যান্ডবক্সড বিচার কার্যক্রম চলাকালীন আমাদের ইভেন্ট-ড্রাইভেন সিস্টেমের বিভিন্ন উপাদান কীভাবে যোগাযোগ করে তা তুলে ধরেছে:

এনগেজড টুল এবং কম্পোনেন্টগুলো কীভাবে একসাথে কাজ করে

  • রিঅ্যাক্ট ফ্রন্টএন্ড ইউআই : একটি ইন্টারেক্টিভ ইন্টারফেস প্রদান করে যেখানে ব্যবহারকারীরা ক্রাইটেরিয়া মডেল কনফিগার করতে, টিম রেজিস্টার করতে, প্রজেক্ট ইউআরএল জমা দিতে এবং চূড়ান্ত গ্রেডিং স্কোরকার্ড পর্যালোচনা করতে পারেন, যার মধ্যে ফাইলের সম্পূর্ণ অমিল এবং ইঞ্জিনিয়ারিং মন্তব্যও অন্তর্ভুক্ত থাকে।
  • Go REST ব্যাকএন্ড এপিআই : গ্লোবাল এপিআই এন্ডপয়েন্টগুলো পরিচালনা করে। এটি BigQuery-তে প্রোজেক্ট কনফিগারেশন সংরক্ষণ করে এবং ভারী কম্পিউটেশনাল এক্সিকিউশন পাইপলাইনগুলোকে বিচ্ছিন্ন করার জন্য বিচার করার কাজগুলো Pub/Sub-এ পাঠায়।
  • গুগল পাব/সাব : এটি একটি মেসেজ-ভিত্তিক ব্রোকার যা টাস্ক মেসেজগুলোকে নিরাপদে কিউ-তে ধরে রাখে এবং এপিআই ও সক্রিয় ওয়ার্কার ইনস্ট্যান্সগুলোর মধ্যে অ্যাসিঙ্ক্রোনাসভাবে যোগাযোগ পরিচালনা করে।
  • পাইথন এডিকে ওয়ার্কার (সুপারভাইজার এজেন্ট) : এটি একটি ব্যাকগ্রাউন্ড ওয়ার্কার যা পাব/সাব (Pub/Sub) থেকে টাস্ক গ্রহণ করে। এটি একটি উচ্চ-স্তরের সুপারভাইজার এজেন্ট চালু করার জন্য গুগল এজেন্ট ডেভেলপমেন্ট কিট (ADK) ব্যবহার করে, যাকে ইভ্যালুয়েশন পরিচালনা করার নির্দেশ দেওয়া হয়। সুপারভাইজারটি গভীর র কমান্ড টেস্টিংয়ের দায়িত্ব অর্পণ করার জন্য তার প্রধান টুল, evaluate_repository আহ্বান করে।
  • স্যান্ডবক্স রাউটার ও গেটওয়ে (জিকেই কন্ট্রোল প্লেন) : একটি অভ্যন্তরীণ নিয়ন্ত্রণ গেটওয়ে যা স্ট্যান্ডার্ড স্যান্ডবক্স কাস্টম রিসোর্স ডেফিনিশন ( SandboxClaims , SandboxTemplates ) রেজিস্টার করে। এটি পড বরাদ্দ ও সুরক্ষিত করার জন্য জিকেই নেটওয়ার্কগুলোর মধ্যে সমন্বয় সাধন করে এবং ওয়ার্কার ক্লায়েন্টদের কাছে কানেকশন স্ট্রিম ফেরত পাঠায়।
  • স্যান্ডবক্স ওয়ার্মপুল : GKE কন্টেইনার চালু হতে দীর্ঘ সময় (৩০+ সেকেন্ডের "কোল্ড স্টার্ট") এড়ানোর জন্য, ওয়ার্মপুল সক্রিয় স্ট্যান্ডবাই পড বজায় রাখে। যখন একটি স্যান্ডবক্স দাবি করা হয়, রাউটার সঙ্গে সঙ্গে এক সেকেন্ডেরও কম সময়ে সেটিকে ম্যাপ করে এবং রিলিজ হওয়ার পর রিসাইক্লিংয়ের সময়সূচী নির্ধারণ করে।
  • gVisor (runsc) আইসোলেশন : একটি ইউজার-স্পেস ভার্চুয়াল কার্নেল যা একটি নিরাপদ স্যান্ডবক্সিং সীমানা হিসেবে কাজ করে। এটি কন্টেইনার স্পেস থেকে GKE নোড কার্নেলে করা সিস্টেম কলগুলোকে বাধা দেয়, যার ফলে বিপজ্জনক র কমান্ডগুলো (যেমন সিস্টেম স্ক্রিপ্ট বা প্যাকেজ সেটআপ) সম্পূর্ণ ভার্চুয়ালাইজেশন আইসোলেশনের অধীনে চলে।
  • FastAPI স্যান্ডবক্স রানটাইম : একটি হালকা পাইথন এপিআই সার্ভার যা স্যান্ডবক্স কন্টেইনারের ভিতরে চলে। এটি সুরক্ষিত এন্ডপয়েন্ট ( /execute , /upload , /download ) প্রদান করে, যা বাহ্যিক ওয়ার্কার টুলগুলিকে ফাইল ম্যানিপুলেট করতে এবং শেল টাস্ক চালু করতে সক্ষম করে।
  • জেমিনি সিএলআই ( @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 মডেলগুলোকে কল করুন।
  • স্ট্যান্ডার্ড ডেভেলপার এনভায়রনমেন্ট : স্যান্ডবক্স কন্টেইনার ইমেজে node, npm, yarn, pnpm, python, pip, uv, go, gh, git, tree, ripgrep, এবং playwright বান্ডল করে, যা স্বায়ত্তশাসিত সাব-এজেন্টকে একটি সম্পূর্ণ টেস্ট ওয়ার্কস্পেস প্রদান করে।

১০. পরিষ্কার করা

আপনার গুগল ক্লাউড অ্যাকাউন্টে চলমান চার্জ এড়াতে, এই কোডল্যাব চলাকালীন তৈরি করা রিসোর্সগুলো মুছে ফেলুন।

./destroy.sh

কেন আমরা রিসোর্স পরিষ্কার করি: গুগল ক্লাউড একটি রিসোর্স ব্যবহার মডেলের উপর ভিত্তি করে বিল করে। GKE অটোপাইলট ক্লাস্টার, নেটওয়ার্ক লোড ব্যালেন্সার এবং পারসিস্টেন্ট ডিস্কের মতো সক্রিয় রিসোর্সগুলো নিষ্ক্রিয় থাকলেও সেগুলোর জন্য ক্রমাগত চার্জ প্রযোজ্য হয়। এই ধাপটি চালালে ক্লাস্টার নেমস্পেসটি মুছে গিয়ে কুবারনেটিস অবজেক্টগুলো পরিষ্কার হয়ে যায় এবং GKE অটোপাইলট ক্লাস্টার হোস্টটি নিজেই মুছে গিয়ে এর সাথে সম্পর্কিত সমস্ত বিলিং চার্জ তাৎক্ষণিকভাবে বন্ধ হয়ে যায়।

১১. অভিনন্দন

অভিনন্দন! আপনি সফলভাবে GKE-তে এজেন্ট স্যান্ডবক্স সহ হ্যাকাথন জাজ অ্যাপ্লিকেশনটি স্থাপন করেছেন!

আপনি একটি সুরক্ষিত, আধুনিক ইভেন্ট-ড্রাইভেন এআই প্ল্যাটফর্ম বাস্তবায়ন করেছেন যা বিচ্ছিন্ন কন্টেইনারাইজড নিরাপত্তা ব্যবস্থার অধীনে অবিশ্বস্ত কোডবেস সাবমিশন পরীক্ষা ও মূল্যায়ন করতে সক্ষম।

আপনি যা শিখেছেন

  • GKE পরিকাঠামো : কীভাবে GKE Autopilot এবং Pub/Sub ও BigQuery-এর মতো সহায়ক Google Cloud পরিষেবাগুলি প্রোভিশন করবেন।
  • এজেন্ট স্যান্ডবক্স কনফিগারেশন : কাস্টম রিসোর্স ডেফিনিশন, স্যান্ডবক্স টেমপ্লেট, স্যান্ডবক্স ক্লেইম এবং উচ্চ-পারফরম্যান্স স্যান্ডবক্স ওয়ার্মপুল কীভাবে কনফিগার করবেন।
  • মাইক্রোসার্ভিসেস ডেপ্লয়মেন্ট : কীভাবে ওয়ার্কলোড আইডেন্টিটি বাইন্ডিং কনফিগার করবেন এবং একটি মাল্টি-কম্পোনেন্ট মাইক্রোসার্ভিসেস আর্কিটেকচার (ফ্রন্টএন্ড রিয়্যাক্ট, রেস্ট গো, ওয়ার্কার এডিকে এজেন্ট, এবং আইসোলেটেড স্যান্ডবক্স) ডেপ্লয় করবেন।
  • নিরাপদ স্যান্ডবক্সিং : GKE নোডগুলিতে অবিশ্বস্ত তৃতীয় পক্ষের কমান্ড নিরাপদে চালানোর জন্য কীভাবে gVisor ভার্চুয়ালাইজড কন্টেইনার ব্যবহার করবেন

পরবর্তী পদক্ষেপ

রেফারেন্স নথি