Kibotos

安装 E2B 网关

本页介绍如何安装 E2B 网关,让基于 E2B SDK 的程序接入 Kibotos。

前提条件

  • ctrl、node 与至少一个可用的 Template 已按安装概览的顺序就位。
  • 为网关准备一份专用的 Operator 身份:一把注册密钥,或一份按身份与注册注册好的身份目录。每个实例需要自己的身份。
  • 网关与 ctrl、node 使用同一个发布包。

1. 安装包并填写配置

set -eu
sudo apt-get install ./kibotos-e2b_1.2.3_amd64.deb
sudo test ! -e /etc/kibotos/e2b/config.env
sudo install -o root -g root -m 0600 \
  /usr/share/doc/kibotos-e2b/e2b.example.env /etc/kibotos/e2b/config.env
sudoedit /etc/kibotos/e2b/config.env

安装包创建 kibotos-e2b 账户和服务单元,不启动也不启用服务。网关的全部配置都写在这个文件里。它是 systemd 的 EnvironmentFile 格式,不支持 shell 表达式,由 systemd 读取,保持 root:root 0600。完整示例见 e2b.example.env。

变量说明
KIBOTOS_E2B_API_KEYS对外接受的 API key,多个用逗号分隔,至少一个
KIBOTOS_E2B_NAMESPACE本套网关部署的固定名字,必须是 label value(最多 63 个字母、数字、-、_、.,首尾为字母或数字)。同一部署的所有实例取相同的值;共用同一个 ctrl 的另一套 E2B 网关取不同的值,两套互相看不到对方的 sandbox 与 volume。改了它,已有的 sandbox 与 volume 对这套网关就不存在了
KIBOTOS_E2B_TOKEN_KEYS推导 sandbox 访问 token 的密钥,格式 kid:base64key,多个用逗号分隔,第一个是当前密钥。同一部署的所有实例取相同的值。用 openssl rand -base64 32 生成。换密钥分两轮滚动:先在所有实例上把新密钥加在当前密钥之后,全部完成后再在所有实例上把它移到最前面;旧密钥在还有 sandbox 使用时保留
KIBOTOS_E2B_IDENTITY_DIROperator 身份目录的绝对路径。服务只能写 /var/lib/kibotos/e2b/,所以放在它下面。必填,示例用 /var/lib/kibotos/e2b/identity
KIBOTOS_E2B_ENROLLMENT_KEY_FILE可选。身份目录为空时,网关用这把一次性注册密钥登记,见下一步
KIBOTOS_E2B_CTRL_ENDPOINTctrl 的 HTTPS 地址
KIBOTOS_E2B_DOMAIN / KIBOTOS_E2B_PUBLIC_BASE_URLsandbox 域名,以及对外控制 API 的 HTTPS 地址
KIBOTOS_E2B_LISTEN控制 API 的监听地址,默认 127.0.0.1:18095。反向代理把全部请求转到这里,包括发往 49983-<sandboxID>.<domain> 的 envd 请求
KIBOTOS_E2B_ENVD_LISTEN只服务 envd 协议的第二个监听地址,默认 127.0.0.1:18096。反向代理不需要转发到这里,保持在 loopback 上即可

要提供 sandbox 指标时,再填写 KIBOTOS_E2B_METRICS_* 几个变量,见E2B 网关的配置。不填时两个 sandbox 指标接口返回 501。

2. 准备身份并启动

按 Exposure 网关页的准备身份并启动准备网关的 Operator 身份并启动服务,名字取那里表格中 E2B 网关一列。然后检查服务:

sudo systemctl status kibotos-e2b.service
sudo journalctl -u kibotos-e2b.service -n 100 --no-pager

注意:

  • 配置有缺失或非法取值时服务无法启动,日志一次列出全部有问题的变量名,不输出取值。网关会校验身份目录的内容。
  • 网关没有自己的数据库。多台实例可以同时服务同一批 sandbox,各自缓存从 ctrl 读到的内容。它们使用相同的 KIBOTOS_E2B_NAMESPACE 与 KIBOTOS_E2B_TOKEN_KEYS,各自有自己的身份。

3. 可选:调整运行参数

下面的变量都有默认值,需要时写进 /etc/kibotos/e2b/config.env 后重启网关。网关不接受命令行参数。

变量默认值说明
KIBOTOS_E2B_DEFAULT_TIMEOUT1h请求未指定 timeout 时 sandbox 的生命周期,Go 时长写法
KIBOTOS_E2B_MAX_TIMEOUT不限制单次请求允许的最长生命周期;create 与 connect 超过它返回 400
KIBOTOS_E2B_DEFAULT_CPU_MILLIS1000创建 Workspace 时申请的 CPU
KIBOTOS_E2B_DEFAULT_MEMORY_BYTES1073741824创建 Workspace 时申请的内存
KIBOTOS_E2B_DEFAULT_DISK_BYTES5368709120创建 Workspace 时申请的根文件系统可写空间,必须是整数 MiB;从放置起占用 node 存储池的容量
KIBOTOS_E2B_NATIVE_PROXY不使用连接 ctrl 的正向代理,http、https 或 socks5 URL
KIBOTOS_E2B_TELEMETRY_LISTEN不监听指标监听地址,参考取值 127.0.0.1:18195,见集群与服务指标

4. 配置反向代理

部署方需要为 api.<domain> 与 *.<domain> 提供 DNS、HTTPS 证书和反向代理:

  • 保留原始 Host 头,把请求转到控制 API 的监听地址。
  • 对流式响应和上传关闭缓冲。
  • SDK 访问 49983-<sandboxID>.<domain> 时,网关按域名找到 sandbox,再校验 envd token。其他端口的 <port>-<sandboxID>.<domain>,网关把请求代理到 sandbox 里的这个端口。

本页内容