نشر وكلاء الذكاء الاصطناعي الآمن على GKE

1. مقدمة

يركّز هذا المختبر على تطوير وكلاء الذكاء الاصطناعي وأمانهم الذين ينفّذون رموزًا برمجية ديناميكية ضمن بيئة إنتاج. مع تطوّر تطبيقات الذكاء الاصطناعي لتتجاوز واجهات المحادثة البسيطة، أصبحت تتطلّب غالبًا القدرة على تنفيذ منطق معقّد، مثل تحليل البيانات أو النمذجة الرياضية أو معالجة الملفات، من خلال إنشاء الرموز البرمجية وتشغيلها في الوقت الفعلي. يوضّح هذا المختبر كيفية استخدام حزمة تطوير الوكلاء (ADK) لإنشاء وكلاء الاستدلال وبيئة وضع الحماية لوكلاء GKE لضمان تنفيذ أي رمز برمجي ينشئه الذكاء الاصطناعي في بيئة آمنة ومعزولة للغاية.

التحدي الفني المتمثل في الرمز غير الموثوق به

عندما ينشئ وكيل الذكاء الاصطناعي رمزًا برمجيًا (مثل Python) وينفّذه، فإنه ينفّذ بشكل أساسي عبء عمل غير موثوق به على البنية التحتية. في حال تعرّض الوكيل للاختراق أو تلقّيه تعليمات بتنفيذ إجراءات ضارّة، قد يحاول الوصول إلى متغيرات البيئة الحسّاسة أو فحص شبكتك الداخلية أو استغلال عقدة المضيف الأساسية. غالبًا ما يكون عزل الحاويات التقليدي غير كافٍ لأحمال العمل الديناميكية هذه. ولحلّ هذه المشكلة، على مهندسي المنصات تنفيذ طبقات أمان متعدّدة تتضمّن عزلًا على مستوى النواة وإمكانية محدودة للخروج من الشبكة.

المفاهيم الأساسية

  • حزمة تطوير الوكيل (ADK): هي إطار عمل يُستخدَم لإنشاء تطبيقات يمكنها التفكير في المهام. يدير هذا النظام "حلقة استدلال" يتلقّى فيها الذكاء الاصطناعي طلبًا، ويخطّط لسلسلة من الإجراءات، ويستدعي أدوات معيّنة، ثم يلخّص الناتج النهائي. في سير العمل هذا، تعمل "حزمة تطوير التطبيقات" كأداة تنسيق تحدّد الوقت الذي يتطلّب فيه طلب المستخدم تنفيذ الرمز.
  • GKE Agent Sandbox: تستخدم ميزة الأمان هذه gVisor، وهو وقت تشغيل حاوية مفتوح المصدر يوفّر نواة ضيف متخصّصة لكل حاوية. من خلال اعتراض طلبات النظام (syscalls) بين التطبيق ونواة المضيف، يمنع GKE Agent Sandbox الرمز غير الموثوق به من التفاعل مباشرةً مع العُقدة. يضمن ذلك عدم تصاعد انتهاك أمني داخل الحاوية إلى بقية المجموعة.
  • بروتوكول سياق النموذج (MCP) والأدوات: يحدّد هذا البروتوكول طريقة موحّدة لتتفاعل نماذج الذكاء الاصطناعي مع الأدوات الخارجية. في هذا المختبر، يتم إعداد الوكيل باستخدام أداة "تنفيذ الرمز البرمجي" التي تتواصل مع أداة تحكّم متخصّصة في البيئة التجريبية لتشغيل نصوص Python البرمجية.

أهداف التمرين المعملي

مع نهاية هذه الجلسة، سيكون بإمكانك:

  1. تطوير وكيل: يمكنك ضبط وكيل يستند إلى "حزمة تطوير الوكلاء" ومصمّم لمهام تحليل البيانات.
  2. ضبط ميزة "عزل النواة": يمكنك إعداد GKE Agent Sandbox باستخدام RuntimeClasses متخصّصة.
  3. تحسين الأداء: يمكنك إعداد "مجموعة احتياطية" من البيئات التجريبية لتقليل الوقت المستغرَق في بدء بيئات تنفيذ جديدة.
  4. فرض حدود الأمان: طبِّق "سياسات الشبكة" لمنع الخروج غير المصرَّح به من بيئة التنفيذ.

2. إعداد المشروع

من الضروري إعداد بيئة بشكلٍ سليم قبل البدء في إنشاء تطبيقات مستندة إلى وكيل. في هذا القسم، ستتمكّن من الوصول إلى الأدوات اللازمة والتأكّد من أنّ مشروعك على Google Cloud جاهز لاستضافة كلّ من وكيل الذكاء الاصطناعي وبيئة التنفيذ الآمنة.

