跳转至

Kubernetes 集群

控制台中的 已登记 Kubernetes 集群 管理,供操作员与 Agent 使用。支持 接入已有集群(粘贴 kubeconfig、加密落库、连通性测试),并 浏览 Namespace、Deployment、Service、Pod。控制台可 apply 白名单 YAML、删除 这些 kind、查看 Pod 日志,以及 把 Service 登记到应用。不包含云厂商建集群。

相关:控制台与认证、Agents、应用(托管模块)、API 参考、数据模型。

控制台 UI

  • 列表: /console/kubernetes — 登记、编辑、删除、测试连接;点击进入浏览
  • 详情: /console/kubernetes/{id} — 选择命名空间;Deployment、Service、Pod、Secret、ConfigMap;Deployment 环境变量;Pod 日志;apply YAML;删除白名单对象;把 Service 登记到应用
  • 权限: console:kubernetes(或 all / admin)
  • 表单:名称、描述、默认命名空间、可选 API Server(后端实际连接集群的地址)、kubeconfig YAML、可选 跳过 TLS 校验(仅实验/自签名环境)、可选 openKMS 运行在此集群内(options.direct_service_access:托管应用直接访问 *.svc.cluster.local,不走 API Server 代理;见 应用)

API 响应永不包含 kubeconfig 明文,仅返回 kubeconfig_configured 与非敏感字段。

存储与加密

表 kubernetes_clusters。完整 kubeconfig 存于 kubeconfig_encrypted,与数据源 / 连接器共用 Fernet。

api_server 为显式覆盖地址;未填写时从 kubeconfig 解析。连通性测试与浏览会把当前 context 的 server 改写成该地址,因此 kubeconfig 里是 127.0.0.1 时,只要填写后端能到达的地址即可连接。更新时省略 kubeconfig(或传空字符串)保留原密文;api_server: "" 则回退为 kubeconfig 中的地址。

连通性测试

POST /api/kubernetes-clusters/{id}/test 解密 kubeconfig、构建客户端并调用 Version API;结果缓存到 last_tested_at / last_test_ok。

资源浏览

接口 用途
GET …/namespaces 命名空间列表
GET …/deployments?namespace= 指定命名空间的 Deployment(默认用集群 default_namespace)
GET …/pods?namespace= 指定命名空间的 Pod
GET …/services?namespace= Service(名称、类型、ClusterIP、端口)
GET …/pods/{name}/logs 最近 Pod 日志(tail,可选 container)
POST …/apply 创建或 patch YAML(Deployment、Service、Pod、ConfigMap)— 不含 Secret。Service 的 spec.ports 在 patch 时整表替换(改端口 80→3200 不会留下两条)。
POST …/delete 删除一个白名单 namespaced 对象
GET|PUT|DELETE …/secrets[/{name}] Opaque Secret(GET 仅 keys;值只写)
GET|PUT|DELETE …/configmaps[/{name}] ConfigMap(数据可见)
GET|PUT …/deployments/{name}/env 容器 env / envFrom(不解引用 Secret)

控制台行操作与 skill 一致:日志 Dialog、确认删除、apply Dialog、Secret/ConfigMap 编辑、Deployment 环境变量。响应永不返回 kubeconfig。带 openkms.io/project-id 标签的 Secret 在控制台只读(请到「项目设置 → 部署」修改)。

登记到应用(Service 行):创建已发布的 template_id=module 应用,绑定 cluster_id / 命名空间 / Service / 端口。除 console:kubernetes 外还需 ontology:write。见 应用。工作负载通过 openKMS 的身份请求头获取当前用户,不应自建登录。

部署密钥(项目)

操作员在 项目设置 → 部署 中加密保存键值,再 同步到集群(写成 Opaque Secret,标签 app.kubernetes.io/managed-by=openkms 与 openkms.io/project-id)。Agent 系统提示里只看到名称/键名,须用 secretRef / secretKeyRef 引用。个人 API key 不能创建或更新部署密钥的值。

开发同步(项目)

POST /api/projects/{id}/kubernetes/dev-sync 打包项目子树(相对路径 local_path),解压到 Deployment 下最新 Ready Pod 的 container_path。可选 reload 在容器内 POST 热重载接口。需要 projects:write 与 console:kubernetes。打包上限 32 MiB,并排除常见构建目录。Skill:kubernetes dev-sync。建议用独立的 dev Deployment(replicas: 1),与登记到应用的 Service 分开。kubeconfig 不离开服务端。Agent 不得用 PUT /api/projects/{id}/files/content 把外部仓库镜像进项目再同步——应在项目内改,或 git pull 后再 dev-sync(见 skill references/kubernetes.md)。

Agents

openkms skill 可列出已登记集群、apply 白名单 kind(不含 Secret)、列出 secrets/configmaps/env、拉取日志、kubernetes register-app,以及 kubernetes dev-sync。API 密钥需要 console:kubernetes(dev-sync 还需要 projects:write;登记应用还需要 ontology:write)。kubeconfig 始终在服务端解密。

仍未覆盖

  • 云厂商自动建集群
  • 项目级默认集群绑定
  • Ingress / 公网 TLS / WebSocket 代理
  • 外部 Secret 管理器(Vault / ESO)
  • DevSpace / 长连接文件同步守护进程