GKE-তে সুরক্ষিত AI এজেন্ট মোতায়েন করা

১. ভূমিকা

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

অবিশ্বস্ত কোডের প্রযুক্তিগত চ্যালেঞ্জ

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

মূল ধারণা

  • এজেন্ট ডেভেলপমেন্ট কিট (ADK): ADK হলো এমন একটি ফ্রেমওয়ার্ক যা দিয়ে এমন অ্যাপ্লিকেশন তৈরি করা হয় যা বিভিন্ন কাজ সম্পর্কে যুক্তি দিয়ে সিদ্ধান্ত নিতে পারে। এটি একটি "যুক্তি-প্রক্রিয়া" পরিচালনা করে, যেখানে AI একটি নির্দেশ গ্রহণ করে, একাধিক কাজের পরিকল্পনা করে, নির্দিষ্ট টুলকে কল করে এবং তারপর চূড়ান্ত আউটপুটের সারসংক্ষেপ তৈরি করে। এই কার্যপ্রবাহে, ADK অর্কেস্ট্রেটর হিসেবে কাজ করে, যা শনাক্ত করে কখন ব্যবহারকারীর অনুরোধে কোড কার্যকর করার প্রয়োজন হয়।
  • GKE এজেন্ট স্যান্ডবক্স: এই নিরাপত্তা বৈশিষ্ট্যটি gVisor ব্যবহার করে, যা একটি ওপেন-সোর্স কন্টেইনার রানটাইম এবং প্রতিটি কন্টেইনারের জন্য একটি বিশেষায়িত গেস্ট কার্নেল সরবরাহ করে। অ্যাপ্লিকেশন এবং হোস্ট কার্নেলের মধ্যেকার সিস্টেম কল (syscalls) ইন্টারসেপ্ট করার মাধ্যমে, GKE এজেন্ট স্যান্ডবক্স অবিশ্বস্ত কোডকে সরাসরি নোডের সাথে যোগাযোগ করা থেকে বিরত রাখে। এটি নিশ্চিত করে যে কন্টেইনারের ভেতরের কোনো নিরাপত্তা লঙ্ঘন ক্লাস্টারের বাকি অংশে ছড়িয়ে পড়তে পারবে না।
  • মডেল কনটেক্সট প্রোটোকল (MCP) ও টুলস: এই প্রোটোকলটি এআই মডেলদের বাহ্যিক টুলের সাথে যোগাযোগ করার জন্য একটি আদর্শ পদ্ধতি স্থাপন করে। এই ল্যাবে, এজেন্টটিকে একটি "কোড এক্সিকিউশন" টুল দিয়ে কনফিগার করা হয়েছে, যা পাইথন স্ক্রিপ্ট চালানোর জন্য একটি বিশেষায়িত স্যান্ডবক্স কন্ট্রোলারের সাথে যোগাযোগ করে।

ল্যাবের উদ্দেশ্য

এই সেশন শেষে আপনি সক্ষম হবেন:

  1. একটি এজেন্ট তৈরি করুন: ডেটা বিশ্লেষণের কাজের জন্য ডিজাইন করা একটি ADK-ভিত্তিক এজেন্ট কনফিগার করুন।
  2. কার্নেল আইসোলেশন কনফিগার করুন: বিশেষায়িত রানটাইম ক্লাস ব্যবহার করে GKE এজেন্ট স্যান্ডবক্স সেট আপ করুন।
  3. পারফরম্যান্স অপ্টিমাইজ করুন: নতুন এক্সিকিউশন এনভায়রনমেন্ট চালু করার জন্য ব্যয়িত সময় কমাতে স্যান্ডবক্সের একটি 'ওয়ার্ম পুল' বাস্তবায়ন করুন।
  4. নিরাপত্তা সীমানা জোরদার করুন: এক্সিকিউশন এনভায়রনমেন্ট থেকে অননুমোদিত প্রস্থান রোধ করতে নেটওয়ার্ক পলিসি প্রয়োগ করুন।

২. প্রকল্প স্থাপন

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

ওপেন ক্লাউড শেল