فتح Cloud Shell

في هذا المختبر، سنستخدم Cloud Shell، وهي بيئة طرفية مستندة إلى المتصفح توفّرها Google Cloud. تتضمّن Cloud Shell إعدادات مسبقة لواجهة سطر الأوامر Google Cloud CLI (gcloud) وkubectl وبيئة Docker اللازمة لإنشاء تطبيقك ونشره.

  1. انتقِل إلى Google Cloud Console.
  2. انقر على الزر تفعيل 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: تتيح الوصول إلى خدمات Vertex AI، بما في ذلك نماذج Gemini للاستدلال وإنشاء الرموز البرمجية.

إنشاء مجموعة

يتطلّب هذا المختبر توفّر مجموعة GKE مع تفعيل ميزة "بيئة الاختبار المعزولة للوكيل". يُعدّ استخدام 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

ملاحظة: يستغرق توفير مجموعة جديدة عادةً من 8 إلى 10 دقائق. يمكنك المتابعة لتفعيل واجهات برمجة التطبيقات في علامة تبويب جديدة أو أثناء معالجة الأمر.

ضبط إذن الوصول إلى kubectl

بعد توفير مجموعتك، عليك ضبط kubectl للتواصل معها.

👉💻 يسترد الأمر التالي بيانات اعتماد المجموعة ويعدّل ملف kubeconfig المحلي، ما يتيح لك تنفيذ أوامر على مجموعة GKE الجديدة من Cloud Shell:

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، ما يمنح وحدات pod التي تعمل كحساب الخدمة هذا الأذونات اللازمة بدون الحاجة إلى إدارة مفاتيح حساب الخدمة.

👉💻 أولاً، أنشئ حساب خدمة Kubernetes الذي ستستخدمه وحدات Agent:

kubectl create serviceaccount adk-agent-sa

بعد ذلك، امنح حساب الخدمة هذا دور Vertex AI User من خلال إضافة ربط لسياسة إدارة الهوية وإمكانية الوصول.

👉💻 يربط هذا الأمر حساب خدمة Kubernetes adk-agent-sa في مساحة الاسم default بدور IAM roles/aiplatform.user لمجموعة هويات Workload Identity في مشروعك.

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

3- إنشاء وكيل ADK

في هذا القسم، ستحدّد منطق الوكيل. يعمل الوكيل كأخصائي بيانات يمكنه كتابة رموز Python البرمجية لمعالجة الملفات. تتيح منطق الاستدلال هذا للوكيل التعرّف على الحالات التي يتطلّب فيها طلب المستخدم باللغة الطبيعية إجراء عملية حسابية أو مستندة إلى البيانات، والتي من الأفضل أن يتم التعامل معها باستخدام الرمز البرمجي.

إنشاء دليل الوكلاء

👉💻 أنشئ دليلاً للمختبر ودليلاً فرعيًا لرمز مصدر الوكيل:

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

تحديد وكيل ADK

نبدأ بتحديد المنطق الأساسي للوكيل. يستخدم وكيلنا إطار عمل ADK لتحديد وكيل باسم SpreadsheetAnalyst يستخدِم نموذج gemini-2.5-flash. يتضمّن أداة (run_spreadsheet_analysis) تستدعي GKE Agent Sandbox لتنفيذ رمز Python البرمجي بأمان. توجّه تعليمات الوكيل إلى كتابة وتنفيذ رموز برمجية مستندة إلى مكتبة 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 يُعدّ حزمة Python.

👉💻 شغِّل الأمر التالي لإنشاء ملف فارغ باسم root_agent/__init__.py يتضمّن المحتوى التالي:

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

بعد ذلك، ننشئ ملفًا لإعداد متغيرات البيئة لوكيل ADK. يطلب الرمز GOOGLE_GENAI_USE_VERTEXAI=TRUE من حزمة تطوير التطبيقات استخدام 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

تضمين الوكيل في حاوية

أخيرًا، نحدّد صورة الحاوية للوكيل. يبدأ من صورة أساسية للغة Python، ثم يثبّت kubectl (الذي يحتاج إليه عميل بيئة الاختبار المعزولة للوكيل للتواصل مع المجموعة)، ويثبّت مكتبات Python اللازمة: google-adk وpandas وagentic-sandbox-client من مستودع git الخاص به. أخيرًا، ينسخ رمز مصدر الوكيل إلى الصورة ويضبط نقطة الدخول لتشغيل خادم الويب ADK، الذي يعرض واجهة المستخدم وواجهة برمجة التطبيقات للوكيل.

👉💻 نفِّذ الأمر التالي لإنشاء ملف باسم 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/

4. تنفيذ البنية الأساسية لـ "وضع الحماية"

