Skip to main content

许可证管理

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拒绝
invalidSecret 存在但签名校验失败(可能被篡改或损坏)拒绝

被拒绝时,以下接口返回 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

验证方法​

  1. 执行上方任一 kubectl 命令,确认状态为 licensed 或 grace。
  2. 在 UI 的 Backups 页面尝试创建一个备份;若返回错误提示"license required or expired",说明许可证尚未生效,请检查 Secret 是否位于 supkube 命名空间、内容是否为厂商签发的原始文件(未被二次编辑)。

相关文档​