Die Google Kubernetes Engine (GKE) Agent Sandbox bietet mit gVisor eine Isolation auf Kernelebene für nicht vertrauenswürdigen, modellgenerierten Code. Durch die Kombination von GKE Agent Sandbox mit Filestore-Agenten-Volumes können Sie sichere, isolierte Umgebungen bereitstellen, die durch persistenten, hochdichten Dateispeicher unterstützt werden.
In dieser Anleitung wird gezeigt, wie Sie einen gVisor-fähigen Knotenpool konfigurieren, ein SandboxTemplate mit Filestore-Volume-Claim-Vorlagen definieren, Sandboxes mit SandboxWarmPool vorab aufwärmen und Sandboxes mit SandboxClaim beanspruchen.
Hinweis
Führen Sie die Cluster- und CSI-Treiberkonfiguration unter GKE-Umgebung für Filestore-Agent-Volumes einrichten aus.
gVisor-fähigen Knotenpool erstellen
Erstellen Sie einen dedizierten Knotenpool, der mit der gVisor-Sandbox-Isolierung konfiguriert ist:
gcloud container node-pools create gvisor-pool \
--cluster=CLUSTER_NAME \
--location=REGION \
--project=PROJECT_ID \
--image-type=cos_containerd \
--sandbox=type=gvisor \
--num-nodes=2 \
--machine-type=n2-standard-16 \
--enable-autoscaling \
--min-nodes=1 \
--max-nodes=10 \
--scopes=cloud-platform
Ersetzen Sie Folgendes:
CLUSTER_NAME: Name Ihres GKE-Clusters.REGION: Die Region, in der sich der Cluster befindet.PROJECT_ID: Projekt-ID in Google Cloud .
SandboxTemplate erstellen
Definieren Sie ein SandboxTemplate-Manifest mit dem Namen warmpool-filestore-template.yaml.
Die Vorlage konfiguriert gVisor-Laufzeiteinstellungen, Sicherheitskontexte ohne Root-Berechtigungen und einen volumeClaimTemplates-Block, der auf die volume-pool-sc StorageClass ausgerichtet ist:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxTemplate
metadata:
name: warmpool-filestore-template
namespace: default
spec:
podTemplate:
spec:
runtimeClassName: gvisor
automountServiceAccountToken: false
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
nodeSelector:
sandbox.gke.io/runtime: gvisor
tolerations:
- key: "sandbox.gke.io/runtime"
value: "gvisor"
effect: "NoSchedule"
containers:
- name: agent-container
image: busybox
command: ["/bin/sh", "-c"]
args:
- |
echo "Sandbox started with Filestore volume mounted!"
ls -la /workspace
date > /workspace/session-init.txt
cat /workspace/session-init.txt
sleep 3600
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
volumeMounts:
- name: agent-workspace
mountPath: /workspace
volumeClaimTemplates:
- metadata:
name: agent-workspace
spec:
accessModes: ["ReadWriteMany"]
storageClassName: "volume-pool-sc"
resources:
requests:
storage: "1Gi"
Wenden Sie das Manifest an:
kubectl apply -f warmpool-filestore-template.yaml
SandboxWarmPool erstellen
Um die Startlatenz der Sandbox zu minimieren, definieren Sie ein SandboxWarmPool-Manifest mit dem Namen sandbox-warmpool.yaml, in dem vorbereitete Pod-Instanzen verwaltet werden:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
name: filestore-warmpool
namespace: default
spec:
replicas: 3
sandboxTemplateRef:
name: warmpool-filestore-template
Wenden Sie das Manifest an:
kubectl apply -f sandbox-warmpool.yaml
Prüfen Sie, ob die Pods des Warmpools bereit sind:
kubectl get sandboxwarmpool filestore-warmpool -n default
Sandbox-Pod anfordern
Wenn eine Agentensitzung beginnt, senden Sie ein SandboxClaim-Manifest mit dem Namen sandbox-claim.yaml, um eine vorab aufgewärmte Sandbox zu beanspruchen:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxClaim
metadata:
name: agent-session-1
namespace: default
spec:
sandboxTemplateRef:
name: warmpool-filestore-template
Wenden Sie das Manifest an:
kubectl apply -f sandbox-claim.yaml
Bereitgestelltes Volume prüfen
Prüfen Sie, ob der Anspruch an einen Pod gebunden ist:
kubectl get sandboxclaim agent-session-1
Suchen Sie den Pod, der mit Ihrem Anspruch verknüpft ist:
kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
Prüfen Sie, ob das Volume im beanspruchten Container bereitgestellt ist:
kubectl logs POD_NAME -c agent-container
Ersetzen Sie
POD_NAMEdurch den Namen des Pods, der im vorherigen Schritt zurückgegeben wurde.Das Log bestätigt, dass
/workspace/session-init.txtauf dem bereitgestellten Filestore-Volume erstellt wurde.
Nächste Schritte
- Agent-Sandbox mit Late Binding
- Stellen Sie selbstverwaltete GKE-Arbeitslasten bereit.
- Informationen zum Erstellen und Verwalten von Volumenpools