En este documento, se explica cómo habilitar la función Agent Sandbox en un clúster de Google Kubernetes Engine (GKE). También se explica cómo crear un entorno de zona de pruebas en el clúster para ejecutar de forma segura código que no es de confianza.
Para obtener una descripción general de cómo la función Agent Sandbox aísla el código no confiable generado por IA, consulta Acerca de GKE Agent Sandbox.
Costos
Agent Sandbox se ofrece sin cargo adicional en GKE. Los precios de GKE se aplican a los recursos que creas.
Para evitar cargos innecesarios, asegúrate de inhabilitar GKE o borrar el proyecto después de completar este documento.
Antes de comenzar
-
En la consola de Cloud de Confiance , en la página del selector de proyectos, selecciona o crea un proyecto de Cloud de Confiance .
Roles necesarios para seleccionar o crear un proyecto
- Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
-
Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (
roles/resourcemanager.projectCreator), que contiene el permisoresourcemanager.projects.create. Obtén más información para otorgar roles.
-
Verifica que la facturación esté habilitada para tu proyecto de Cloud de Confiance .
Habilita las APIs de Artifact Registry y Google Kubernetes Engine.
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (
roles/serviceusage.serviceUsageAdmin), que contiene el permisoserviceusage.services.enable. Obtén más información para otorgar roles.-
En la consola de Cloud de Confiance , activa Cloud Shell.
- Asegúrate de que tu clúster ejecute la versión 1.35.2-gke.1269000 de GKE o una posterior.
Define las variables de entorno
Para simplificar los comandos que ejecutas en este documento, puedes configurar variables de entorno en Cloud Shell. En Cloud Shell, define las siguientes variables de entorno útiles ejecutando los siguientes comandos:
export PROJECT_ID=$(gcloud config get project)
export CLUSTER_NAME="agent-sandbox-cluster"
export LOCATION="us-central1"
export CLUSTER_VERSION="1.35.2-gke.1269000"
export NODE_POOL_NAME="agent-sandbox-pool"
export MACHINE_TYPE="e2-standard-2"
A continuación, se explica cada una de estas variables de entorno:
PROJECT_ID: Es el ID de tu proyecto Cloud de Confiance by S3NS actual. Definir esta variable ayuda a garantizar que todos los recursos, como tu clúster de GKE, se creen en el proyecto correcto.CLUSTER_NAME: Es el nombre de tu clúster de GKE, por ejemplo,agent-sandbox-cluster.LOCATION: La Cloud de Confiance by S3NS región o zona en la que se creó tu clúster de GKE. Establece este parámetro en la región (por ejemplo,us-central1) si creas un clúster de Autopilot o en la zona (por ejemplo,us-central1-a) si creas un clúster estándar.CLUSTER_VERSION: La versión de GKE que ejecutará tu clúster. La función Agent Sandbox requiere la versión 1.35.2-gke.1269000 o posterior.NODE_POOL_NAME: Es el nombre del grupo de nodos que ejecutará cargas de trabajo en zona de pruebas, por ejemplo,agent-sandbox-pool. Esta variable solo es obligatoria si creas un clúster de GKE estándar.MACHINE_TYPE: Es el tipo de máquina de los nodos en tu grupo de nodos; por ejemplo,e2-standard-2. Para obtener detalles sobre las diferentes series de máquinas y elegir entre diferentes opciones, consulta la guía de comparación y recursos de familias de máquinas. Esta variable solo es obligatoria si creas un clúster de GKE Standard.
Habilita la zona de pruebas del agente
Puedes habilitar la función Agent Sandbox cuando creas un clúster nuevo o cuando actualizas uno existente.
Habilita Agent Sandbox cuando crees un clúster de GKE nuevo
Te recomendamos que uses un clúster de Autopilot para una experiencia de Kubernetes completamente administrada. Para elegir el modo de operación de GKE que se adapte mejor a tus cargas de trabajo, consulta Elige un modo de operación de GKE.
Autopilot
Para crear un clúster de GKE Autopilot nuevo con Agent Sandbox habilitado, incluye la marca --enable-agent-sandbox:
gcloud beta container clusters create-auto ${CLUSTER_NAME} \
--location=${LOCATION} \
--cluster-version=${CLUSTER_VERSION} \
--enable-agent-sandbox
En el caso de un clúster de Autopilot, asegúrate de que la variable de entorno LOCATION esté configurada en una región (por ejemplo, us-central1).
Estándar
Para crear un clúster nuevo de GKE Standard con Agent Sandbox habilitado, debes crear el clúster, agregar un grupo de nodos con gVisor habilitado y, luego, habilitar la función de Agent Sandbox. Para ahorrar costos, te recomendamos que crees un clúster zonal con un solo nodo por grupo:
Crea el clúster:
gcloud beta container clusters create ${CLUSTER_NAME} \ --location=${LOCATION} \ --num-nodes=1 \ --cluster-version=${CLUSTER_VERSION}Para este clúster estándar, asegúrate de que la variable de entorno
LOCATIONesté configurada en una zona (por ejemplo,us-central1-a).Crea un grupo de nodos separado con gVisor habilitado:
gcloud container node-pools create ${NODE_POOL_NAME} \ --cluster=${CLUSTER_NAME} \ --machine-type=${MACHINE_TYPE} \ --location=${LOCATION} \ --num-nodes=1 \ --image-type=cos_containerd \ --sandbox=type=gvisorEl
LOCATIONdebe ser la misma zona que usaste cuando creaste el clúster.Actualiza el clúster para habilitar la función de Agent Sandbox:
gcloud beta container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-agent-sandbox
Habilita Agent Sandbox cuando actualices un clúster de GKE existente
Para habilitar Agent Sandbox en un clúster existente, el clúster debe ejecutar la versión 1.35.2-gke.1269000 o una posterior.
Asegúrate de que tu variable de entorno LOCATION esté configurada en la región o zona en la que se encuentra tu clúster existente.
Si usas un clúster de GKE Standard, Agent Sandbox depende de gVisor. Si tu clúster estándar no tiene un grupo de nodos habilitado para gVisor, primero debes crear uno:
gcloud container node-pools create ${NODE_POOL_NAME} \ --cluster=${CLUSTER_NAME} \ --machine-type=${MACHINE_TYPE} \ --location=${LOCATION} \ --image-type=cos_containerd \ --sandbox=type=gvisorActualiza el clúster para habilitar la función de Agent Sandbox:
gcloud beta container clusters update ${CLUSTER_NAME} \ --location=${LOCATION} \ --enable-agent-sandbox
Verifica la configuración
Para verificar si la función Agent Sandbox está habilitada, inspecciona la descripción del clúster.
gcloud beta container clusters describe ${CLUSTER_NAME} \
--location=${LOCATION} \
--format="value(addonsConfig.agentSandboxConfig.enabled)"
Si creaste un clúster de Autopilot, la ubicación es la región (por ejemplo, us-central1). Si creaste un clúster estándar, la ubicación es la zona (por ejemplo, us-central1-a).
Si la función se habilita correctamente, el comando devuelve True.
Requisitos de implementación de la zona de pruebas del agente
Para implementar correctamente una carga de trabajo, como Sandbox o SandboxTemplate, tu manifiesto YAML debe incluir parámetros de configuración y seguridad específicos.
GKE aplica estos requisitos con una política de admisión de validación (VAP). Si no se cumplen estos requisitos, el controlador de admisión rechaza la implementación.
Configuración obligatoria
Tu manifiesto de implementación debe incluir los siguientes parámetros de configuración:
runtimeClassName: gvisor: Garantiza que el Pod se ejecute en una zona de pruebas de gVisor.automountServiceAccountToken: false: Evita que el Pod active automáticamente el token de la cuenta de servicio predeterminada.securityContext.runAsNonRoot: true: Garantiza que el contenedor no se ejecute como usuario raíz.securityContext.capabilities.drop: ["ALL"]: Descarta todas las capacidades de Linux del contenedor.resources.limits: Debes especificar límites de CPU y memoria para evitar posibles situaciones de denegación de servicio (DoS).nodeSelector: Debe segmentarse parasandbox.gke.io/runtime: gvisor.tolerations: Debe incluir una tolerancia para el taintsandbox.gke.io/runtime=gvisor:NoSchedule.
Configuración prohibida
Tu manifiesto de implementación no debe incluir ninguno de los siguientes elementos:
hostNetwork: true,hostPID: trueohostIPC: trueprivileged: trueen contextos de seguridad de contenedores.HostPathvolúmenes- Se agregaron capacidades (
capabilities.add). - Configuración de
hostPort. - Sysctls personalizados
- Son los volúmenes proyectados para los tokens o certificados de cuentas de servicio.
Implementa un entorno de zona de pruebas
Recomendamos implementar un entorno de zona de pruebas definiendo un SandboxTemplate y manteniendo listas las instancias precalentadas con un SandboxWarmPool. Luego, puedes solicitar una instancia de este grupo de nodos preparado con un SandboxClaim. Como alternativa, puedes crear un entorno de pruebas directamente, pero este enfoque no admite grupos de instancias en espera.
SandboxTemplate, SandboxWarmPool, SandboxClaim y Sandbox son recursos personalizados de Kubernetes.
Recomendación: Crea un SandboxTemplate y un SandboxWarmPool
SandboxTemplate actúa como un plano reutilizable. SandboxWarmPool ayuda a garantizar que siempre se ejecute una cantidad especificada de Pods precalentados y listos para reclamarse. El uso de este recurso personalizado minimiza la latencia de inicio.
Para implementar un entorno de zona de pruebas creando SandboxTemplate y SandboxWarmPool, completa los siguientes pasos:
En Cloud Shell, crea un archivo llamado
sandbox-template.yamlcon el siguiente contenido:apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxTemplate metadata: name: python-runtime-template namespace: default spec: podTemplate: metadata: labels: sandbox-type: python-runtime spec: runtimeClassName: gvisor # Required automountServiceAccountToken: false # Required securityContext: runAsNonRoot: true # Required nodeSelector: sandbox.gke.io/runtime: gvisor # Required tolerations: - key: "sandbox.gke.io/runtime" value: "gvisor" effect: "NoSchedule" # Required containers: - name: runtime image: registry.k8s.io/agent-sandbox/python-runtime-sandbox:v0.1.0 ports: - containerPort: 8888 resources: requests: cpu: "250m" memory: "512Mi" limits: cpu: "500m" memory: "1Gi" # Required securityContext: capabilities: drop: ["ALL"] # Required restartPolicy: OnFailureAplica el manifiesto
SandboxTemplate:kubectl apply -f sandbox-template.yamlCrea un archivo llamado
sandbox-warmpool.yamlcon el siguiente contenido:apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxWarmPool metadata: name: python-runtime-warmpool namespace: default labels: app: python-runtime-warmpool spec: replicas: 2 sandboxTemplateRef: # This must match the name of the SandboxTemplate. name: python-runtime-templateAplica el manifiesto
SandboxWarmPool:kubectl apply -f sandbox-warmpool.yaml
Crea un objeto SandboxClaim
SandboxClaim solicita una zona de pruebas a partir de la plantilla. Como creaste un grupo de zonas de pruebas activas, la zona de pruebas creada adopta un Pod en ejecución del grupo en lugar de iniciar un Pod nuevo.
Para solicitar un entorno de pruebas a partir de la plantilla creando un SandboxClaim, completa los siguientes pasos:
Crea un archivo llamado
sandbox-claim.yamlcon el siguiente contenido:apiVersion: extensions.agents.x-k8s.io/v1alpha1 kind: SandboxClaim metadata: name: sandbox-claim namespace: default spec: sandboxTemplateRef: # This must match the name of the SandboxTemplate. name: python-runtime-templateAplica el manifiesto
SandboxClaim:kubectl apply -f sandbox-claim.yamlVerifica que el entorno de pruebas, el reclamo y el grupo de instancias en espera estén listos:
kubectl get sandboxwarmpool,sandboxclaim,sandbox,pod
Alternativa: Crea una zona de pruebas directamente
Si no necesitas los tiempos de inicio rápidos que proporcionan los grupos de instancias activas, puedes implementar una zona de pruebas directamente sin usar plantillas.
Para implementar un entorno de zona de pruebas creando una zona de pruebas directamente, completa los siguientes pasos:
Crea un archivo llamado
sandbox.yamlcon el siguiente contenido:apiVersion: agents.x-k8s.io/v1alpha1 kind: Sandbox metadata: name: sandbox-example-2 spec: replicas: 1 podTemplate: metadata: labels: sandbox: sandbox-example spec: runtimeClassName: gvisor restartPolicy: Always automountServiceAccountToken: false # Required securityContext: runAsNonRoot: true # Required runAsUser: 1000 # Required if image defaults to root (e.g. busybox) nodeSelector: sandbox.gke.io/runtime: gvisor tolerations: - key: "sandbox.gke.io/runtime" value: "gvisor" effect: "NoSchedule" # Required containers: - name: my-container image: busybox command: ["/bin/sh", "-c"] args: ["sleep 3600000; echo 'Container finished successfully'; exit 0"] securityContext: capabilities: drop: ["ALL"] # Required allowPrivilegeEscalation: false resources: limits: cpu: "100m" memory: "128Mi" # RequiredAplica el manifiesto
Sandbox:kubectl apply -f sandbox.yamlVerifica que el sandbox se esté ejecutando:
kubectl get sandbox
Inhabilita la zona de pruebas del agente
Para inhabilitar la función de Agent Sandbox, usa el comando gcloud beta container clusters update con la marca --no-enable-agent-sandbox.
gcloud beta container clusters update ${CLUSTER_NAME} \
--location=${LOCATION} \
--no-enable-agent-sandbox
Si creaste un clúster de Autopilot, la ubicación es la región (por ejemplo, us-central1). Si creaste un clúster estándar, la ubicación es la zona (por ejemplo, us-central1-a).
Limpia los recursos
Para evitar que se apliquen cargos a tu cuenta de Cloud de Confiance by S3NS , borra el clúster de GKE que creaste.
gcloud container clusters delete $CLUSTER_NAME \
--location=${LOCATION} \
--quiet
Si creaste un clúster de Autopilot, la ubicación es la región (por ejemplo, us-central1). Si creaste un clúster estándar, la ubicación es la zona (por ejemplo, us-central1-a).
¿Qué sigue?
- Obtén más información para guardar y restablecer entornos de la zona de pruebas del agente con instantáneas de Pods.
- Obtén información sobre la tecnología subyacente que usa Agent Sandbox.
- Obtén más información sobre la seguridad de GKE.
- Explora el proyecto de código abierto de Agent Sandbox en GitHub.
- Obtén más información para usar Kata Containers de código abierto con Agent Sandbox. Kata Containers no es un producto de Cloud de Confiance . Si instalas y usas este software, serás responsable de la administración y la solución de problemas. La asistencia y los ANS de Google no se aplican a Kata Containers.