许可证管理
SupKube 通过一个 Kubernetes Secret 分发经数字签名的许可证文件,用来控制"新建备份类"操作的权限;未安装许可证不影响读取与还原。
前置条件
- SupKube 已完成安装(见在线安装),并且安装命名空间为
supkube(见下方警告)。 - 已从厂商获得签名后的许可证文件(YAML 格式)。
工作机制
许可证消费端(License Consumer)读取一个名为 supkube-license 的 Secret,用其 license 字段中的 YAML 内容做 Ed25519 签名校验;校验公钥在编译期就内嵌进后端二进制,不能通过任何配置项覆盖——这是防止篡改的安全边界。校验通过后,控制器每 5 分钟重新读取一次 Secret 并刷新状态。
许可证包含到期日期、版本、可选的节点配额(restrictions.nodes)等信息,均由厂商在签发时写入,您只需要保管好厂商交付的文件本身。
安装许可证
kubectl create secret generic supkube-license \
-n supkube \
--from-file=license=/path/to/your-license.yaml
若需要替换已过期或错误的许可证:
kubectl create secret generic supkube-license \
-n supkube \
--from-file=license=/path/to/new-license.yaml \
--dry-run=client -o yaml | kubectl apply -f -
supkube许可证消费端、多集群注册(Cluster CRD 的 kubeconfig Secret)、以及内置的 Kubernetes 事件审计三个子系统,都把命名空间硬编码为字符串 supkube,不会跟随您 helm install -n <其他命名空间> 时选择的实际发布命名空间自动调整。若您没有把 SupKube 安装在 supkube 命名空间(官方 部署命令 均使用这个命名空间),许可证控制器会一直读取不到 Secret,状态永远停留在 missing。
状态与效果
许可证状态机共 5 种取值:
| 状态 | 含义 | 是否允许新建备份 |
|---|---|---|
licensed | 有效且未过期 | 允许 |
grace | 已过期,但在 7 天宽限期内 | 允许 |
degraded | 已过期超过 7 天宽限期 | 拒绝 |
missing | 未找到 supkube-license 这个 Secret | 拒绝 |
invalid | Secret 存在但签名校验失败(可能被篡改或损坏) | 拒绝 |
被拒绝时,以下接口返回 HTTP 402:
POST /api/v1/backups(新建备份)POST /api/v1/schedules(新建计划策略)POST /api/v1/schedules/:name/run-once(立即执行一次计划)
只有"新建备份/新建计划/手动触发计划"这三类写操作受许可证状态限制。查看已有数据、发起还原、以及 Applications 页面的一键 Snapshot 按钮(POST /api/v1/applications/:namespace/snapshot)都不受许可证状态影响——设计意图是许可证过期也绝不阻挡客户的灾难恢复能力。
节点配额(restrictions.nodes)只统计计入计费的 worker 节点,会自动排除带 node-role.kubernetes.io/control-plane、node-role.kubernetes.io/master 标签或带 NoSchedule/NoExecute 污点(taint)的节点。超出配额目前只记一条 Kubernetes 事件作为警告,不会阻断任何操作。
查看当前许可证状态
# 查看后端进程记录的许可证状态日志(每 5 分钟刷新一次)
kubectl logs -n supkube deploy/supkube-backend | grep '\[license\]'
# 查看许可证生命周期相关的 Kubernetes 事件
# (LicenseLoaded / LicenseExpiringSoon / LicenseMissing / LicenseInvalid /
# LicenseExpired / LicenseNodeCountExceeded)
kubectl get events -n supkube --field-selector involvedObject.name=supkube-license-status
验证方法
- 执行上方任一
kubectl命令,确认状态为licensed或grace。 - 在 UI 的 Backups 页面尝试创建一个备份;若返回错误提示"license required or expired",说明许可证尚未生效,请检查
Secret是否位于supkube命名空间、内容是否为厂商签发的原始文件(未被二次编辑)。