এই ল্যাবের জন্য আমরা ক্লাউড শেল ব্যবহার করব, যা গুগল ক্লাউড কর্তৃক প্রদত্ত একটি ব্রাউজার-ভিত্তিক টার্মিনাল পরিবেশ। ক্লাউড শেলে আপনার অ্যাপ্লিকেশন বিল্ড এবং ডেপ্লয় করার জন্য প্রয়োজনীয় গুগল ক্লাউড সিএলআই ( gcloud ) , kubectl এবং ডকার এনভায়রনমেন্ট আগে থেকেই কনফিগার করা থাকে।

  1. গুগল ক্লাউড কনসোলে যান।
  2. উপরের ডানদিকের হেডারে থাকা Activate Cloud Shell বাটনটিতে ( >_ আইকন) ক্লিক করুন।
  3. আপনার ব্রাউজারের নিচে টার্মিনালটি খুলে গেলে, অনুরোধ করা হলে ' চালিয়ে যান'- এ ক্লিক করুন।

একটি প্রকল্প নির্বাচন করুন

ভুল পরিবেশে রিসোর্স স্থাপন এড়ানোর জন্য আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার শেলটি সঠিক গুগল ক্লাউড প্রজেক্টের দিকে নির্দেশিত আছে।

👉💻 কনসোল ড্যাশবোর্ড থেকে আপনার প্রজেক্ট আইডি শনাক্ত করুন এবং আপনার বর্তমান শেলে প্রজেক্টটি সেট করতে নিম্নলিখিত কমান্ডটি চালান:

gcloud config set project [YOUR_PROJECT_ID]

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

এজেন্ট তৈরি ও স্থাপন করার জন্য কন্টেইনার বিল্ড, ইমেজ হোস্টিং এবং জেনারেটিভ মডেল অ্যাক্সেসের জন্য বেশ কিছু বিশেষায়িত এপিআই প্রয়োজন হয়।

👉💻 এই সার্ভিসগুলো চালু করতে নিচের কমান্ডটি চালান:

gcloud services enable \
    cloudbuild.googleapis.com \
    artifactregistry.googleapis.com \
    container.googleapis.com \
    aiplatform.googleapis.com
  • cloudbuild.googleapis.com: আপনার সোর্স কোড থেকে কন্টেইনার ইমেজ তৈরির প্রক্রিয়াকে স্বয়ংক্রিয় করে।
  • artifactregistry.googleapis.com: আপনার এজেন্ট ইমেজগুলোর জন্য একটি সুরক্ষিত ও ব্যক্তিগত রেজিস্ট্রি প্রদান করে।
  • container.googleapis.com: GKE ক্লাস্টারের জীবনচক্র এবং এর নিরাপত্তা বৈশিষ্ট্যগুলো পরিচালনা করে।
  • aiplatform.googleapis.com: রিজনিং এবং কোড জেনারেশনের জন্য জেমিনি মডেলসহ ভার্টেক্স এআই পরিষেবাগুলিতে অ্যাক্সেস প্রদান করে।

ক্লাস্টার তৈরি

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

👉💻 GKE ক্লাস্টার তৈরি করতে নিচের কমান্ডগুলো চালান:

export PROJECT_ID=$(gcloud config get-value project)

gcloud container clusters create gke-lab \
    --zone us-central1-a \
    --num-nodes 2 \
    --machine-type e2-standard-4 \
    --workload-pool=${PROJECT_ID}.svc.id.goog

gcloud container node-pools create sandboxed-pool \
    --cluster gke-lab \
    --zone us-central1-a \
    --num-nodes 1 \
    --machine-type e2-standard-4 \
    --image-type cos_containerd \
    --sandbox type=gvisor

দ্রষ্টব্য: একটি নতুন ক্লাস্টার প্রস্তুত করতে সাধারণত ৮-১০ মিনিট সময় লাগে। আপনি একটি নতুন ট্যাবে অথবা কমান্ডটি প্রক্রিয়া চলাকালীন এপিআই (API) সক্রিয় করার কাজটি করতে পারেন।

kubectl অ্যাক্সেস কনফিগার করুন

আপনার ক্লাস্টারটি প্রোভিশন করা হয়ে গেলে, সেটির সাথে যোগাযোগের জন্য আপনাকে kubectl কনফিগার করতে হবে।

👉💻 নিম্নলিখিত কমান্ডটি ক্লাস্টার ক্রেডেনশিয়াল পুনরুদ্ধার করে এবং আপনার স্থানীয় kubeconfig ফাইল আপডেট করে, যার ফলে আপনি ক্লাউড শেল থেকে আপনার নতুন GKE ক্লাস্টারে কমান্ড চালাতে পারবেন:

gcloud container clusters get-credentials gke-lab --zone us-central1-a

