Google Kubernetes Engine (GKE) Agent Sandbox 採用 gVisor,為不受信任的模型生成程式碼提供核心層級的隔離機制。結合 GKE Agent Sandbox 與 Filestore 代理磁碟區,即可提供安全、隔離的環境,並以高密度永久檔案儲存空間做為後盾。
本指南說明如何設定啟用 gVisor 的節點集區、使用 Filestore 磁碟區聲明範本定義 SandboxTemplate、使用 SandboxWarmPool 預先暖機沙箱,以及使用 SandboxClaim 聲明沙箱。
事前準備
在「為 Filestore 代理程式磁碟區設定 GKE 環境」中,完成叢集和 CSI 驅動程式設定。
建立啟用 gVisor 的節點集區
建立設定 gVisor 沙箱隔離機制的專屬節點集區:
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
更改下列內容:
CLUSTER_NAME:GKE 叢集的名稱。REGION:叢集所在的區域。PROJECT_ID:您的 Google Cloud 專案 ID。
建立 SandboxTemplate
定義名為 warmpool-filestore-template.yaml 的 SandboxTemplate 資訊清單。
範本會設定 gVisor 執行階段設定、非根安全性環境,以及以 volume-pool-sc StorageClass 為目標的 volumeClaimTemplates 區塊:
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"
套用資訊清單:
kubectl apply -f warmpool-filestore-template.yaml
建立 SandboxWarmPool
如要盡可能縮短沙箱啟動延遲時間,請定義名為 SandboxWarmPool 的資訊清單 sandbox-warmpool.yaml,以維持預先暖機的 Pod 執行個體:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
name: filestore-warmpool
namespace: default
spec:
replicas: 3
sandboxTemplateRef:
name: warmpool-filestore-template
套用資訊清單:
kubectl apply -f sandbox-warmpool.yaml
確認預建集區 Pod 是否已準備就緒:
kubectl get sandboxwarmpool filestore-warmpool -n default
申請沙箱 Pod
代理程式工作階段開始時,請提交名為 SandboxClaim 的資訊清單,以聲明預先暖機的沙箱:sandbox-claim.yaml
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxClaim
metadata:
name: agent-session-1
namespace: default
spec:
sandboxTemplateRef:
name: warmpool-filestore-template
套用資訊清單:
kubectl apply -f sandbox-claim.yaml
確認已掛接磁碟區
確認要求已繫結至 Pod:
kubectl get sandboxclaim agent-session-1
找出與著作權聲明相關的 Pod:
kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
確認磁碟區已掛接在已聲明的容器內:
kubectl logs POD_NAME -c agent-container
將
POD_NAME替換為上一步傳回的 Pod 名稱。記錄檔會確認
/workspace/session-init.txt是在已掛接的 Filestore 磁碟區中建立。
後續步驟
- 探索 具有延遲繫結的 Agent Sandbox。
- 部署自行管理的 GKE 工作負載。
- 瞭解如何建立及管理磁碟區集區。