背景
希望能够下载 Kubeconfig,通过本地 kubectl 或 ktctl 访问其在 Kite 中有权限的集群和资源,而不暴露目标集群的原始凭证及 API Server 地址。
功能需求
Kubeconfig 下载
- 在顶部 Kubectl Terminal 按钮旁增加下载入口。
- 展示当前用户有权访问且已启用的集群,支持多选并默认勾选当前集群。
- 生成的 Kubeconfig 使用以下代理地址:
https://<kite-server>/api/v1/clusters/<cluster-uuid>/k8s-proxy
- UUID 仅用于稳定路由,不承担认证或授权职责。
- Kubeconfig 不得包含 kube-apiserver 真实地址、Cluster Agent Token 或 Kubernetes 原始凭证。
有状态 Kubeconfig JWT
- 使用独立 Kubeconfig JWT,不复用浏览器登录 JWT,也不接入现有 API Key 子系统。
- JWT 不可刷新,至少包含:
iss / sub / jti / token_use / iat / nbf / exp
token_use 固定为 kubeconfig。
- JWT 不包含角色、集群权限、OAuth Refresh Token 或其他敏感凭证。
- 服务端仅存储
jti 哈希及 Token 元数据,不存储 JWT 明文。
- 每次代理请求必须验证签名、状态记录、过期时间、撤销状态、所有者状态和当前 RBAC 权限。
- 支持同一用户持有多个 Token,并可单独撤销,创建新 Token 不影响旧 Token。
TTL
- 默认 30 天。
- 提供快捷选项:1 小时、1 天、7 天、30 天、6 个月、1 年、5 年。
- 支持通过“天 / 时 / 分 / 秒”组件自定义时长。
- 自定义范围为
3,600~157,680,000 秒,精确到秒。
- 前后端均需校验,后端为最终安全边界。
- JWT 时间及数据库时间统一使用 UTC,前端按浏览器时区显示。
Token 管理
- 账户设置增加独立的 Kubeconfig Tokens 页面,用户可查看并撤销自己的 Token。
- 管理员增加独立的 Kubeconfig Tokens 管理页面,可查看所有者、创建时间、到期时间、状态、最后使用时间及撤销信息。
- 列表不返回 JWT、原始
jti 或 jti 哈希。
Kubernetes API 代理
必须支持:
- Kubernetes discovery 和资源 CRUD;
kubectl get -w;
kubectl logs -f;
kubectl exec;
kubectl attach;
kubectl port-forward;
- SPDY/WebSocket Upgrade;
- 项目指定固定版本的
ktctl 核心命令。
代理必须:
- 按 Cluster UUID 定位集群;
- 执行集群、namespace、资源、verb 和子资源级 Kite RBAC;
- 转发前移除外部 JWT、Cookie 和
Impersonate-* 请求头;
- 通过 Cluster Agent transport 注入目标集群凭证;
- 组合而非覆盖 Cluster Agent 原有
WrapTransport,保证 Upgrade 请求认证正常;
- 对认证及授权错误返回 Kubernetes 标准
metav1.Status。
数据与迁移
- Cluster 模型增加唯一 UUID。
- 新集群自动生成 UUID v4。
- 启动时幂等回填历史集群 UUID。
- 新增独立 Kubeconfig Token 状态表,包含所有者、名称、
jti 哈希、创建/到期/最后使用/撤销时间和签名密钥版本等信息。
安全要求
- 使用独立 JWT 签名密钥、算法白名单和
kid,不与浏览器 JWT 共用密钥。
- 支持签名密钥受控轮换。
- Token 撤销后必须及时失效,多实例缓存不得绕过数据库状态检查。
- 下载响应禁止缓存。
- 提示用户将 Kubeconfig 文件权限设置为
0600。
- 审计日志不得记录 JWT、
jti、哈希或目标集群凭证。
背景
希望能够下载 Kubeconfig,通过本地
kubectl或ktctl访问其在 Kite 中有权限的集群和资源,而不暴露目标集群的原始凭证及 API Server 地址。功能需求
Kubeconfig 下载
有状态 Kubeconfig JWT
token_use固定为kubeconfig。jti哈希及 Token 元数据,不存储 JWT 明文。TTL
3,600~157,680,000秒,精确到秒。Token 管理
jti或jti哈希。Kubernetes API 代理
必须支持:
kubectl get -w;kubectl logs -f;kubectl exec;kubectl attach;kubectl port-forward;ktctl核心命令。代理必须:
Impersonate-*请求头;WrapTransport,保证 Upgrade 请求认证正常;metav1.Status。数据与迁移
jti哈希、创建/到期/最后使用/撤销时间和签名密钥版本等信息。安全要求
kid,不与浏览器 JWT 共用密钥。0600。jti、哈希或目标集群凭证。