এর ফলে, kubectl কমান্ডগুলো এখন থেকে ডিফল্টরূপে gke-lab ক্লাস্টারকে টার্গেট করবে।

GKE-কে Vertex AI-তে অ্যাক্সেসের অনুমতি দিন

মডেল ইনফারেন্সের জন্য GKE- তে চলমান এজেন্টকে Vertex AI পরিষেবাগুলো অ্যাক্সেস করার অনুমতি দিতে, আপনাকে Workload Identity কনফিগার করতে হবে। এর মাধ্যমে আপনি একটি Kubernetes সার্ভিস অ্যাকাউন্টকে একটি Google Cloud IAM রোলের সাথে যুক্ত করতে পারবেন, যা সার্ভিস অ্যাকাউন্ট কী পরিচালনা করার প্রয়োজন ছাড়াই সেই সার্ভিস অ্যাকাউন্টে চলমান পডগুলোকে প্রয়োজনীয় অনুমতি প্রদান করে।

👉💻 প্রথমে, এজেন্ট পডগুলো যে Kubernetes সার্ভিস অ্যাকাউন্টটি ব্যবহার করবে, সেটি তৈরি করুন:

kubectl create serviceaccount adk-agent-sa

এরপরে, একটি IAM পলিসি বাইন্ডিং যোগ করে এই সার্ভিস অ্যাকাউন্টটিকে Vertex AI User রোলটি প্রদান করুন।

👉💻 এই কমান্ডটি default নেমস্পেসের adk-agent-sa কুবারনেটিস সার্ভিস অ্যাকাউন্টকে আপনার প্রোজেক্টের ওয়ার্কলোড আইডেন্টিটি পুলের জন্য roles/aiplatform.user IAM রোলের সাথে যুক্ত করে।

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")

gcloud projects add-iam-policy-binding projects/${PROJECT_ID} \
    --role=roles/aiplatform.user \
    --member=principal://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${PROJECT_ID}.svc.id.goog/subject/ns/default/sa/adk-agent-sa \
    --condition=None

৩. ADK এজেন্ট তৈরি করা

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

এজেন্ট ডিরেক্টরি তৈরি করুন

👉💻 ল্যাবের জন্য একটি ডিরেক্টরি এবং এজেন্ট সোর্স কোডের জন্য একটি সাবডিরেক্টরি তৈরি করুন:

mkdir -p ~/gke-sandbox-lab/root_agent
cd ~/gke-sandbox-lab

ADK এজেন্ট সংজ্ঞায়িত করুন

প্রথমে আমরা এজেন্টের মূল লজিকটি সংজ্ঞায়িত করি। আমাদের এজেন্ট ADK ফ্রেমওয়ার্ক ব্যবহার করে SpreadsheetAnalyst নামের একটি এজেন্ট তৈরি করে, যা gemini-2.5-flash মডেলটি ব্যবহার করে। এতে একটি টুল ( run_spreadsheet_analysis ) অন্তর্ভুক্ত রয়েছে, যা নিরাপদে পাইথন কোড এক্সিকিউট করার জন্য GKE এজেন্ট স্যান্ডবক্সকে কল করে। স্প্রেডশিট বিশ্লেষণ করতে বলা হলে, এজেন্টের নির্দেশাবলী তাকে পান্ডাস-ভিত্তিক কোড লিখতে ও এক্সিকিউট করতে পথ দেখায়।

👉💻 নিচের কমান্ডটি চালিয়ে root_agent/agent.py নামের একটি ফাইল তৈরি করুন এবং ফাইলটিতে নিম্নলিখিত বিষয়বস্তু যুক্ত করুন:

cat <<'EOF' > ~/gke-sandbox-lab/root_agent/agent.py
import pandas as pd
from google.adk.agents import Agent
from k8s_agent_sandbox import SandboxClient

# Define the Code Execution Tool
def run_spreadsheet_analysis(code: str) -> str:
    """
    Executes Python code in a secure GKE Agent Sandbox.
    Use this tool to run pandas-based analysis on spreadsheet data.
    Input should be a complete Python script.
    """
    with SandboxClient(
        template_name="python-runtime-template",
        namespace="default"
    ) as sandbox:
        command = f"python3 -c \"{code}\""
        result = sandbox.run(command)
        
        if result.stderr:
            return f"Error: {result.stderr}"
        return result.stdout

