租户和配额
租户对应用户登录身份中的项目。项目和部门上下文由 Token 确定,调用方不能通过查询参数或请求头切换资源所属项目。
租户命名空间是 Beacon 在 Kubernetes 中为当前项目使用的工作空间。创建操作具有幂等性:命名空间已存在时返回 200,首次创建成功时返回 201;提交的名称会归一为小写的 Kubernetes 命名空间名称。未配置 Kubernetes 时,查询接口返回 exists=true、ready=true,以避免非集群环境被初始化流程阻塞,但创建接口返回 503。
计算配额接口返回 Horizon 项目配额中 eks_managed 产品的资源配额和当前用量。该结果表示当前项目可使用的 CPU、内存和 AI 加速卡等计算资源,不等同于集群剩余资源或套餐的请求数、Token 数限流。
模型网关产生的请求数和 Token 统计请参见Token 用量。
| 方法 | 路径(产品接口统一前缀 /api/v1) | 功能 |
|---|---|---|
| GET | /tenants/current | 获取当前租户上下文 |
| GET | /tenants/current/namespace | 查询租户命名空间状态 |
| POST | /tenants/current/namespace | 创建租户命名空间(幂等) |
| GET | /tenants/current/quota | 获取当前租户计算配额 |
获取当前租户上下文
功能介绍
获取 Token 所属项目和部门信息。
访问要求:有效 Token。
URI
GET /api/v1/tenants/current
请求消息
无请求体。
响应消息
| 参数 | 参数类型 | 描述 |
|---|---|---|
| projectId | string | 当前项目 ID |
| projectName | string | 当前项目名称 |
| domainId | string | 当前部门 ID |
| domainName | string | 当前部门名称 |
请求示例
GET https://{endpoint}/api/v1/tenants/current
x-keystone-token: <Keystone Token>
正常响应示例
HTTP/1.1 200
Content-Type: application/json
{
"projectId": "project-a1b2c3d4",
"projectName": "生产项目",
"domainId": "domain-a1b2c3d4",
"domainName": "研发部门"
}
状态码与错误码
成功状态码:200。
| HTTP | error | 说明 |
|---|---|---|
| 401 | unauthorized | authentication required |
后端错误与错误封装见调用方式。
查询租户命名空间状态
功能介绍
查询当前项目是否已经具有 Beacon 使用的 Kubernetes 命名空间。接口只返回是否存在和是否就绪,不返回实际命名空间名称。
访问要求:有效 Token。
URI
GET /api/v1/tenants/current/namespace
请求消息
无请求体。
响应消息
| 参数 | 参数类型 | 描述 |
|---|---|---|
| exists | boolean | 当前项目的 Beacon 命名空间是否存在 |
| ready | boolean | 当前项目的 Beacon 命名空间是否可用;当前实现与 exists 保持一致 |
请求示例
GET https://{endpoint}/api/v1/tenants/current/namespace
x-keystone-token: <Keystone Token>
正常响应示例
HTTP/1.1 200
Content-Type: application/json
{
"exists": true,
"ready": true
}
状态码与错误码
成功状态码:200。
| HTTP | error | 说明 |
|---|---|---|
| 401 | unauthorized | authentication required |
| 403 | forbidden | 无权读取当前项目的 Kubernetes 命名空间状态 |
| 502 | backend_unavailable | 查询 Kubernetes 命名空间失败,详细原因由 message 返回 |
此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。
创建租户命名空间(幂等)
功能介绍
为当前项目创建 Beacon 使用的 Kubernetes 命名空间,并初始化推理引擎权限和镜像拉取凭据。当前项目的命名空间已经存在时不重复创建,而是补齐所需初始化配置。
访问要求:有效 Token。当前项目尚未创建命名空间时,还需要项目作用域 Token 和 namespace/project/bootstrap 权限;命名空间已经存在时,本接口按幂等操作返回现有状态。
URI
POST /api/v1/tenants/current/namespace
请求消息
Content-Type: application/json。
| 参数 | 参数类型 | 是否必选 | 描述 |
|---|---|---|---|
| name | string | 是 | 期望的命名空间名称;服务端转换为小写,将空格、点和下划线转换为连字符,并截断为最长 63 个字符 |
响应消息
| 参数 | 参数类型 | 描述 |
|---|---|---|
| exists | boolean | 当前项目的 Beacon 命名空间是否存在 |
| ready | boolean | 当前项目的 Beacon 命名空间是否可用 |
请求示例
POST https://{endpoint}/api/v1/tenants/current/namespace
x-keystone-token: <Keystone Token>
Content-Type: application/json
{
"name": "beacon-demo"
}
正常响应示例
首次创建成功:
HTTP/1.1 201 Created
Content-Type: application/json
命名空间已经存在:
HTTP/1.1 200 OK
Content-Type: application/json
两种情况的响应体相同:
{
"exists": true,
"ready": true
}
状态码与错误码
成功状态码:200, 201。
| HTTP | error | 说明 |
|---|---|---|
| 400 | invalid_request | 请求体格式错误,或 name 无法转换为有效的命名空间名称 |
| 401 | unauthorized | authentication required,或缺少项目作用域 Token |
| 403 | forbidden | 缺少命名空间初始化权限,或 Kubernetes 拒绝创建 |
| 409 | conflict | 指定名称已被其他命名空间占用 |
| 502 | backend_unavailable | 创建或初始化 Kubernetes 命名空间失败,详细原因由 message 返回 |
| 503 | backend_unavailable | Kubernetes 未配置,不能创建命名空间 |
此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。
获取当前租户计算配额
功能介绍
获取当前项目在 Horizon 中的 eks_managed 计算资源配额、已用量和剩余量。项目和部门由 Token 确定,接口不接受其他项目 ID。
访问要求:有效 Token,并具有当前项目的计算配额读取权限。
URI
GET /api/v1/tenants/current/quota
接口请求头
| 请求头 | 说明 |
|---|---|
| Cookie | 可选;存在时转发给 Horizon 配额服务。使用Token认证时,仍需提供x-keystone-token;平台登录会话认证见调用方式 |
请求消息
无请求体。
响应消息
| 参数 | 参数类型 | 描述 |
|---|---|---|
| source | string | 配额数据来源,当前为 horizon_projectquota |
| product | string | Horizon 云产品名称,当前为 eks_managed |
| quotas | map<string, object / null> | 资源名称到配额信息的映射;只包含 eks_managed 产品返回的资源 |
| quotas.*.used | number | 当前项目已使用数量 |
| quotas.*.quota | number | 当前项目配额上限;负数表示不限量 |
| quotas.*.available | number | 剩余数量,计算方式为 quota - used;不限量时省略 |
| quotas.*.unlimited | boolean | 是否不限量 |
| quotas.*.unit | string | 计量单位,例如 core、MiB、GiB 或 card;空值时可能省略 |
| updatedAt | string(date-time) | 配额数据获取时间,RFC3339 |
请求示例
GET https://{endpoint}/api/v1/tenants/current/quota
x-keystone-token: <Keystone Token>
正常响应示例
HTTP/1.1 200
Content-Type: application/json
{
"source": "horizon_projectquota",
"product": "eks_managed",
"quotas": {
"cpu": {
"used": 12,
"quota": 64,
"available": 52,
"unlimited": false,
"unit": "core"
},
"memory": {
"used": 32768,
"quota": 131072,
"available": 98304,
"unlimited": false,
"unit": "MiB"
},
"NVIDIA-H100-80GB-HBM3": {
"used": 2,
"quota": 8,
"available": 6,
"unlimited": false,
"unit": "card"
}
},
"updatedAt": "2026-09-21T00:00:00Z"
}
状态码与错误码
成功状态码:200。
| HTTP | error | 说明 |
|---|---|---|
| 401 | unauthorized | authentication required |
| 403 | forbidden | 当前用户无权读取项目配额 |
| 404 | not_found | 当前项目未配置计算配额 |
| 502 | backend_unavailable | Horizon 配额查询失败,详细原因由 message 返回 |
| 503 | backend_unavailable | Horizon 配额服务未配置 |
此外,认证/授权中间件可返回 401 / 403;后端错误与错误封装见调用方式。