【免费下载链接】SPACESandboxed Platform for Agentic Code Execution: pluggable-runtime sandboxes for running agent and user code in isolation.项目地址https://gitcode.com/gh_mirrors/space34/SPACE点击查看免费下载当你需要在服务器上安全运行 AI Agent 生成的代码或用户提交的任务时沙箱隔离就成了绕不开的安全刚需。SPACESandboxed Platform for Agentic Code Execution正是为此设计的开源平台它把每个执行环境跑在独立的Firecracker microVM里用Rust 编写核心服务、Go 编写运行时 shim 层两者通过一套清晰的gRPC 协议协作。本文将带你完整看懂 SPACE 的微VM沙箱架构核心服务如何分工、gRPC 协议怎么设计、shim 层又如何把 Firecracker 无缝接入 Kubernetes。为什么需要微VM沙箱容器隔离不够吗传统 Docker 容器共享宿主机内核恶意代码一旦利用内核漏洞逃逸就可能控制整台机器。而 SPACE 采用的microVM 方案给每个沙箱一个独立的轻量虚拟机内核——隔离强度接近传统 VM启动速度却接近容器毫秒级。方案隔离边界启动速度适用场景容器Docker共享内核依赖 namespace/cgroup快可信任务传统 VM完整硬件虚拟化慢秒~分钟级强隔离微VMFirecracker独立 guest 内核快毫秒~百毫秒级Agent 代码、用户代码执行 SPACE 的定位一句话概括你的应用决定跑什么代码SPACE 负责沙箱、进程和输出通道的全部生命周期见 README.md。核心概念Template、Sandbox、Process、Session、Operation理解 SPACE 架构前先建立 5 个核心概念的心智模型源自 docs/architecture.md概念含义类比Template起步文件系统 运行时配置可被多个沙箱复用系统镜像Sandbox一个 microVM 实例拥有独立可写文件系统一台虚拟机Process沙箱内运行的程序终端里的一条命令Command session单条命令的连接信息与授权创建即分配进程 IDattach 才真正启动进程打开一个终端窗口Operation记录一次异步的创建/暂停/挂起/唤醒/删除请求工单一个关键的架构决策是这三者拥有独立的生命周期——沙箱可以比创建它的请求活得久也可以比承载其输出的连接活得久。这意味着 API 返回一个 operation ID 供客户端轮询而命令输出走完全独立的数据面连接。核心服务全景谁负责什么SPACE 由一组 Rust 服务组成源码位于 crates/apps/各服务职责单一、边界清晰️ 控制面API PostgreSQLAPI 服务crates/apps/api/svc/认证鉴权 记录期望状态到 PostgreSQL。注意API 接受请求 ≠ 沙箱就绪真正执行靠协调器推进。Cluster controllercrates/apps/cluster/controller/读取期望状态通过 Kubernetes 适配器创建沙箱 Pod、协调生命周期。⚙️ 工作节点四大 Worker 服务节点上的工人们由 Rust 编写各司其职服务路径职责node-managercrates/libs/node/mgr/节点注册、cgroup、网络命名空间、nftables 隔离sandbox-managercrates/libs/sbx/mgr/管理 microVM 全生命周期创建/启动/暂停/快照runtime-managercrates/libs/node/runtime/Firecracker 运行时监督与恢复data-planecrates/apps/data/plane/客户端命令流与 guest 进程之间的数据通道Worker 服务还与对象存储双向交换template 与 snapshot产物本地部署使用 Versity S3 Gateway。 数据面与管控面分离的命令通道命令输出不经过 API而是走数据面连接 会话级 attachment token。这是一个重要的安全设计管理 token 与 attach token不可互换即使数据面被突破也无法反过来管理沙箱。数据面副本收到 SIGTERM 时会优雅 drain排空存量流而非粗暴断开详细行为在 docs/architecture.md 中有完整说明。gRPC 协议设计proto 目录的服务地图所有跨服务通信都定义在 proto/ 目录中遵循space.domain.v1的包命名规范。按领域划分的 core service 如下proto/ ├── sandbox/manager/v1/ → SandboxManagermicroVM 生命周期核心 ├── node/api/v1/ → WorkerApi / ClusterApi / IngressActivationApi ├── node/runtime/v1/ → RuntimeSupervisorFirecracker 监督 ├── net/gateway/v1/ → NetGatewayControl出站网络策略 ├── spaced/ → guest / host / bridgeguest 内部 RPC ├── template/manager/v1/ → TemplateManager模板发布与拉取 ├── volume/manager/v1/ → VolumeManager卷管理 ├── credential/ → CredentialManager凭证注入 └── execution/v1/ → 执行环境公共契约以沙箱管理的核心契约 proto/sandbox/manager/v1/manager.proto 为例SandboxManager服务的 RPC 设计体现了几个值得学习的原则1. 状态机显式化。生命周期被拆成明确的 RPC 动词而不是一个模糊的操作接口rpc Create(CreateRequest) returns (CreateResponse); // 分配资源、准备文件系统不启动 VM rpc Start(StartRequest) returns (StartResponse); // 冷启动或从 checkpoint 恢复 rpc Pause(PauseRequest) returns (PauseResponse); // 冻结 vCPU rpc Resume(ResumeRequest) returns (ResumeResponse); // 解冻 vCPU rpc Wake(WakeRequest) returns (WakeResponse); // 从休眠态唤醒 rpc Stop(StopRequest) returns (StopResponse); // SIGTERM 宽限期 SIGKILLCreate与Start分离让分配和激活可以独立失败与重试Pause/Resume/Wake三态对应 docs/architecture.md 中 Running / Paused / Suspended 状态表。2. 读写分离与能力协商。GetExecutionCapabilities用于版本协商新字段失败即 fail-closedList走廉价清单ScanCleanupTargets用流式返回避免大响应State才返回深度状态——不同精度走不同接口。3. 注释即契约。每个 RPC 的注释直接说明语义边界例如GetSandboxHealth明确只读缓存、从不主动探测ScanCleanupTargets明确流失败不代表看不到 不存在。这种注释风格让跨语言团队Rust 服务 Go shim对协议的理解保持一致。shim 层Go 写的桥如何连接 Kubernetes 与 Firecracker这是 SPACE 跨语言架构最巧妙的部分。Kubernetes/containerd 生态的 runtime shim 接口用 Go 定义而 SPACE 的核心能力VM 管理在 Rust 的 sandbox-manager 中。解决方案用一个 Go shim 做适配层shim/。shim 的角色定位入口只有 11 行shim/main.gofunc main() { shim.Run(context.Background(), NewManager(io.containerd.space.v2)) }它向 containerd 注册为io.containerd.space.v2运行时对外实现 containerd task v3 APIttrpc对内则读取 Kubernetes 注解——沙箱 ID、网络策略、vCPU/内存规格等都编码在 Pod annotation 里见 shim/space.go 中的space.pplx.net/*注解常量族通过 Unix socket 调用 Rust 的 sandbox-manager——/space/run/sandbox-manager/sandbox-manager.sockshim/space.go配置数据面网络——用 nftables 表space_dataplane和端口转发把 guest 进程流量接入数据面shim/data_plane_proxy.go处理优雅退出——Pod 销毁前先向 sandbox-manager 发起 durable suspendgeneration-suspend-v1协议保证沙箱状态在容器回收前落盘。协作模式的妙处Kubernetes Pod 生命周期 │ (containerd task v3 / ttrpc) ▼ Go shim空间适配、注解解码、nftables 配置 │ (gRPC over Unix socket) ▼ Rust sandbox-managerVM 生命周期权威 │ ▼ Firecracker microVM语言选型各取所长Go 天然贴合 containerd/K8s 生态Rust 负责需要内存安全和高性能的 VM 管理核心。协议先行两边不共享代码只共享 proto/ 下的 protobuf 契约加上 shim/proto/ 中由 Go 侧生成的副本接口变更靠 CI 校验如 ci/scripts/run-shim-checks.sh。单一权威shim 不发明任何状态它只是把 K8s 事件翻译成 gRPC 调用沙箱真实状态永远以 Rust 侧为准。这种薄 shim 厚核心的分工避免了双权威状态撕裂。一次命令执行的完整旅程把上面三块拼起来一次run command的完整链路是申请应用 → API管理面→ PostgreSQL 记录期望状态编排cluster controller → 创建沙箱 Pod →Go shim 启动→ gRPC 调用 sandbox-manager → Firecracker 拉起 microVM执行API 创建 command session → 客户端 attach 到数据面端点 →guest 进程启动→ 输出经数据面流回应用收尾客户端检查退出码后可复用沙箱执行下一条命令或 pause/suspend/delete。管理请求与命令流物理隔离前者走 API后者走数据面直连 guest。这种控制面/数据面分离让命令流的高带宽传输不会阻塞管控请求也让两者可以独立扩缩容。本地跑起来 深入阅读路线想亲手体验SPACE 支持在本地 Kind 集群一键部署git clone https://gitcode.com/gh_mirrors/space34/SPACE cd SPACE tilt up # 构建受影响镜像并滚动更新工作负载部署后跟着官方走查创建第一个沙箱文档适合谁docs/first-sandbox.md想跑通第一条命令的用户docs/architecture.md想深挖状态机与持久化语义的读者docs/installation.md本地 Kind 部署与配置examples/first_sandbox.py纯标准库 Python 示例零 SDK 依赖docs/native-api-hardening.md关注契约测试与故障恢复的工程师推荐阅读顺序先读 README.md 的 How it works 五段流程图 → 再看 docs/architecture.md 的服务职责表 → 然后浏览 proto/sandbox/manager/v1/manager.proto 感受协议设计 → 最后翻 shim/space.go 看 Go 与 Rust 如何跨语言握手。总结从 SPACE 学到的 3 个架构经验✅薄 shim厚核心跨语言适配层只做翻译状态权威始终单一避免双写撕裂。 ✅协议先行Rust 与 Go 团队靠 protobuf 契约 CI 校验协作接口注释即语义文档。 ✅控制面/数据面分离管控请求走低延迟 API 通道命令输出走独立数据面直连互不拖累、权限互不通用。无论你在做 Agent 执行平台、CI 沙箱还是多租户代码运行服务SPACE 的microVM gRPC 分层 shim 桥接组合都值得作为参考蓝本。赞分享【免费下载链接】SPACESandboxed Platform for Agentic Code Execution: pluggable-runtime sandboxes for running agent and user code in isolation.项目地址https://gitcode.com/gh_mirrors/space34/SPACE点击查看免费下载相关推荐cargo-auditable 替代方案对比为什么它成为 Rust 供应链安全的事实标准cargo auditable 替代方案对比为什么它成为 Rust 供应链安全的事实标准 在当今软件供应链安全日益受到重视的环境下Rust 开发者需要可靠的开发工具网络安全免费公开API速查手册798个接口、48个分类与认证选型指南免费公开API速查手册798个接口、48个分类与认证选型指南 public api lists 是一份社区维护的免费公开 APIfree public AP文档知识库Egg.js gRPC服务开发终极指南构建跨语言微服务架构的5个核心技巧Egg.js gRPC服务开发终极指南构建跨语言微服务架构的5个核心技巧 Egg.js作为基于Node.js和Koa的企业级框架为开发者提供了构建高效微服务后端Web框架上一篇Gradle构建性能优化终极指南如何通过缓存技术提升90%构建速度下一篇mpv.net主题定制教程打造专属视觉风格创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考