# Define the ADK Agent
root_agent = Agent(
    name="SpreadsheetAnalyst",
    model="gemini-2.5-flash",
    instruction="""
    You are an expert data analyst. When a user asks to analyze a spreadsheet:
    1. Reason about what Python code (using pandas) is needed.
    2. Write the code, ensuring it handles data loading and analysis.
    3. Do not ever use double-quotes for string, always use single-quotes.
    4. Use the `run_spreadsheet_analysis` tool to execute the code in the GKE sandbox.
    5. Provide a clear summary of the analysis based on the tool's output.
    
    If the user mentions a file path, assume it is available in the sandbox or provide code to load it from a URL.
    """,
    tools=[run_spreadsheet_analysis]
)
EOF

ADK যাতে agent.py থেকে এজেন্টের সংজ্ঞা খুঁজে বের করে লোড করতে পারে এবং আমাদের এজেন্ট সম্পর্কে জানতে পারে, সেজন্য আমরা নিশ্চিত করি root_agent একটি পাইথন প্যাকেজ হিসেবে বিবেচিত হয়।

👉💻 নিচের কমান্ডটি চালিয়ে root_agent/__init__.py নামের একটি খালি ফাইল তৈরি করুন এবং ফাইলটিতে নিম্নলিখিত বিষয়বস্তু যুক্ত করুন:

cat <<'EOF' > ~/gke-sandbox-lab/root_agent/__init__.py
from . import agent
EOF

এরপর আমরা ADK এজেন্টের জন্য এনভায়রনমেন্ট ভেরিয়েবল কনফিগার করতে একটি ফাইল তৈরি করি। GOOGLE_GENAI_USE_VERTEXAI=TRUE ভেরিয়েবলটি ADK-কে জেমিনি মডেল অ্যাক্সেস করার জন্য ভার্টেক্স এআই ব্যবহার করতে নির্দেশ দেয়, এবং GOOGLE_CLOUD_PROJECTGOOGLE_CLOUD_LOCATION ভেরিয়েবলগুলো ভার্টেক্স এআই এপিআই কলের জন্য ব্যবহৃত গুগল ক্লাউড প্রজেক্ট ও অঞ্চল নির্দিষ্ট করে দেয়।

👉💻 নিচের কমান্ডটি চালিয়ে root_agent/.env নামের একটি ফাইল তৈরি করুন এবং ফাইলটিতে নিম্নলিখিত বিষয়বস্তু যুক্ত করুন:

cat <<EOF > ~/gke-sandbox-lab/root_agent/.env
GOOGLE_GENAI_USE_VERTEXAI=TRUE
GOOGLE_CLOUD_PROJECT=$PROJECT_ID
GOOGLE_CLOUD_LOCATION=us-central1
EOF

এজেন্টকে কন্টেইনারাইজ করুন

অবশেষে আমরা এজেন্টের জন্য কন্টেইনার ইমেজটি সংজ্ঞায়িত করি। এটি একটি পাইথন বেস ইমেজ থেকে শুরু হয়, kubectl (ক্লাস্টারের সাথে যোগাযোগের জন্য এজেন্ট স্যান্ডবক্স ক্লায়েন্টের যা প্রয়োজন) ইনস্টল করে এবং এর গিট রিপোজিটরি থেকে প্রয়োজনীয় পাইথন লাইব্রেরিগুলো— google-adk , pandasagentic-sandbox-client ইনস্টল করে। সবশেষে, এটি এজেন্টের সোর্স কোডটি ইমেজে কপি করে এবং ADK ওয়েব সার্ভার চালানোর জন্য এন্ট্রিপয়েন্ট সেট করে, যা এজেন্টের UI এবং API উন্মুক্ত করে।

👉💻 নিচের কন্টেন্ট সহ Dockerfile নামের একটি ফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

cat <<'EOF' > ~/gke-sandbox-lab/Dockerfile
FROM python:3.14-slim

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app

RUN apt-get update && apt-get install -y \
    git \
    curl \
    && curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \
    && install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl \
    && rm kubectl \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir google-adk pandas "git+https://github.com/kubernetes-sigs/agent-sandbox.git@main#subdirectory=clients/python/agentic-sandbox-client"

COPY ./root_agent /app/root_agent

WORKDIR /app

EXPOSE 8080

ENTRYPOINT ["adk", "web", "--host", "0.0.0.0", "--port", "8080"]
EOF

এজেন্টের ভাবমূর্তি তৈরি করুন

এজেন্টটিকে অবশ্যই একটি কন্টেইনার ইমেজ হিসেবে প্যাকেজ করতে হবে। আমরা এজেন্টটিকে প্যাকেজ করতে এবং আর্টিফ্যাক্ট রেজিস্ট্রি- তে সংরক্ষণ করতে ক্লাউড বিল্ড ব্যবহার করব।

👉💻 রিপোজিটরি তৈরি করতে নিচের কমান্ডটি চালান:

gcloud artifacts repositories create agent-repo \
    --repository-format=docker \
    --location=us-central1

👉💻 ইমেজটি বিল্ড করতে নিচের কমান্ডটি চালান:

gcloud builds submit --tag us-central1-docker.pkg.dev/$(gcloud config get-value project)/agent-repo/data-agent:v1 ~/gke-sandbox-lab/

৪. স্যান্ডবক্স পরিকাঠামো বাস্তবায়ন

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

এজেন্ট স্যান্ডবক্স কন্ট্রোলার স্থাপন করুন

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

👉💻 আপনার GKE ক্লাস্টারে এজেন্ট স্যান্ডবক্স কন্ট্রোলারটি স্থাপন করতে নিম্নলিখিত কমান্ডগুলি চালান:

kubectl apply \
-f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v0.1.0/manifest.yaml \
-f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/v0.1.0/extensions.yaml

স্যান্ডবক্স টেমপ্লেট এবং স্যান্ডবক্স ওয়ার্ম পুল তৈরি করুন

এখন আপনি একটি স্যান্ডবক্স টেমপ্লেট (SandboxTemplate) এবং একটি স্যান্ডবক্স ওয়ার্ম পুল (SandboxWarmPool) রিসোর্স তৈরি করার মাধ্যমে আপনার স্যান্ডবক্সের কনফিগারেশন নির্ধারণ করবেন। স্যান্ডবক্স টেমপ্লেটটি একটি পুনঃব্যবহারযোগ্য ব্লুপ্রিন্ট হিসেবে কাজ করে, যা এজেন্ট স্যান্ডবক্স কন্ট্রোলার সামঞ্জস্যপূর্ণ ও পূর্ব-কনফিগার করা স্যান্ডবক্স পরিবেশ তৈরি করতে ব্যবহার করে। স্যান্ডবক্স ওয়ার্ম পুল রিসোর্সটি নিশ্চিত করে যে একটি নির্দিষ্ট সংখ্যক প্রি-ওয়ার্মড পড সর্বদা চালু থাকে এবং ক্লেইম করার জন্য প্রস্তুত থাকে। একটি প্রি-ওয়ার্মড স্যান্ডবক্স হলো এমন একটি চালু পড যা ইতিমধ্যেই ইনিশিয়ালাইজ করা হয়েছে। এই প্রি-ইনিশিয়ালাইজেশন নতুন স্যান্ডবক্সগুলোকে এক সেকেন্ডেরও কম সময়ে তৈরি করতে সক্ষম করে এবং একটি সাধারণ স্যান্ডবক্স চালু করার স্টার্টআপ ল্যাটেন্সি এড়াতে সাহায্য করে।

👉💻 sandbox-template-and-pool.yaml নামের একটি ফাইল তৈরি করতে নিচের কমান্ডটি চালান:

cat <<EOF > ~/gke-sandbox-lab/sandbox-template-and-pool.yaml
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxTemplate
metadata:
  name: python-runtime-template
  namespace: default
spec:
  podTemplate:
    metadata:
      labels:
        sandbox: python-sandbox-example
    spec:
      runtimeClassName: gvisor
      containers:
      - name: python-runtime
        image: registry.k8s.io/agent-sandbox/python-runtime-sandbox:v0.1.0
        ports:
        - containerPort: 8888
        readinessProbe:
          httpGet:
            path: "/"
            port: 8888
          initialDelaySeconds: 0
          periodSeconds: 1
        resources:
          requests:
            cpu: "250m"
            memory: "512Mi"
            ephemeral-storage: "512Mi"
      restartPolicy: "OnFailure"
---
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
  name: python-sandbox-warmpool
  namespace: default
spec:
  replicas: 2
  sandboxTemplateRef:
    name: python-runtime-template
EOF

👉💻 কনফিগারেশনটি প্রয়োগ করুন:

kubectl apply -f ~/gke-sandbox-lab/sandbox-template-and-pool.yaml

