Questo documento fornisce istruzioni per l'installazione e l'esecuzione del controller Agent Sandbox su un cluster Google Kubernetes Engine (GKE). Spiega anche come eseguire il deployment di un ambiente sandbox sul cluster in cui puoi testare comandi shell non attendibili.
Il controller Agent Sandbox fornisce un framework per la creazione e la gestione di ambienti di runtime effimeri. Questo approccio ti consente di definire un modello per l'ambiente della tua app e poi creare istanze su richiesta.
Agent Sandbox fornisce un ambiente sicuro e isolato per l'esecuzione di codice non attendibile, ad esempio codice generato da modelli linguistici di grandi dimensioni (LLM). L'esecuzione di questo tipo di codice direttamente in un cluster comporta rischi per la sicurezza, perché il codice non attendibile potrebbe potenzialmente accedere o interferire con altre app o con il nodo del cluster sottostante stesso.
Agent Sandbox mitiga questi rischi fornendo un forte isolamento di processi, archiviazione e rete per il codice che esegue. Questo isolamento viene ottenuto utilizzando gVisor, una tecnologia che crea una barriera sicura tra l'applicazione e il sistema operativo del nodo del cluster. Possono essere utilizzate altre tecnologie di sandboxing, ad esempio Kata Containers; tuttavia, l'esempio in questo documento utilizza solo gVisor.
Questo documento fornisce istruzioni per l'esecuzione di Agent Sandbox su un cluster GKE Autopilot o Standard.
Agent Sandbox è un progetto open source. Per saperne di più su come contribuire al progetto o trovare dettagli tecnici più approfonditi, consulta il progetto open source Agent Sandbox.
Costi
Se segui i passaggi descritti in questo documento, al tuo account Google Cloud verranno addebitati costi. I costi iniziano quando crei un cluster GKE. Questi costi includono gli addebiti per cluster per GKE, come descritto nella pagina dei prezzi, e gli addebiti per l'esecuzione di VM Compute Engine.
Per evitare addebiti non necessari, assicurati di disabilitare GKE o eliminare il progetto dopo aver completato questo documento.
Prima di iniziare
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Google Kubernetes Engine APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, activate Cloud Shell.
Definisci le variabili di ambiente
Per semplificare i comandi eseguiti in questo documento, puoi impostare le variabili di ambiente in Cloud Shell. In Cloud Shell, definisci le seguenti variabili di ambiente utili eseguendo questi comandi:
export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME="agent-sandbox-cluster" export GKE_LOCATION="us-central1" export AGENT_SANDBOX_VERSION="v0.1.0" export NODE_POOL_NAME="agent-sandbox-node-pool" export MACHINE_TYPE="e2-standard-2" export PYTHON_CLIENT_VERSION="main"Ecco una spiegazione di queste variabili di ambiente:
PROJECT_ID: l'ID del tuo progetto Google Cloud corrente. La definizione di questa variabile consente di garantire che tutte le risorse, come il cluster GKE, vengano create nel progetto corretto.CLUSTER_NAME: il nome del cluster GKE, ad esempioagent-sandbox-cluster.GKE_LOCATION: la regione Google Cloud in cui verranno creati il cluster GKE e il repository Artifact Registry, ad esempious-central1. Ti consigliamo di collocarli insieme perché ciò riduce la latenza di pull delle immagini.AGENT_SANDBOX_VERSION: la versione del controller Agent Sandbox da distribuire al cluster.NODE_POOL_NAME: il nome del pool di nodi che eseguirà i carichi di lavoro in sandbox, ad esempioagent-sandbox-node-pool.MACHINE_TYPE: il tipo di macchina dei nodi nel pool di nodi, ad esempioe2-standard-2. Per informazioni dettagliate sulle diverse serie di macchine e sulla scelta tra le diverse opzioni, consulta la guida alle risorse e al confronto per le famiglie di macchine.PYTHON_CLIENT_VERSION: la versione del client Python di Agentic Sandbox da installare.
Esegui il deployment della sandbox dell'agente
Ora che hai configurato il progetto Google Cloud e l'ambiente Cloud Shell, puoi eseguire il provisioning dell'infrastruttura necessaria ed eseguire il deployment di Agent Sandbox.
Crea un cluster GKE
Successivamente, crea un cluster GKE con gVisor abilitato. Questo cluster fornisce l'ambiente Kubernetes in cui verrà eseguito il deployment e l'esecuzione del controller Agent Sandbox e dell'app sandbox di esempio. gVisor fornisce la tecnologia di limitazione tramite sandbox per eseguire in modo sicuro codice non attendibile.
Puoi creare un cluster Autopilot o Standard. Autopilot abilita automaticamente gVisor, mentre i cluster Standard richiedono la creazione manuale di un pool di nodi abilitato per gVisor:
Autopilot
Per creare un cluster Autopilot utilizzando gcloud CLI, esegui questo comando:
gcloud container clusters create-auto ${CLUSTER_NAME} \ --location=${GKE_LOCATION} \ --project=${PROJECT_ID}Standard
Per creare un cluster Standard utilizzando gcloud CLI, segui questi passaggi:
Crea il cluster:
gcloud container clusters create ${CLUSTER_NAME} \ --location=${GKE_LOCATION}Crea un pool di nodi separato con gVisor abilitato:
gcloud container node-pools create ${NODE_POOL_NAME} \ --cluster=${CLUSTER_NAME} \ --location=${GKE_LOCATION} \ --machine-type=${MACHINE_TYPE} \ --image-type=cos_containerd \ --sandbox type=gvisor
Recupera le credenziali del cluster in modo che la CLI
kubectlpossa connettersi al cluster. Questo comando aggiorna il file di configurazione Kubernetes, archiviato per impostazione predefinita nella directory~/.kube/config. Questo file di configurazione contiene le credenziali richieste dakubectlper interagire con il tuo cluster GKE:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --location=${GKE_LOCATION}Esegui il deployment del controller Agent Sandbox nel cluster
Puoi eseguire il deployment del controller Agent Sandbox e dei relativi componenti richiesti applicando i manifest di rilascio ufficiali al cluster. Questi manifest sono file di configurazione che indicano a Kubernetes di scaricare tutti i componenti necessari per eseguire il deployment e l'esecuzione del controller sandbox dell'agente sul cluster.
Esegui questi comandi per eseguire il deployment del controller Agent Sandbox nel tuo cluster GKE:
kubectl apply \ -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/${AGENT_SANDBOX_VERSION}/manifest.yaml \ -f https://github.com/kubernetes-sigs/agent-sandbox/releases/download/${AGENT_SANDBOX_VERSION}/extensions.yamlVerifica il controller della sandbox dell'agente
Dopo aver applicato i manifest, verifica che il pod del controller Agent Sandbox venga eseguito correttamente nello spazio dei nomi
agent-sandbox-system:kubectl get pods -n agent-sandbox-systemAttendi che il pod mostri "Running" (In esecuzione) nella colonna STATUS e "1/1" nella colonna READY. Quando il pod è in esecuzione correttamente, l'output è simile a questo:
NAME READY STATUS RESTARTS AGE agent-sandbox-controller-0 1/1 Running 0 44dOra che il controller Agent Sandbox è in esecuzione, può creare e gestire automaticamente ambienti sandbox per qualsiasi risorsa
Sandboxcreata nel cluster.Esegui il deployment di un ambiente sandbox
Ora che il controller Agent Sandbox è in esecuzione nel cluster GKE, devi eseguire il deployment dei componenti per l'ambiente sandbox di esempio. Questa sezione mostra come creare il blueprint della sandbox (
SandboxTemplate), eseguire il deployment del router di rete necessario e installare il client Python che utilizzerai per interagire con la sandbox.Il modo consigliato per creare e interagire con la sandbox è utilizzare il client Python Agentic Sandbox. Questo client fornisce un'interfaccia che semplifica l'intero ciclo di vita di una sandbox, dalla creazione alla pulizia. È una libreria Python che puoi utilizzare per creare, utilizzare ed eliminare sandbox in modo programmatico.
Il client utilizza un router sandbox come punto di accesso centrale per tutto il traffico. Nell'esempio descritto in questo documento, il client crea un tunnel a questo router utilizzando il comando
kubectl port-forward, in modo da non dover esporre indirizzi IP pubblici. Tieni presente che l'utilizzo dikubectl port-forwardnon è una soluzione sicura e il suo utilizzo deve essere limitato agli ambienti di sviluppo.Crea un
SandboxTemplatee unSandboxWarmPoolOra definisci la configurazione del sandbox creando una risorsa
SandboxTemplatee una risorsaSandboxWarmPool.SandboxTemplatefunge da progetto riutilizzabile che il controller di Agent Sandbox utilizza per creare ambienti sandbox coerenti e preconfigurati. La risorsaSandboxWarmPoolgarantisce che un numero specificato di pod pre-riscaldati siano sempre in esecuzione e pronti per essere rivendicati. Una sandbox pre-riscaldata è un pod in esecuzione già inizializzato. Questa pre-inizializzazione consente di creare nuove sandbox in meno di un secondo ed evita la latenza di avvio di una sandbox normale:In Cloud Shell, crea un file denominato
sandbox-template-and-pool.yamlcon il seguente contenuto: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-templateApplica il manifest
SandboxTemplateeSandboxWarmPool:kubectl apply -f sandbox-template-and-pool.yaml
Esegui il deployment del router sandbox
Il client Python che utilizzerai per creare e interagire con gli ambienti sandbox utilizza un componente chiamato Sandbox Router per comunicare con le sandbox.
Per questo esempio, utilizzi la modalità sviluppatore del client per i test. Questa modalità è pensata per lo sviluppo locale e utilizza il comando
kubectl port-forwardper stabilire un tunnel diretto dalla tua macchina locale al servizio Sandbox Router in esecuzione nel cluster. Questo approccio di tunneling evita la necessità di un indirizzo IP pubblico o di una configurazione di ingresso complessa e semplifica l'interazione con le sandbox dal tuo ambiente locale.Per eseguire il deployment del router sandbox:
In Cloud Shell, crea un file denominato
sandbox-router.yamlcon il seguente contenuto:# A ClusterIP Service to provide a stable endpoint for the router pods. 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 # The port the service will listen on targetPort: 8080 # The port the router container listens on (from the sandbox_router/Dockerfile) --- # The Deployment to manage and run the router pods. apiVersion: apps/v1 kind: Deployment metadata: name: sandbox-router-deployment namespace: default spec: replicas: 2 # Run at least two replicas for high availability selector: matchLabels: app: sandbox-router template: metadata: labels: app: sandbox-router spec: # Ensure pods are spread across different zones for HA 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:v20251124-v0.1.0-10-ge26ddb2 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: 1000Applica il manifest per eseguire il deployment del router nel tuo cluster:
kubectl apply -f sandbox-router.yaml
Installa il client Python
Ora che i componenti in-cluster come il router sandbox sono stati implementati, l'ultimo passaggio preparatorio consiste nell'installare il client Python sandbox agentico sulla tua macchina locale. Ricorda che questo client è una libreria Python che ti consente di creare, utilizzare ed eliminare sandbox in modo programmatico. Lo utilizzerai nella sezione successiva per testare l'ambiente:
Crea e attiva un ambiente virtuale Python:
python3 -m venv .venv source .venv/bin/activateInstalla il pacchetto client dal repository
agent-sandbox:pip install "git+https://github.com/kubernetes-sigs/agent-sandbox.git@${PYTHON_CLIENT_VERSION}#subdirectory=clients/python/agentic-sandbox-client"
Testare la sandbox
Ora che tutti i componenti di configurazione sono a posto, puoi creare e interagire con una sandbox utilizzando il client Python Agentic Sandbox.
Nella directory
agent-sandbox, crea uno script Python denominatotest_sandbox.pycon il seguente contenuto:from agentic_sandbox import SandboxClient # Automatically tunnels to svc/sandbox-router-svc with SandboxClient( template_name="python-runtime-template", namespace="default" ) as sandbox: print(sandbox.run("echo 'Hello from the sandboxed environment!'").stdout )Dal terminale (con l'ambiente virtuale ancora attivo), esegui lo script di test:
python3 test_sandbox.py
Dovresti visualizzare il messaggio "Hello from the sandboxed environment!" (Ciao dall'ambiente sandbox), output della sandbox.
Complimenti! Hai eseguito correttamente un comando shell all'interno di una sandbox sicura. Utilizzando il metodo
sandbox.run(), puoi eseguire qualsiasi comando shell e la sandbox dell'agente esegue il comando all'interno di una barriera sicura che protegge i nodi del cluster e altri carichi di lavoro da codice non attendibile. In questo modo, un agente AI o qualsiasi workflow automatizzato può eseguire le attività in modo sicuro e affidabile.Quando esegui lo script,
SandboxClientgestisce tutti i passaggi. Crea la risorsaSandboxClaimper avviare la sandbox, attende che sia pronta e poi utilizza il metodosandbox.run()per eseguire i comandi della shell bash all'interno del container sicuro. Il client acquisisce e stampa quindi ilstdoutda questo comando. La sandbox viene eliminata automaticamente dopo l'esecuzione del programma.Esegui la pulizia delle risorse
Per evitare che al tuo account Google Cloud vengano addebitati costi, devi eliminare il cluster GKE che hai creato:
gcloud container clusters delete $CLUSTER_NAME --location=$GKE_LOCATION --quietPassaggi successivi
- Scopri di più sul progetto open source Agent Sandbox su GitHub.
- Per comprendere la tecnologia sottostante che fornisce l'isolamento della sicurezza per i tuoi carichi di lavoro, consulta GKE Sandbox.
- Per saperne di più su come migliorare la sicurezza dei cluster e dei workload, consulta la Panoramica della sicurezza di GKE.