بعد تحديد منطق الوكيل، عليك إعداد البنية الأساسية التي تتيح تشغيل الرموز غير الموثوق بها بأمان. يتضمّن ذلك إعداد عناصر التحكّم في وقت التشغيل والشبكة.

نشر "وحدة التحكّم في وضع الحماية للوكيل"

يمكنك نشر وحدة التحكّم في "وضع الحماية الآمن للوكيل" والمكوّنات المطلوبة من خلال تطبيق بيانات الإصدار الرسمية على مجموعتك. بيانات البيان هذه هي ملفات إعداد تُعلِم 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

يستخدم برنامج Python الذي ستستعين به لإنشاء بيئات وضع الحماية والتفاعل معها مكوّنًا يُسمى "موجّه وضع الحماية" للتواصل مع بيئات وضع الحماية.

👉💻 شغِّل الأمر التالي لإنشاء ملف باسم 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

تنفيذ عزل الشبكة

لمنع الرمز البرمجي الذي تم إنشاؤه من الوصول إلى البيانات الحسّاسة، عليك تطبيق سياسة شبكة. تضمن هذه السياسة عدم وصول وحدات الحماية إلى خادم البيانات الوصفية في Google Cloud أو عناوين 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

5- التفعيل والتحقّق

بعد إعداد البنية الأساسية للأمان والوكيل، عليك الآن نشر المكوّنات والتحقّق من عمل حدود الأمان على النحو المتوقّع.

نشر الوكيل

الآن، عليك إنشاء بيان Kubernetes لنشر وكيل ADK. يتضمّن ملف البيان هذا عدة مكوّنات رئيسية: Deployment لإدارة حاوية الوكيل، وService من النوع LoadBalancer لعرض واجهة مستخدم الوكيل ونقطة نهاية واجهة برمجة التطبيقات للزيارات الخارجية، وقواعد التحكّم اللازمة في الوصول المستند إلى الأدوار (RBAC) (Role وRoleBinding) لمنح الوكيل إذنًا بالتفاعل مع وحدة التحكّم في Agent 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:// في متصفّح الويب، مع استبدال بالعنوان الذي تم الحصول عليه في الخطوة السابقة.

التحقّق من المهام المشروعة

اختبِر الوكيل باستخدام طلب بيانات عادي للتأكّد من أنّ التواصل بين الوكيل ووحدة التحكّم والبيئة التجريبية يعمل بشكل سليم.

  • 👉💬 الطلب:
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
  • الملاحظة: ينشئ الوكيل رمز Python لتحليل بيانات 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.
    • النتيجة: سيتم حظر الطلب بموجب "سياسة الشبكة"، ما يؤكّد أنّه لا يمكن للرمز البرمجي الوصول إلى بيانات الاعتماد على مستوى المشروع.

6. الخاتمة

أظهرت هذه التجربة العملية اتّباع نهج شامل لتأمين التطبيقات المستندة إلى الذكاء الاصطناعي على GKE. من خلال الجمع بين مجموعة أدوات تطوير الوكيل (ADK) للاستدلال ووضع الحماية الخاص بالوكيل في GKE للتنفيذ، أنشأت نظامًا يتيح استخدام رموز برمجية ديناميكية من إنشاء الذكاء الاصطناعي بدون تعريض البنية الأساسية للخطر.

يوفّر استخدام gVisor عزلًا على مستوى النواة، وتمنع سياسات الشبكة التنقّل الأفقي، وتضمن مجموعات النسخ الاحتياطي ألا تؤدي طبقات الأمان هذه إلى خفض أداء التطبيق. تمثّل هذه البنية المعيار المتبّع لنشر وكلاء الاستدلال الذين يتطلّبون بيئات آمنة لتنفيذ الرموز البرمجية.

ملخّص الدرس التطبيقي

  • تطوير الوكيل: لقد أعددت وكيلاً يستند إلى "حزمة تطوير التطبيقات" (ADK) ويخطّط للأدوات وينفّذها استنادًا إلى نية المستخدم.
  • العزل الآمن: استخدمت gVisor لتوفير فصل على مستوى النواة لتنفيذ الرموز غير الموثوق بها.
  • التحكّم في حركة الخروج: نفّذت "سياسات الشبكة" لإنشاء "فجوة هوائية" بين بيئة التنفيذ وخدمات السحابة الإلكترونية الحسّاسة.
  • الأداء: استخدمت ميزة "مجموعات النسخ الاحتياطي النشطة" لتوفير أوقات بدء تشغيل شبه فورية للحاويات المعزولة.

تنظيف

👉💻 لمنع تحصيل رسوم مستمرة، احذف الموارد التي تم إنشاؤها أثناء هذا المختبر.

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

الخطوات التالية

مقالات مقترَحة للقراءة: