安装 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_DIR | Operator 身份目录的绝对路径。服务只能写 /var/lib/kibotos/e2b/,所以放在它下面。必填,示例用 /var/lib/kibotos/e2b/identity |
KIBOTOS_E2B_ENROLLMENT_KEY_FILE | 可选。身份目录为空时,网关用这把一次性注册密钥登记,见下一步 |
KIBOTOS_E2B_CTRL_ENDPOINT | ctrl 的 HTTPS 地址 |
KIBOTOS_E2B_DOMAIN / KIBOTOS_E2B_PUBLIC_BASE_URL | sandbox 域名,以及对外控制 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_TIMEOUT | 1h | 请求未指定 timeout 时 sandbox 的生命周期,Go 时长写法 |
KIBOTOS_E2B_MAX_TIMEOUT | 不限制 | 单次请求允许的最长生命周期;create 与 connect 超过它返回 400 |
KIBOTOS_E2B_DEFAULT_CPU_MILLIS | 1000 | 创建 Workspace 时申请的 CPU |
KIBOTOS_E2B_DEFAULT_MEMORY_BYTES | 1073741824 | 创建 Workspace 时申请的内存 |
KIBOTOS_E2B_DEFAULT_DISK_BYTES | 5368709120 | 创建 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 里的这个端口。