Ce document fournit des instructions pour installer et exécuter le contrôleur Agent Sandbox sur un cluster Google Kubernetes Engine (GKE). Il explique également comment déployer un environnement en bac à sable sur le cluster dans lequel vous pouvez tester des commandes shell non fiables.
Le contrôleur Agent Sandbox fournit un framework pour créer et gérer des environnements d'exécution éphémères. Cette approche vous permet de définir un modèle pour l'environnement de votre application, puis de créer des instances à la demande.
Agent Sandbox fournit un environnement sécurisé et isolé pour exécuter du code non fiable, tel que du code généré par de grands modèles de langage (LLM). L'exécution de ce type de code directement dans un cluster présente des risques de sécurité, car le code non fiable peut potentiellement accéder à d'autres applications ou au nœud de cluster sous-jacent lui-même, ou interférer avec eux.
Agent Sandbox atténue ces risques en fournissant une isolation forte des processus, du stockage et du réseau pour le code qu'il exécute. Cette isolation est obtenue à l'aide de gVisor, une technologie qui crée une barrière sécurisée entre l'application et le système d'exploitation du nœud de cluster. D'autres technologies de bac à sable, par exemple les conteneurs Kata, peuvent être utilisées à la place. Toutefois, l'exemple de ce document n'utilise que gVisor.
Ce document fournit des instructions pour exécuter Agent Sandbox sur un cluster GKE Autopilot ou Standard.
Agent Sandbox est un projet Open Source. Pour en savoir plus sur la contribution au projet ou pour obtenir des informations techniques plus détaillées, consultez le projet Open Source Agent Sandbox.
Coûts
Les étapes décrites dans ce document entraînent des frais sur votre Google Cloud compte. Les coûts commencent lorsque vous créez un cluster GKE. Ces coûts incluent les frais par cluster pour GKE, comme indiqué sur la page Tarifs, et les frais d'exécution des VM Compute Engine.
Pour éviter des frais inutiles, assurez-vous de désactiver GKE ou de supprimer le projet une fois que vous avez terminé de suivre ce document.
Avant de commencer
-
Dans la Google Cloud console, sur la page de sélection du projet, sélectionnez ou créez un Google Cloud projet.
Rôles requis pour sélectionner ou créer un projet
- Sélectionner un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous avez besoin du rôle Créateur de projet
(
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Vérifiez que la facturation est activée pour votre Google Cloud projet.
Activez les API Artifact Registry et Google Kubernetes Engine.
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.-
Dans la Google Cloud console, activez Cloud Shell.
Définir des variables d'environnement
Pour simplifier les commandes que vous exécutez dans ce document, vous pouvez définir des variables d'environnement dans Cloud Shell. Dans Cloud Shell, définissez les variables d'environnement utiles suivantes en exécutant les commandes suivantes :
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"
Voici une explication de ces variables d'environnement :
PROJECT_ID: ID de votre projet actuel. Google Cloud La définition de cette variable permet de s'assurer que toutes les ressources, comme votre cluster GKE, sont créées dans le projet approprié.CLUSTER_NAME: nom de votre cluster GKE, par exempleagent-sandbox-cluster.GKE_LOCATION: région dans laquelle votre cluster GKE et votre dépôt Artifact Registry seront créés, par exempleus-central1. Google Cloud Nous vous recommandons de les colocaliser, car cela réduit la latence d'extraction des images.AGENT_SANDBOX_VERSION: version du contrôleur Agent Sandbox à déployer sur votre cluster.NODE_POOL_NAME: nom du pool de nœuds qui exécutera les charges de travail en bac à sable, par exempleagent-sandbox-node-pool.MACHINE_TYPE: type de machine des nœuds de votre pool de nœuds, par exemplee2-standard-2. Pour en savoir plus sur les différentes séries de machines et sur le choix entre différentes options, consultez le Guide des ressources de familles de machines et guide comparatif.
Déployer Agent Sandbox
Maintenant que votre Google Cloud projet et votre environnement Cloud Shell sont configurés, vous êtes prêt à provisionner l'infrastructure nécessaire et à déployer Agent Sandbox.
Créer un cluster GKE
Vous allez maintenant créer un cluster GKE avec gVisor activé. Ce cluster fournit l'environnement Kubernetes dans lequel vous allez déployer et exécuter le contrôleur Agent Sandbox et l'exemple d'application en bac à sable. gVisor fournit la technologie de bac à sable pour exécuter du code non fiable en toute sécurité.
Vous pouvez créer un cluster Autopilot ou Standard. Autopilot active gVisor automatiquement, tandis que les clusters Standard vous obligent à créer manuellement un pool de nœuds compatible avec gVisor :
Autopilot
Pour créer un cluster Autopilot à l'aide de gcloud CLI, exécutez la commande suivante :
gcloud container clusters create-auto ${CLUSTER_NAME} \
--location=${GKE_LOCATION} \
--project=${PROJECT_ID}
Standard
Pour créer un cluster Standard à l'aide de gcloud CLI, procédez comme suit :
Créez le cluster :
gcloud container clusters create ${CLUSTER_NAME} \ --location=${GKE_LOCATION}Créez un pool de nœuds distinct avec gVisor activé :
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
Récupérez les identifiants du cluster afin que l'CLI kubectl puisse se connecter au cluster. Cette commande met à jour votre fichier de configuration Kubernetes, qui est stocké par défaut dans le répertoire ~/.kube/config. Ce fichier de configuration contient les identifiants dont kubectl a besoin pour interagir avec votre cluster GKE :
gcloud container clusters get-credentials ${CLUSTER_NAME} \
--location=${GKE_LOCATION}
Déployer le contrôleur Agent Sandbox sur votre cluster
Vous pouvez déployer le contrôleur Agent Sandbox et ses composants requis en appliquant les fichiers manifestes de la version officielle à votre cluster. Ces fichiers manifestes sont des fichiers de configuration qui demandent à Kubernetes de télécharger tous les composants nécessaires au déploiement et à l'exécution du contrôleur Agent Sandbox sur votre cluster.
Exécutez les commandes suivantes pour déployer le contrôleur Agent Sandbox sur votre 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.yaml
Vérifier le contrôleur Agent Sandbox
Après avoir appliqué les fichiers manifestes, vérifiez que le pod du contrôleur Agent Sandbox s'exécute correctement dans l'espace de noms agent-sandbox-system :
kubectl get pods -n agent-sandbox-system
Attendez que le pod affiche "Running" dans la colonne STATUS et "1/1" dans la colonne READY. Lorsque le pod s'exécute correctement, la sortie ressemble à ceci :
NAME READY STATUS RESTARTS AGE
agent-sandbox-controller-0 1/1 Running 0 44d
Maintenant que le contrôleur Agent Sandbox est en cours d'exécution, il peut créer et gérer automatiquement des environnements en bac à sable pour toutes les ressources Sandbox que vous créez dans votre cluster.
Déployer un environnement en bac à sable
Maintenant que le contrôleur Agent Sandbox est en cours d'exécution dans votre cluster GKE, vous devez déployer les composants de l'exemple d'environnement en bac à sable. Cette section vous explique comment créer le plan de bac à sable (SandboxTemplate), déployer le routeur réseau nécessaire et installer le client Python que vous utiliserez pour interagir avec le bac à sable.
La méthode recommandée pour créer et interagir avec votre bac à sable consiste à utiliser le client Python Agentic Sandbox. Ce client fournit une interface qui simplifie l'ensemble du cycle de vie d'un bac à sable, de la création au nettoyage. Il s'agit d'une bibliothèque Python que vous pouvez utiliser pour créer, utiliser et supprimer des bacs à sable par programmation.
Le client utilise un routeur de bac à sable comme point d'entrée central pour tout le trafic. Dans l'exemple décrit dans ce document, le client crée un tunnel vers ce routeur à l'aide de la commande kubectl port-forward, de sorte que vous n'avez pas besoin d'exposer d'adresses IP publiques. Sachez que l'utilisation de kubectl port-forward n'est pas une solution sécurisée et que son utilisation doit être limitée aux environnements de développement.
Créer un SandboxTemplate et un SandboxWarmPool
Vous allez maintenant définir la configuration de votre bac à sable en créant une ressource SandboxTemplate et une ressource SandboxWarmPool. SandboxTemplate sert de plan réutilisable que le contrôleur Agent Sandbox utilise pour créer des environnements en bac à sable cohérents et préconfigurés. La ressource SandboxWarmPool garantit qu'un nombre spécifié de pods pré-chauffés sont toujours en cours d'exécution et prêts à être revendiqués. Un bac à sable pré-chauffé est un pod en cours d'exécution qui est déjà initialisé. Cette pré-initialisation permet de créer de nouveaux bacs à sable en moins d'une seconde et évite la latence de démarrage du lancement d'un bac à sable normal :
Dans Cloud Shell, créez un fichier nommé
sandbox-template-and-pool.yamlavec le contenu suivant :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-templateAppliquez le fichier manifeste
SandboxTemplateetSandboxWarmPool:kubectl apply -f sandbox-template-and-pool.yaml
Déployer le routeur de bac à sable
Le client Python que vous utiliserez pour créer et interagir avec des environnements en bac à sable utilise un composant appelé routeur de bac à sable pour communiquer avec les bacs à sable.
Pour cet exemple, vous utilisez le mode développeur du client à des fins de test. Ce mode est destiné au développement local et utilise la commande kubectl port-forward pour établir un tunnel direct entre votre machine locale et le service de routeur de bac à sable en cours d'exécution dans le cluster. Cette approche de tunneling évite d'avoir besoin d'une adresse IP publique ou d'une configuration d'entrée complexe, et simplifie l'interaction avec les bacs à sable depuis votre environnement local.
Pour déployer le routeur de bac à sable, procédez comme suit :
Dans Cloud Shell, créez un fichier nommé
sandbox-router.yamlavec le contenu suivant :# 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: 1000Appliquez le fichier manifeste pour déployer le routeur sur votre cluster :
kubectl apply -f sandbox-router.yaml
Installer le client Python
Maintenant que les composants du cluster, tels que le routeur de bac à sable, sont déployés, la dernière étape préparatoire consiste à installer le client Python Agentic Sandbox sur votre machine locale. Rappelons que ce client est une bibliothèque Python qui vous permet de créer, d'utiliser et de supprimer des bacs à sable par programmation. Vous l'utiliserez dans la section suivante pour tester l'environnement :
Créez et activez un environnement virtuel Python :
python3 -m venv .venv source .venv/bin/activateInstallez le package client :
pip install k8s_agent_sandbox
Tester le bac à sable
Une fois tous les composants de configuration en place, vous pouvez créer un bac à sable et interagir avec lui à l'aide du client Python Agentic Sandbox.
Dans votre répertoire
agent-sandbox, créez un script Python nommétest_sandbox.pyavec le contenu suivant :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 )Depuis votre terminal (avec l'environnement virtuel toujours actif), exécutez le script de test :
python3 test_sandbox.py
Le message "Hello from the sandboxed environment!" (Bonjour depuis l'environnement en bac à sable !) doit s'afficher. Il s'agit de la sortie du bac à sable.
Félicitations ! Vous avez exécuté une commande shell dans un bac à sable sécurisé. À l'aide de la méthode sandbox.run(), vous pouvez exécuter n'importe quelle commande shell. Agent Sandbox exécute la commande dans une barrière sécurisée qui protège les nœuds de votre cluster et les autres charges de travail du code non fiable. Cela fournit un moyen sûr et fiable pour un agent d'IA ou tout workflow automatisé d'exécuter des tâches.
Lorsque vous exécutez le script, SandboxClient gère toutes les étapes pour vous. Il crée la ressource SandboxClaim pour démarrer le bac à sable, attend qu'il soit prêt, puis utilise la méthode sandbox.run() pour exécuter des commandes shell bash dans le conteneur sécurisé. Le client capture et imprime ensuite le stdout de cette commande. Le bac à sable est automatiquement supprimé après l'exécution du programme.
Lorsqu'une ressource SandboxClaim est créée, un pod disponible est attribué de
le pool chaud à l'objet Sandbox, et la revendication est marquée comme prête. Le
SandboxWarmPool se remplit ensuite automatiquement pour maintenir le
nombre de répliques configuré.
Pour vérifier si un bac à sable spécifique est revendiqué ou disponible, vérifiez les
ownerReferences dans les métadonnées du pod de bac à sable. Si la valeur du champ kind
est Sandbox, le pod est en cours d'utilisation. Si la valeur du champ kind est
SandboxWarmPool, le pod est inactif et en attente d'être revendiqué.
Effectuer un nettoyage des ressources
Pour éviter que des frais ne soient facturés sur votre Google Cloud compte, vous devez supprimer le cluster GKE que vous avez créé :
gcloud container clusters delete $CLUSTER_NAME --location=$GKE_LOCATION --quiet
Étape suivante
- Découvrez comment enregistrer et restaurer des environnements Agent Sandbox avec des instantanés de pods.
- En savoir plus sur le projet Open Source Agent Sandbox sur GitHub.
- Pour comprendre la technologie sous-jacente qui assure l'isolation de la sécurité de vos charges de travail, consultez GKE Sandbox.
- Pour en savoir plus sur l'amélioration de la sécurité de vos clusters et charges de travail, consultez la page Présentation de la sécurité dans GKE.