Neste documento, fornecemos instruções para instalar e executar o controlador do sandbox do agente em um cluster do Google Kubernetes Engine (GKE). Ela também explica como implantar um ambiente de sandbox no cluster em que você pode testar comandos de shell não confiáveis.
O controlador do sandbox do agente fornece um framework para criar e gerenciar ambientes de execução efêmeros. Essa abordagem permite definir um modelo para o ambiente do app e criar instâncias dele sob demanda.
O sandbox do agente oferece um ambiente seguro e isolado para executar códigos não confiáveis, como os gerados por modelos de linguagem grandes (LLMs). Executar esse tipo de código diretamente em um cluster representa riscos de segurança, porque um código não confiável pode acessar ou interferir em outros apps ou no próprio nó do cluster.
O sandbox do agente mitiga esses riscos fornecendo um forte isolamento de processo, armazenamento e rede para o código que ele executa. Esse isolamento é alcançado usando o gVisor, uma tecnologia que cria uma barreira segura entre o aplicativo e o sistema operacional do nó do cluster. Outras tecnologias de isolamento, como os contêineres Kata, podem ser usadas. No entanto, o exemplo neste documento usa apenas o gVisor.
Este documento fornece instruções para executar a caixa de simulação do agente em um cluster do GKE Autopilot ou Standard.
O Agent Sandbox é um projeto de código aberto. Para mais informações sobre como contribuir com o projeto ou encontrar detalhes técnicos mais detalhados, consulte o projeto de código aberto do sandbox do agente.
Custos
Seguir as etapas deste documento gera cobranças na sua conta do Google Cloud. Os custos começam quando você cria um cluster do GKE. Esses custos incluem cobranças por cluster do GKE, conforme descrito na página de preços, e cobranças pela execução de VMs do Compute Engine.
Para evitar cobranças desnecessárias, desative o GKE ou exclua o projeto depois de concluir este documento.
Antes de começar
-
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.
Definir variáveis de ambiente
Para simplificar os comandos executados neste documento, defina variáveis de ambiente no Cloud Shell. No Cloud Shell, defina as seguintes variáveis de ambiente úteis executando os comandos abaixo:
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"Confira uma explicação dessas variáveis de ambiente:
PROJECT_ID: o ID do seu projeto Google Cloud atual. Definir essa variável ajuda a garantir que todos os recursos, como seu cluster do GKE, sejam criados no projeto correto.CLUSTER_NAME: o nome do cluster do GKE. Por exemplo,agent-sandbox-cluster.GKE_LOCATION: a Google Cloud região em que o cluster do GKE e o repositório do Artifact Registry serão criados, por exemplo,us-central1. Recomendamos a colocação conjunta porque isso reduz a latência de extração de imagens.AGENT_SANDBOX_VERSION: a versão do controlador do Agent Sandbox a ser implantada no cluster.NODE_POOL_NAME: o nome do pool de nós que vai executar cargas de trabalho em sandbox, por exemplo,agent-sandbox-node-pool.MACHINE_TYPE: o tipo de máquina dos nós no pool de nós. Por exemplo,e2-standard-2. Para detalhes sobre diferentes séries de máquinas e como escolher entre diferentes opções, consulte o Guia de comparação e recursos para famílias de máquinas.PYTHON_CLIENT_VERSION: a versão do cliente Python do Agentic Sandbox a ser instalada.
Implantar o sandbox do agente
Agora que você configurou o projeto Google Cloud e o ambiente do Cloud Shell, está tudo pronto para provisionar a infraestrutura necessária e implantar o Agent Sandbox.
Criar um cluster do GKE
Em seguida, crie um cluster do GKE com o gVisor ativado. Esse cluster fornece o ambiente do Kubernetes em que você vai implantar e executar o controlador do sandbox do agente e o app de exemplo em sandbox. O gVisor fornece a tecnologia de sandbox para executar código não confiável com segurança.
É possível criar um cluster do Autopilot ou Standard. O Autopilot ativa o gVisor automaticamente, enquanto os clusters Standard exigem que você crie um pool de nós ativado para gVisor manualmente:
Piloto automático
Para criar um cluster do Autopilot usando a CLI gcloud, execute o seguinte comando:
gcloud container clusters create-auto ${CLUSTER_NAME} \ --location=${GKE_LOCATION} \ --project=${PROJECT_ID}Padrão
Para criar um cluster padrão usando a gcloud CLI, siga estas etapas:
Crie o cluster:
gcloud container clusters create ${CLUSTER_NAME} \ --location=${GKE_LOCATION}Crie um pool de nós separado com o gVisor ativado:
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
Recupere as credenciais do cluster para que a CLI
kubectlpossa se conectar a ele. Esse comando atualiza o arquivo de configuração do Kubernetes, que é armazenado por padrão no diretório~/.kube/config. Esse arquivo de configuração contém as credenciais necessárias para que okubectlinteraja com o cluster do GKE:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --location=${GKE_LOCATION}Implante o controlador do Agent Sandbox no cluster
Implante o controlador do Sandbox do agente e os componentes necessários aplicando os manifestos de lançamento oficiais ao cluster. Esses manifestos são arquivos de configuração que instruem o Kubernetes a baixar todos os componentes necessários para implantar e executar o controlador do Agent Sandbox no cluster.
Execute os comandos a seguir para implantar o controlador do sandbox do agente no cluster do 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.yamlVerificar o controlador do sandbox do agente
Depois de aplicar os manifestos, verifique se o pod do controlador do Agent Sandbox está sendo executado corretamente no namespace
agent-sandbox-system:kubectl get pods -n agent-sandbox-systemAguarde até que o pod mostre "Running" na coluna STATUS e "1/1" na coluna READY. Quando o pod estiver em execução corretamente, a saída será semelhante a esta:
NAME READY STATUS RESTARTS AGE agent-sandbox-controller-0 1/1 Running 0 44dAgora que o controlador do sandbox do agente está em execução, ele pode criar e gerenciar automaticamente ambientes em sandbox para qualquer recurso
Sandboxque você criar no cluster.Implantar um ambiente em sandbox
Agora que o controlador do Agent Sandbox está em execução no seu cluster do GKE, é necessário implantar os componentes do ambiente de sandbox de exemplo. Nesta seção, mostramos como criar o blueprint do sandbox (
SandboxTemplate), implantar o roteador de rede necessário e instalar o cliente Python que você vai usar para interagir com o sandbox.A maneira recomendada de criar e interagir com sua sandbox é usando o cliente Python da sandbox de agente. Esse cliente fornece uma interface que simplifica todo o ciclo de vida de uma sandbox, desde a criação até a limpeza. É uma biblioteca Python que pode ser usada para criar, usar e excluir sandboxes de forma programática.
O cliente usa um roteador de sandbox como ponto de entrada central para todo o tráfego. No exemplo descrito neste documento, o cliente cria um túnel para esse roteador usando o comando
kubectl port-forward. Assim, não é necessário expor nenhum endereço IP público. O uso dekubectl port-forwardnão é uma solução segura e deve ser limitado a ambientes de desenvolvimento.Criar um
SandboxTemplatee umSandboxWarmPoolAgora, defina a configuração da sua sandbox criando um recurso
SandboxTemplateeSandboxWarmPool. OSandboxTemplatefunciona como um blueprint reutilizável que o controlador do sandbox do agente usa para criar ambientes de sandbox consistentes e pré-configurados. O recursoSandboxWarmPoolgarante que um número especificado de pods preaquecidos esteja sempre em execução e pronto para ser reivindicado. Um sandbox pré-aquecido é um pod em execução que já foi inicializado. Essa pré-inicialização permite que novas caixas de areia sejam criadas em menos de um segundo e evita a latência de inicialização de uma caixa de areia comum:No Cloud Shell, crie um arquivo chamado
sandbox-template-and-pool.yamlcom o seguinte conteúdo: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-templateAplique os manifestos
SandboxTemplateeSandboxWarmPool:kubectl apply -f sandbox-template-and-pool.yaml
Implante o roteador do sandbox
O cliente Python que você vai usar para criar e interagir com ambientes em sandbox usa um componente chamado roteador de sandbox para se comunicar com os sandboxes.
Neste exemplo, você vai usar o modo de desenvolvedor do cliente para testes. Esse modo é destinado ao desenvolvimento local e usa o comando
kubectl port-forwardpara estabelecer um túnel direto da máquina local para o serviço Sandbox Router em execução no cluster. Essa abordagem de tunelamento evita a necessidade de um endereço IP público ou uma configuração de entrada complexa e simplifica a interação com sandboxes do seu ambiente local.Siga estas etapas para implantar o roteador de sandbox:
No Cloud Shell, crie um arquivo chamado
sandbox-router.yamlcom o seguinte conteúdo:# 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: 1000Aplique o manifesto para implantar o roteador no cluster:
kubectl apply -f sandbox-router.yaml
Instalar o cliente Python
Agora que os componentes no cluster, como o roteador do Sandbox, foram implantados, a etapa preparatória final é instalar o cliente Python do Sandbox de agente na sua máquina local. Lembre-se de que esse cliente é uma biblioteca Python que permite criar, usar e excluir sandboxes de maneira programática. Você vai usá-lo na próxima seção para testar o ambiente:
Crie e ative um ambiente virtual Python:
python3 -m venv .venv source .venv/bin/activateInstale o pacote de cliente do repositório
agent-sandbox:pip install "git+https://github.com/kubernetes-sigs/agent-sandbox.git@${PYTHON_CLIENT_VERSION}#subdirectory=clients/python/agentic-sandbox-client"
Testar o sandbox
Com todos os componentes de configuração no lugar, agora você pode criar e interagir com um sandbox usando o cliente Python do sandbox de agente.
No diretório
agent-sandbox, crie um script Python chamadotest_sandbox.pycom o seguinte conteúdo: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 )No terminal (com o ambiente virtual ainda ativo), execute o script de teste:
python3 test_sandbox.py
Você vai ver a mensagem "Hello from the sandboxed environment!", que é a saída da sandbox.
Parabéns! Você executou um comando shell em um sandbox seguro. Usando o método
sandbox.run(), é possível executar qualquer comando do shell, e o sandbox do agente executa o comando em uma barreira segura que protege os nós do cluster e outras cargas de trabalho contra código não confiável. Isso oferece uma maneira segura e confiável para um agente de IA ou qualquer fluxo de trabalho automatizado executar tarefas.Quando você executa o script, o
SandboxClientprocessa todas as etapas. Ele cria o recursoSandboxClaimpara iniciar o sandbox, aguarda que ele fique pronto e usa o métodosandbox.run()para executar comandos do shell bash dentro do contêiner seguro. Em seguida, o cliente captura e imprime ostdoutdesse comando. O sandbox é excluído automaticamente após a execução do programa.Limpar recursos
Para evitar cobranças na sua conta do Google Cloud , exclua o cluster do GKE que você criou:
gcloud container clusters delete $CLUSTER_NAME --location=$GKE_LOCATION --quietA seguir
- Saiba mais sobre o projeto de código aberto do Agent Sandbox no GitHub.
- Para entender a tecnologia subjacente que fornece isolamento de segurança para suas cargas de trabalho, consulte GKE Sandbox.
- Para mais informações sobre como aumentar a segurança dos clusters e cargas de trabalho, consulte Visão geral da segurança do GKE.