স্যান্ডবক্স রাউটার তৈরি করুন

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

👉💻 sandbox-router.yaml নামের একটি ফাইল তৈরি করতে নিচের কমান্ডটি চালান:

cat <<EOF > ~/gke-sandbox-lab/sandbox-router.yaml
apiVersion: v1
kind: Service
metadata:
  name: sandbox-router-svc
  namespace: default
spec:
  type: ClusterIP
  selector:
    app: sandbox-router
  ports:
  - name: http
    protocol: TCP
    port: 8080
    targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sandbox-router-deployment
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: sandbox-router
  template:
    metadata:
      labels:
        app: sandbox-router
    spec:
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app: sandbox-router
      containers:
      - name: router
        image: us-central1-docker.pkg.dev/k8s-staging-images/agent-sandbox/sandbox-router:v20260225-v0.1.1.post3-10-ga5bcb57
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 5
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 10
        resources:
          requests:
            cpu: "250m"
            memory: "512Mi"
          limits:
            cpu: "1000m"
            memory: "1Gi"
      securityContext:
        runAsUser: 1000
        runAsGroup: 1000
EOF

👉💻 কনফিগারেশনটি প্রয়োগ করুন:

kubectl apply -f ~/gke-sandbox-lab/sandbox-router.yaml

নেটওয়ার্ক আইসোলেশন বাস্তবায়ন করুন

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

👉💻 sandbox-policy.yaml নামের একটি ফাইল তৈরি করতে নিচের কমান্ডটি চালান:

cat <<EOF > ~/gke-sandbox-lab/sandbox-policy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-sandbox-egress
spec:
  podSelector:
    matchLabels:
      sandbox: python-sandbox
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 169.254.169.254/32 # Block metadata server
EOF

👉💻 নীতিমালাটি প্রয়োগ করুন:

kubectl apply -f ~/gke-sandbox-lab/sandbox-policy.yaml

৫. স্থাপন এবং যাচাইকরণ

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

এজেন্ট স্থাপন করুন

এখন আপনি ADK এজেন্ট ডেপ্লয় করার জন্য Kubernetes ম্যানিফেস্ট তৈরি করবেন। এই ম্যানিফেস্টে কয়েকটি গুরুত্বপূর্ণ উপাদান রয়েছে: এজেন্টের কন্টেইনার পরিচালনার জন্য একটি Deployment , এজেন্টের UI এবং API এন্ডপয়েন্টকে বাহ্যিক ট্র্যাফিকের জন্য উন্মুক্ত করতে LoadBalancer টাইপের একটি Service , এবং Agent Sandbox কন্ট্রোলারের সাথে যোগাযোগ করার ও স্যান্ডবক্স ইনস্ট্যান্সগুলো পরিচালনা করার জন্য এজেন্টকে অনুমতি দিতে প্রয়োজনীয় Role-Based Access Control (RBAC) রুল ( Role এবং RoleBinding )।

👉💻 deployment.yaml নামের একটি ফাইল তৈরি করতে নিচের কমান্ডটি চালান:

cat <<EOF > ~/gke-sandbox-lab/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: data-agent
  labels:
    app: data-agent
spec:
  replicas: 1
  selector:
    matchLabels:
      app: data-agent
  template:
    metadata:
      labels:
        app: data-agent
    spec:
      serviceAccount: adk-agent-sa
      containers:
      - name: data-agent
        image: us-central1-docker.pkg.dev/$PROJECT_ID/agent-repo/data-agent:v1
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: data-agent-service
spec:
  selector:
    app: data-agent
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: sandbox-creator-role
rules:
# 1. Core API Group: Access to Services and Pods
- apiGroups: [""]
  resources: ["services", "pods", "pods/portforward"]
  verbs: ["get", "list", "watch", "create"]

# 2. Rules for Sandbox Claims
- apiGroups: ["extensions.agents.x-k8s.io"]
  resources: ["sandboxclaims"]
  verbs: ["create", "get", "list", "watch", "delete"]

# 3. Rules for the actual Sandboxes
- apiGroups: ["agents.x-k8s.io"]
  resources: ["sandboxes"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: adk-agent-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: adk-agent-sa
  namespace: default
roleRef:
  kind: Role
  name: sandbox-creator-role
  apiGroup: rbac.authorization.k8s.io
EOF

👉💻 কনফিগারেশনটি প্রয়োগ করুন:

kubectl apply -f ~/gke-sandbox-lab/deployment.yaml

ADK ওয়েব UI খুলুন

স্থাপন সম্পন্ন হলে, আপনি এর অবস্থা যাচাই করতে পারবেন।

👉💻 এজেন্ট পডগুলো চালু আছে কিনা তা নিশ্চিত করুন:

kubectl get pods

👉💻 এক্সটার্নাল আইপি পুনরুদ্ধার করুন এবং এজেন্ট সার্ভিসে বরাদ্দ করা এক্সটার্নাল আইপি অ্যাড্রেসটি খুঁজুন:

kubectl get services

data-agent-service এর সাথে যুক্ত EXTERNAL-IP মানটি খুঁজুন।

http:// এ গিয়ে ADK ওয়েব UI খুলুন http:// আপনার ওয়েব ব্রাউজারে, প্রতিস্থাপন করে পূর্ববর্তী ধাপে প্রাপ্ত ঠিকানাটি দিয়ে।

বৈধ কাজ যাচাই করুন

এজেন্ট, কন্ট্রোলার এবং স্যান্ডবক্সের মধ্যে যোগাযোগ ঠিকমতো কাজ করছে কিনা তা নিশ্চিত করতে একটি সাধারণ ডেটা অনুরোধের মাধ্যমে এজেন্টটিকে পরীক্ষা করুন।

  • 👉💬 প্রম্পট:
Here is some inventory data in CSV format. Can you calculate the total value of all items in inventory?
product,quantity,msrp
Laptop,10,1200
Keyboard,50,75
Mouse,75,25
Monitor,20,300
Webcam,40,50
  • পর্যবেক্ষণ: এজেন্ট CSV ডেটা পার্স করার জন্য পাইথন কোড তৈরি করে, প্রতিটি পণ্যের পরিমাণকে MSRP দিয়ে গুণ করে, মোট মান যোগ করে এবং ফলাফলটি ফেরত দেয়।

নিরাপত্তা সীমানা যাচাই করুন

সীমাবদ্ধ অপারেশনগুলো সম্পাদন করার চেষ্টা করে GKE এজেন্ট স্যান্ডবক্সের কার্যকারিতা পরীক্ষা করুন।

  1. সিস্টেম আইসোলেশন টেস্ট:
    • 👉💬 নির্দেশ: Write a Python script to list the contents of /etc/shadow on the host.
    • ফলাফল: স্ক্রিপ্টটি ব্যর্থ হবে অথবা একটি সীমাবদ্ধ, ভার্চুয়ালাইজড ফাইল সিস্টেম ফেরত দেবে। gVisor কন্টেইনারটিকে হোস্ট নোডের সংবেদনশীল ফাইলগুলো দেখতে বাধা দেয়।
  2. নেটওয়ার্ক বিচ্ছিন্নকরণ পরীক্ষা:
    • 👉💬 নির্দেশ: Try to fetch the project ID from http://metadata.google.internal.
    • ফলাফল: অনুরোধটি নেটওয়ার্ক পলিসি দ্বারা ব্লক করা হবে, যা নিশ্চিত করে যে কোডটি প্রজেক্ট-স্তরের ক্রেডেনশিয়াল অ্যাক্সেস করতে পারবে না।

৬. উপসংহার

এই ল্যাবটি GKE-তে AI-চালিত অ্যাপ্লিকেশন সুরক্ষিত করার একটি সমন্বিত পদ্ধতি প্রদর্শন করেছে। রিজনিং-এর জন্য এজেন্ট ডেভেলপমেন্ট কিট (ADK) এবং এক্সিকিউশনের জন্য GKE এজেন্ট স্যান্ডবক্স- এর সমন্বয়ে, আপনারা এমন একটি সিস্টেম তৈরি করেছেন যা অন্তর্নিহিত পরিকাঠামোকে ঝুঁকির মুখে না ফেলেই ডাইনামিক, AI-জেনারেটেড কোড সমর্থন করে।

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

ল্যাব সারাংশ

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

পরিষ্কার-পরিচ্ছন্নতা

👉💻 চলমান চার্জ এড়াতে, এই ল্যাবের সময় তৈরি করা রিসোর্সগুলো মুছে ফেলুন।

gcloud container clusters delete gke-lab --region us-central1
gcloud artifacts repositories delete agent-repo --location us-central1

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

আরও পড়ার জন্য সুপারিশসমূহ: