استقرار عامل‌های هوش مصنوعی امن در GKE

۱. مقدمه

این آزمایشگاه بر توسعه و امنیت عامل‌های هوش مصنوعی که کد پویا را در یک محیط تولید اجرا می‌کنند، تمرکز دارد. از آنجایی که برنامه‌های هوش مصنوعی فراتر از رابط‌های چت ساده حرکت می‌کنند، اغلب به توانایی انجام منطق پیچیده - مانند تجزیه و تحلیل داده‌ها، مدل‌سازی ریاضی یا پردازش فایل - با تولید و اجرای کد در زمان واقعی نیاز دارند. این آزمایشگاه نحوه استفاده از کیت توسعه عامل (ADK) را برای ساخت عامل‌های استدلال و GKE Agent Sandbox را برای اطمینان از اجرای هر کد تولید شده توسط هوش مصنوعی در یک محیط بسیار ایزوله و امن نشان می‌دهد.

چالش فنی کد غیرقابل اعتماد

وقتی یک عامل هوش مصنوعی کدی (مانند پایتون) تولید و اجرا می‌کند، اساساً یک بار کاری غیرقابل اعتماد را روی زیرساخت شما اجرا می‌کند. اگر این عامل به خطر بیفتد یا دستور انجام اقدامات مخرب به آن داده شود، می‌تواند سعی کند به متغیرهای محیطی حساس دسترسی پیدا کند، شبکه داخلی شما را اسکن کند یا از گره میزبان اصلی سوءاستفاده کند. جداسازی سنتی کانتینر اغلب برای این بارهای کاری پویا کافی نیست. برای رسیدگی به این موضوع، مهندسان پلتفرم باید امنیت چند لایه‌ای را پیاده‌سازی کنند که شامل جداسازی در سطح هسته و خروج محدود از شبکه باشد.

مفاهیم اصلی

  • کیت توسعه عامل (ADK): ADK چارچوبی است که برای ساخت برنامه‌هایی استفاده می‌شود که می‌توانند در مورد وظایف استدلال کنند. این کیت یک "حلقه استدلال" را مدیریت می‌کند که در آن هوش مصنوعی یک درخواست دریافت می‌کند، مجموعه‌ای از اقدامات را برنامه‌ریزی می‌کند، ابزارهای خاصی را فراخوانی می‌کند و سپس خروجی نهایی را خلاصه می‌کند. در این گردش کار، ADK به عنوان هماهنگ‌کننده‌ای عمل می‌کند که تشخیص می‌دهد چه زمانی درخواست کاربر نیاز به اجرای کد دارد.
  • GKE Agent Sandbox: این ویژگی امنیتی از gVisor ، یک محیط اجرای کانتینر متن‌باز که یک هسته مهمان اختصاصی برای هر کانتینر فراهم می‌کند، استفاده می‌کند. GKE Agent Sandbox با رهگیری فراخوانی‌های سیستمی (syscalls) بین برنامه و هسته میزبان، از تعامل مستقیم کدهای غیرقابل اعتماد با گره جلوگیری می‌کند. این امر تضمین می‌کند که نقض امنیتی درون کانتینر نمی‌تواند به بقیه خوشه گسترش یابد.
  • پروتکل زمینه مدل (MCP) و ابزارها: این پروتکل یک روش استاندارد برای تعامل مدل‌های هوش مصنوعی با ابزارهای خارجی ایجاد می‌کند. در این آزمایشگاه، عامل با یک ابزار "اجرای کد" پیکربندی شده است که با یک کنترل‌کننده تخصصی جعبه شنی برای اجرای اسکریپت‌های پایتون ارتباط برقرار می‌کند.

اهداف آزمایشگاه

در پایان این جلسه، شما قادر خواهید بود:

  1. توسعه یک عامل: پیکربندی یک عامل مبتنی بر ADK که برای وظایف تحلیل داده طراحی شده است.
  2. پیکربندی جداسازی هسته: GKE Agent Sandbox را با RuntimeClasses تخصصی راه‌اندازی کنید.
  3. بهینه‌سازی عملکرد: پیاده‌سازی یک «مخزن گرم» از سندباکس‌ها برای به حداقل رساندن زمان صرف شده برای شروع محیط‌های اجرایی جدید.
  4. اعمال مرزهای امنیتی: اعمال سیاست‌های شبکه برای جلوگیری از خروج غیرمجاز از محیط اجرا.

۲. راه‌اندازی پروژه

قبل از شروع ساخت برنامه‌های عامل‌محور، یک محیط به درستی پیکربندی شده ضروری است. در این بخش، به ابزارهای لازم دسترسی خواهید داشت و اطمینان حاصل خواهید کرد که پروژه Google Cloud شما آماده میزبانی از عامل هوش مصنوعی و محیط اجرای امن آن است.

پوسته ابری را باز کنید

برای این آزمایش، ما از Cloud Shell ، یک محیط ترمینال مبتنی بر مرورگر که توسط Google Cloud ارائه شده است، استفاده خواهیم کرد. Cloud Shell به صورت از پیش پیکربندی شده با رابط خط فرمان Google Cloud ( gcloud ) ، kubectl و محیط Docker مورد نیاز برای ساخت و استقرار برنامه شما ارائه می‌شود.

  1. به کنسول ابری گوگل بروید.
  2. روی دکمه‌ی «فعال‌سازی پوسته‌ی ابری» در بالای صفحه سمت راست (آیکون >_ ) کلیک کنید.
  3. پس از باز شدن ترمینال در پایین مرورگر خود، در صورت درخواست، روی ادامه کلیک کنید.

انتخاب پروژه

شما باید مطمئن شوید که پوسته شما به پروژه صحیح Google Cloud اشاره دارد تا از استقرار منابع در محیط اشتباه جلوگیری شود.

👉💻 شناسه پروژه خود را از داشبورد کنسول شناسایی کنید و دستور زیر را برای تنظیم پروژه در پوسته فعلی خود اجرا کنید:

gcloud config set project [YOUR_PROJECT_ID]

فعال کردن APIها

ساخت و استقرار عامل‌ها به چندین API تخصصی برای ساخت کانتینر، میزبانی تصویر و دسترسی به مدل مولد نیاز دارد.

👉💻 دستور زیر را برای مقداردهی اولیه این سرویس‌ها اجرا کنید:

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: دسترسی به سرویس‌های هوش مصنوعی Vertex، از جمله مدل‌های Gemini برای استدلال و تولید کد را فراهم می‌کند.

ایجاد خوشه

این آزمایشگاه به یک کلاستر GKE با قابلیت فعال Agent Sandbox نیاز دارد. استفاده از GKE Autopilot کارآمدترین راه برای شروع است، زیرا به طور خودکار مدیریت گره را انجام می‌دهد و در عین حال از ویژگی‌های امنیتی مورد نیاز برای اجرای کد ایزوله پشتیبانی می‌کند.

👉💻 دستورات زیر را برای ایجاد خوشه 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 محلی شما را به‌روزرسانی می‌کند و به شما امکان می‌دهد دستوراتی را از Cloud Shell روی کلاستر 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 را اعطا کنید.

👉💻 این دستور، حساب کاربری سرویس Kubernetes مربوط به adk-agent-sa را در فضای نام default به نقش IAM در roles/aiplatform.user برای Workload Identity pool پروژه شما متصل می‌کند.

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 Agent Sandbox را برای اجرای ایمن کد پایتون فراخوانی می‌کند. دستورالعمل‌های عامل، آن را برای نوشتن و اجرای کد مبتنی بر pandas هنگام درخواست تجزیه و تحلیل صفحات گسترده راهنمایی می‌کند.

👉💻 دستور زیر را اجرا کنید تا فایلی با نام 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 می‌گوید که از Vertex AI برای دسترسی به مدل‌های Gemini استفاده کند، و GOOGLE_CLOUD_PROJECT و GOOGLE_CLOUD_LOCATION پروژه Google Cloud و منطقه‌ای را که برای فراخوانی‌های Vertex AI API استفاده می‌شود، مشخص می‌کنند.

👉💻 دستور زیر را اجرا کنید تا فایلی با نام 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 (که توسط کلاینت sandbox عامل برای ارتباط با خوشه مورد نیاز است) را نصب می‌کند و کتابخانه‌های پایتون لازم: google-adk ، pandas و agentic-sandbox-client از مخزن git آن نصب می‌کند. در نهایت، کد منبع عامل را در تصویر کپی می‌کند و نقطه ورودی را برای اجرای وب سرور ADK تنظیم می‌کند، که رابط کاربری و 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

تصویر عامل را بسازید

عامل باید به عنوان یک تصویر کانتینر بسته‌بندی شود. ما از Cloud Build برای بسته‌بندی عامل و ذخیره آن در Artifact Registry استفاده خواهیم کرد.

👉💻 دستور زیر را برای ایجاد مخزن اجرا کنید:

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/

۴. پیاده‌سازی زیرساخت سندباکس

اکنون که منطق عامل تعریف شده است، باید زیرساختی را پیکربندی کنید که به کدهای غیرقابل اعتماد اجازه اجرای ایمن را می‌دهد. این شامل تنظیم زمان اجرای ایزوله و کنترل‌های شبکه می‌شود.

کنترلر Agent Sandbox را مستقر کنید

شما می‌توانید کنترلر Agent Sandbox و اجزای مورد نیاز آن را با اعمال مانیفست‌های رسمی انتشار به کلاستر خود، مستقر کنید. این مانیفست‌ها فایل‌های پیکربندی هستند که به Kubernetes دستور می‌دهند تا تمام اجزای لازم برای استقرار و اجرای کنترلر Agent Sandbox را روی کلاستر شما دانلود کند.

👉💻 دستورات زیر را برای استقرار کنترلر Agent Sandbox در کلاستر 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، پیکربندی جعبه شنی خود را تعریف می‌کنید. SandboxTemplate به عنوان یک طرح اولیه قابل استفاده مجدد عمل می‌کند که کنترل‌کننده Agent Sandbox از آن برای ایجاد محیط‌های جعبه شنی از پیش پیکربندی شده و سازگار استفاده می‌کند. منبع SandboxWarmPool تضمین می‌کند که تعداد مشخصی از Podهای از پیش گرم شده همیشه در حال اجرا و آماده برای استفاده هستند. یک جعبه شنی از پیش گرم شده، یک Pod در حال اجرا است که از قبل مقداردهی اولیه شده است. این مقداردهی اولیه اولیه، امکان ایجاد جعبه‌های شنی جدید را در کمتر از یک ثانیه فراهم می‌کند و از تأخیر راه‌اندازی یک جعبه شنی معمولی جلوگیری می‌کند.

👉💻 دستور زیر را برای ایجاد فایلی با نام 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 را ایجاد کنید

کلاینت پایتونی که برای ایجاد و تعامل با محیط‌های سندباکس استفاده خواهید کرد، از مؤلفه‌ای به نام روتر سندباکس برای ارتباط با سندباکس‌ها استفاده می‌کند.

👉💻 دستور زیر را برای ایجاد فایلی با نام 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

پیاده‌سازی جداسازی شبکه

برای جلوگیری از دسترسی کد تولید شده به داده‌های حساس، باید یک خط‌مشی شبکه اعمال کنید. این خط‌مشی تضمین می‌کند که پادهای سندباکس نمی‌توانند به سرور ابرداده گوگل یا سایر IPهای داخلی دسترسی پیدا کنند.

👉💻 دستور زیر را برای ایجاد فایلی با نام 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

۵. استقرار و تأیید

با پیکربندی عامل و زیرساخت امنیتی، اکنون اجزا را مستقر کرده و تأیید می‌کنید که مرزهای امنیتی مطابق انتظار عمل می‌کنند.

عامل را مستقر کنید

اکنون شما مانیفست Kubernetes را برای استقرار عامل ADK ایجاد خواهید کرد. این مانیفست شامل چندین مؤلفه کلیدی است: یک Deployment برای مدیریت کانتینر عامل، یک Service از نوع LoadBalancer برای قرار دادن رابط کاربری و نقطه پایانی API عامل در معرض ترافیک خارجی، و قوانین لازم کنترل دسترسی مبتنی بر نقش (RBAC) ( Role و RoleBinding ) برای اعطای مجوز به عامل برای تعامل با کنترلر Agent Sandbox و مدیریت نمونه‌های sandbox.

👉💻 دستور زیر را برای ایجاد فایلی با نام 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 را باز کنید

پس از اتمام نصب، می‌توانید وضعیت آن را بررسی کنید.

👉💻 مطمئن شوید که پادهای عامل در حال اجرا هستند:

kubectl get pods

👉💻 بازیابی IP خارجی و یافتن آدرس IP خارجی اختصاص داده شده به سرویس نماینده:

kubectl get services

به دنبال مقدار EXTERNAL-IP مرتبط با data-agent-service بگردید.

رابط کاربری وب ADK را با رفتن به http:// باز کنید. 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 Agent Sandbox را آزمایش کنید.

  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 را نشان داد. با ترکیب کیت توسعه عامل (ADK) برای استدلال با GKE Agent Sandbox برای اجرا، شما سیستمی ساخته‌اید که از کد پویا و تولید شده توسط هوش مصنوعی پشتیبانی می‌کند، بدون اینکه زیرساخت‌های اساسی را در معرض خطر قرار دهد.

استفاده از gVisor ، ایزولاسیون در سطح هسته را فراهم می‌کند، سیاست‌های شبکه از حرکت جانبی جلوگیری می‌کنند و Warm Poolها تضمین می‌کنند که این لایه‌های امنیتی، عملکرد برنامه را کاهش نمی‌دهند. این معماری، استانداردی را برای استقرار عوامل استدلال که به محیط‌های اجرای کد ایمن نیاز دارند، ارائه می‌دهد.

خلاصه آزمایشگاه

  • توسعه عامل: شما یک عامل مبتنی بر ADK را پیکربندی کرده‌اید که ابزارها را بر اساس قصد کاربر برنامه‌ریزی و اجرا می‌کند.
  • جداسازی امن: شما از gVisor برای جداسازی سطح هسته برای اجرای کدهای غیرقابل اعتماد استفاده کردید.
  • کنترل خروجی: شما سیاست‌های شبکه را برای «فاصله‌گذاری هوایی» محیط اجرا از سرویس‌های ابری حساس پیاده‌سازی کرده‌اید.
  • عملکرد: شما از Warm Pools برای فراهم کردن زمان‌های راه‌اندازی تقریباً آنی برای کانتینرهای ایزوله استفاده کردید.

پاکسازی

👉💻 برای جلوگیری از هزینه‌های جاری، منابع ایجاد شده در طول این آزمایش را حذف کنید.

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

مراحل بعدی

توصیه‌هایی برای مطالعه بیشتر: