API 概览
Kibotos 的 API 让你自己的程序不经过 kibo 创建和使用 Workspace、运维整套部署。本页介绍各个包、两个入口及其协议,给出第一个请求,并列出讲解每个服务的页面。
概述
API 是一组 protobuf 服务,任何有 Connect、gRPC 或 gRPC-Web 客户端的语言都能调用。程序需要完整能力或兼容承诺时,用 API 而不用 kibo:kibo 的参数与输出不在兼容承诺之内。
| 你在写的是 | 用什么 |
|---|---|
| 手工操作、shell 脚本、排查 | kibo 命令行 |
| 需要完整能力与兼容承诺的程序,任何语言 | API,按本组页面调用 |
| Go 程序 | Go SDK,生成代码在其中,证书与数据面凭证由它处理 |
| 已经按 E2B SDK 写好的程序 | E2B 兼容 |
本组页面包括:
Workspace、执行代、Volume 等概念与状态见核心概念,数据在什么情况下保留见保证与边界。
第一个请求
下面用 curl 和现有的 kibo context 身份查询服务端的能力,同时验证证书和地址是否正确:
ctx="${KIBO_CONTEXT_DIR:-$HOME/.config/kibo/context}"
cert=$(ls "$ctx"/identity-*.pem)
curl --http2 --tlsv1.3 \
--cert "$cert" --key "${cert%.pem}.key" --cacert "$ctx/server-ca.pem" \
-H 'Content-Type: application/json' --data '{}' \
https://ctrl.example.com:18092/kibotos.ctrl.v1.ServerInfoService/GetServerInfo响应里是服务端构建所用的源码版本和它的能力名列表。你自己的程序使用自己的身份,见认证。Go 程序用 Go SDK 从身份建立这个客户端。
包与入口
proto 包
接口定义在 Kibotos 仓库的 proto/ 下:
| proto 包 | 文件 | 内容 |
|---|---|---|
kibotos.ctrl.v1 | ctrl.proto | Workspace API,以及运行在 node 上的文件、进程、桌面与服务连接接口 |
kibotos.operator.v1 | operator.proto | Operator API:发布、批准、节点管理、注册密钥 |
kibotos.enrollment.v1 | enrollment.proto | 用注册密钥换取身份、续期 |
kibotos.service.v1 | service.proto | 服务连接的目标与消息类型 |
这些包的每个服务、方法、消息与枚举见由 proto 文件及其注释生成的 API 参考。
前三个包,以及数据面用到的 kibotos.service.v1 类型,承担兼容承诺,见兼容承诺。
两个入口
Workspace 的文件、进程、桌面与服务连接直接访问运行它的 node,其余一律访问 ctrl:
mTLS(Operator 身份) Bearer(会话凭证)
第三方程序 ───────────────────────────► ctrl ───────────────────────► node 数据面
Workspace API / Operator API / 注册 文件 / 进程 / 桌面 / 服务连接 / /v1/files| 入口 | 地址 | 认证方式 | 详见 |
|---|---|---|---|
| ctrl(控制面) | ctrl 配置中的 [api].listen,如 https://ctrl.example.com:18092 | mTLS,客户端证书是注册得到的 Operator 身份 | 认证 |
| node(数据面) | CreateDataPlaneSession 响应中的 session.endpoint | HTTP 头 Authorization: Bearer <credential> | 数据面 |
协议
两个入口都使用 Connect 协议,HTTP/2 over TLS 1.3。
- 请求格式:
POST https://<host>/<package>.<Service>/<Method>。 - 一元调用的
Content-Type可以是application/proto或application/json;流式调用使用application/connect+proto或application/connect+json。 - 服务端由 connect-go 实现,同时接受 gRPC 与 gRPC-Web。本组页面的示例使用 Connect 协议。
- 不需要额外的请求头。没有 API 版本头,也没有 User-Agent 要求。客户端与服务端的兼容性通过能力列表判断,见写操作与错误。
- ctrl 限制每条请求消息的大小,按所用编码、解压后计算:
ArtifactPublicationService16 MiB,EnrollmentService64 KiB,其他服务 4 MiB。超出时返回resource_exhausted。这些上限高于各服务能接受的最大请求。 - node 数据面的流式方法需要 HTTP/2。服务连接(
ServiceConnectionService.Connect)的单条消息不超过 32 KiB。
服务一览
每个服务名链到它生成的参考页,那里列出方法、消息与枚举。服务做什么、前提条件与结果写在主题页里。Workspace 相关的主题页先讲 kibo 的用法,API 的细节在其后的「用 API」一节。
Workspace API(kibotos.ctrl.v1)
这些服务运行在 ctrl 上。
| 服务 | 用途 | 详见 |
|---|---|---|
ServerInfoService | 源码版本与能力列表 | 写操作与错误、能力名 |
TemplateService | 只读 Template 目录 | 查看 Template |
WorkspaceService | Workspace 生命周期与配置 | 创建与列表、生命周期、资源与运行状况、到期时间、网络策略、labels 与 annotations |
VolumeService | Volume | Volume 与导出恢复 |
TransferService | 导出与恢复 | 导出、导入与恢复 |
WorkspaceObservationService | 删除后的清理结果 | 查看释放情况 |
WorkspaceMetricsService | 一段时间的宿主侧与 guest 内资源读数 | 读取资源读数 |
DataPlaneSessionService | 获取数据面会话凭证 | 数据面 |
ExposureService | 把 Workspace 内的端口发布为公开 HTTP 预览 | 公开 URL |
EgressService | 调用方自带的 SOCKS5 出口 | Egress |
ResolverService | 调用方自选的 DNS 上游 | Resolver |
数据面服务
这些服务定义在 ctrl.proto 中,但运行在 node 的数据面上,不在 ctrl 上。用会话凭证在会话的入口地址调用它们;这个地址还提供两个 HTTP 入口。
| 服务或入口 | 用途 | 详见 |
|---|---|---|
FilesystemService | 目录与元数据操作,监视目录 | 文件 |
/v1/files | 传输单个文件的内容 | 文件 |
ProcessService | 命令与终端 | 命令与终端 |
DesktopService | 桌面画面与输入 | 桌面 |
ServiceConnectionService | 连到 guest 里端口或 socket 的字节流 | 服务与端口 |
/v1/service | 经 WebSocket 建立同样的连接 | 服务与端口 |
Operator API(kibotos.operator.v1)
这些服务运行在 ctrl 上。
| 服务 | 用途 | 详见 |
|---|---|---|
ArtifactPublicationService | 发布 Template 与 Platform | 在构建机上构建并发布 |
TemplateLifecycleService | 在指定 node 上预热 Template | kibo template prepare |
TemplateCatalogService | Template 的批准与默认版本 | template 准入 |
PlatformCatalogService | Platform 的批准与默认版本 | 目录 |
NodeRegistrationService | 节点状态、drain、隔离、退役、存储池与池里的对象、宣告池丢失、对象在池之间搬迁、Workspace 位置、在指定 node 上创建与启动,以及超卖倍数 | node、存储池 |
ArtifactRetentionService | 回收不再使用的制品,以及保留指定的 Launch | artifact 回收 |
EnrollmentGrantService | 签发与撤销注册密钥 | 签发与撤销注册密钥 |
注册(kibotos.enrollment.v1)
| 服务 | 用途 | 详见 |
|---|---|---|
EnrollmentService | 用注册密钥换取身份,以及续期。在 ctrl 入口上提供 | 认证 |
下一步
- 认证:为你的程序获得身份。
- 写操作与错误:每个写操作都遵循的规则。
- 数据面:访问 Workspace 的文件、进程与服务。
conformance/下的验收套件只通过这些公开接口访问已部署的环境,可以作为调用方式的参考实现。