已知限制与产品边界
本文集中列出当前版本确实做不到或行为与直觉不符的地方。这些不是故障,排查前先对照本文,可以省掉大量无效定位。
与常见问题的区别:常见问题回答「我遇到了这个现象该怎么办」,本文回答「这个能力的边界在哪里」。做架构选型或写自动化脚本前,应该先读本文。
前置条件
本文对应 SupKube 0.9.1-alpha.9。版本升级后请重新核对,限制可能已经解除。
按严重程度分级
┌─────────────────────────────────────────────────────┐
│ 阻断级 会让功能完全不可用,且没有绕过方法 │
├─────────────────────────────────────────────────────┤
│ 约束级 有绕过方法,但需要您在部署前就知道 │
├─────────────────────────────────────────────────────┤
│ 体验级 功能可用,只是表现与预期不同 │
└─────────────────────────────────────────────────────┘
阻断级
命名空间必须是 supkube
许可证消费端、多集群注册表、基于 Kubernetes 事件的审计记录,这三个子系统在代码里把命名空间写成了字面量 supkube,不会跟随您实际选择的 Helm 发布命名空间。
装到别的命名空间时,SupKube 本身能起来,但上述三个子系统会静默失效——这是最容易踩且最难自查的一条。
helm install supkube -n my-backup ← 装到别处
│
├── 备份 / 还原 / 策略 ✅ 正常
├── 许可证消费 ❌ 读不到
├── 多集群注册表 ❌ 读不到
└── 审计日志 ❌ 写不进
没有绕过方法,请始终使用 -n supkube 安装。
跨存储位置复制未交付
POST /api/v1/backup-copy 直接返回 501 Not Implemented。真正「搬运字节」的执行逻辑尚未实现,当前只有预检可用——它能列出哪些备份可以复制,但复制本身做不了。
界面上对应的入口也因此不可用。
Azure 存储位置只支持 Storage Account Key
Azure 备份存储位置目前仅支持 Storage Account Key 认证。基于 Azure AD 服务主体的认证方式尚未实现。
如果您的安全规范禁止分发 Storage Account Key,当前版本无法在 Azure 上合规使用。
对象存储只支持两种驱动
备份存储位置(BSL)的 provider 只接受:
| provider | 覆盖范围 |
|---|---|
aws | S3 协议兼容,含 MinIO、Ceph RGW 等 |
azure | Azure Blob |
界面上能看到 GCP 选项,但标记为规划中且禁用。
快照位置(VSL)可以配置 gcp 作为快照 provider,前提是集群已装对应的 CSI 驱动。两者是不同的东西,详见存储位置与快照位置。
约束级
备份导出批量操作不可用
Backups 页面的「导出」批量按钮当前处于禁用状态,界面标注为「即将推出」。这不是权限问题,也不是数据问题,任何角色都点不动。
单个备份的导出能力请走策略里的「快照 + 异地导出」(L2)模式。
插件管理页给出的命令名称是写死的
Settings → 插件管理页面展示的 helm upgrade 命令里,Release 名称与命名空间都是硬编码的 supkube/supkube,不会读取您实际使用的 Helm Release 名。
由于命名空间本来就必须是 supkube(见上),实际只有 Release 名可能不一致。复制该命令后请先核对 Release 名再执行。
未登记的端点一律拒绝
SupKube 的权限表是默认拒绝的。新增端点若忘了登记权限,请求会返回 403 并附带:
{ "error": "endpoint not in RBAC table (this is a SupKube bug — please report)" }
这是刻意设计——让遗漏以「功能不可用」暴露,而不是以「未授权访问」静默放行。看到这条错误时改任何角色绑定都无效,请报缺陷。
JDC Vault 申领的重试是有限的
开启 vault.provisionOnStart 后,后端启动时在后台申领备份库,最多重试 5 次、间隔 15 秒、单次超时 60 秒,全部失败即放弃,且不再自动重试。
后端本身不受影响,会正常提供服务——但那个存储位置不会出现。Vault 侧故障恢复后需要手工调一次 POST /api/v1/vault/provision。
静态令牌配置错误不会阻止启动
AUTH_STATIC_TOKENS_JSON 解析失败时,SupKube 记录一条日志后继续启动,静态令牌通道不可用但 OIDC 通道照常工作。
这是刻意的「失败开放」——一个写坏的 JSON 不应该把所有人挡在门外。但副作用是:配错了不会有明显报错,您的脚本会一直收到 401。排查时请检查后端日志里的 [auth] 行。
editor 的命名空间范围只在写操作生效
命名空间范围只约束 editor 角色,且只在写操作的处理逻辑里检查。admin 与 viewer 都是集群范围。
这意味着 viewer 能看到全集群所有命名空间的备份数据,包括不属于它的业务。如果您的场景要求读取也按命名空间隔离,当前的角色模型无法满足。
体验级
日志查看器不是实时流
日志查看器是客户端每 5 秒轮询刷新一次,不是服务端推送的流式 tail。日志量大或网络较差时会有明显延迟感。
还原没有独立菜单入口
/restores 路由会被重定向到 Observability 页面的活动标签。发起还原的入口在 Backups 页面某条记录的行操作菜单里,会打开一个还原抽屉。
功能完整,只是位置与多数人的预期不同。
DR Topology 图只有部分节点有数据
Dashboard 的 DR Topology 图完整展示的是「本地 BSL / 云端 BSL 两类存储位置」以及一个 3-2-1-1-0 合规评分。更细粒度的分层节点仍在完善中,不代表独立的实时数据管道。
审计日志受 Kubernetes 事件 TTL 限制
审计记录基于 Kubernetes 原生事件实现,因此继承集群的事件保留策略。多数集群默认只保留 1 小时,超期记录会被 etcd 自动清理,SupKube 无法找回。
需要长期留存审计记录时,请把事件导出到外部系统,不要依赖界面里的审计日志页。
默认关闭且未随产品交付的能力
| 能力 | 状态 | 说明 |
|---|---|---|
| Copilot 智能助手 | ai.enabled=false | 需显式开启并配置 Azure OpenAI 密钥 |
| MCP Server | 代码在仓库中但未部署 | 没有面向客户的可用路径 |
DR 评分引擎是确定性规则引擎,不调用大语言模型。它与 Copilot 是两件事,关闭 Copilot 不影响 DR 评分。
验证方法
确认自己踩的是不是本文列出的限制:
# 确认安装命名空间(必须是 supkube)
helm list -A | grep supkube
# 确认存储位置的 provider 与状态(用 -A:BSL 在 release 命名空间,不在 velero)
kubectl get backupstoragelocation -A \
-o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,PROVIDER:.spec.provider,PHASE:.status.phase'
# 确认可选能力的开关状态
kubectl -n supkube get deploy supkube-backend \
-o jsonpath='{.spec.template.spec.containers[0].env[*].name}' | tr ' ' '\n' | sort
这些限制什么时候会解除
本文描述的是当前版本的事实,不代表永久边界。各项能力的规划状态见功能路线图,那一页也提供了提交需求的渠道——您的反馈会直接影响优先级。