日期:2026-06-06
状态:待评审
平台:macOS + Windows
技术栈:Electron + 原生特权 Helper + 内嵌 ktctl/kubectl
团队通过 Kubernetes + Istio 实现多套虚拟环境,开发者本地联调依赖 ktctl 命令行工具,存在以下痛点:
connect 等操作需要管理员权限,频繁输入密码mesh 需手写 namespace、labels、virtual-env、selector 等开发跨平台桌面工具,提供与 ktctl 等价的三项核心能力:
| 能力 | 说明 |
|---|---|
| Connect | 打通本地与 K8s 容器网络,解析集群 Service DNS |
| Forward | 将集群某 Service 端口转发到本地 |
| Mesh | 将某虚拟环境流量导向本地服务进行调试 |
| 维度 | 决策 |
|---|---|
| ktctl 来源 | 官方 kt-connect Release,版本锁定 0.3.7 |
| kubectl | 与 ktctl 一并捆绑进安装包,绝对路径调用 |
| 提权方案 | 特权 Helper,启动/Connect 时授权一次,后续免输密码 |
| 技术栈 | Electron(主进程 + React 渲染进程) |
| Mesh 配置 | 全自动发现带 virtual-env 标签的工作负载 |
| MVP 范围 | Connect + Forward + Mesh 全包含,含会话管理、日志、recover/clean |
采用 Electron + 原生特权 Helper + 内嵌 CLI(方案 1):
不采用:每次 connect 临时提权(无法解决反复输密码);v1 自研网络层(成本高、行为不一致)。
┌─────────────────────────────────────────┐
│ Electron App (普通权限) │
│ ├─ Renderer: React UI │
│ ├─ Main: 进程编排 / IPC / 配置持久化 │
│ └─ 内嵌 kubectl(发现)+ ktctl(forward/mesh)│
│ │ connect 走 IPC ↓ │
└─────────┼───────────────────────────────┘
▼
┌─────────────────────────────────────────┐
│ Privileged Helper (Go 小二进制) │
│ 一次授权后常驻,执行 ktctl connect │
└─────────────────────────────────────────┘
resources/bin/
darwin-arm64/ktctl, kubectl
darwin-x64/ktctl, kubectl
win-x64/ktctl.exe, kubectl.exe
主进程按 process.platform + process.arch 解析绝对路径,不依赖系统 PATH。
| 能力 | 执行方 | 是否提权 |
|---|---|---|
| Connect | Helper → ktctl connect --dnsMode hosts:<ns> |
是(一次) |
| Forward | Main → ktctl forward <svc> <local:remote> -n <ns> |
否(本地端口 >1024) |
| Mesh | Main → ktctl mesh,参数由自动发现生成 |
否 |
Connect 命名空间预设:扫描 app-* / infr-*(与现有 zt-ktctl 流程一致),UI 可勾选缩小范围。
单窗口三栏:顶栏(context、Helper 状态)+ 左侧导航 + 主工作区 + 右侧会话/日志面板。
导航项:联调首页、网络连接、端口转发、流量 Mesh、会话管理、设置。
kubectl get deploy -A -l virtual-envkubectl get svc)与首页相同能力,暴露全部参数(selector、versionMark、expose 等),底部命令预览可复制。
集中展示 connect/forward/mesh 会话;操作:停止选中、全部停止、recover、clean。危险操作二次确认。
集群(kubeconfig、context)、二进制版本、Helper 管理、高级默认值、诊断日志导出。
| 路径 | 步骤 | 是否需要 Connect/Helper |
|---|---|---|
| A 只调试本服务 | 首页选负载 → Mesh | 否 |
| B Mesh + 访问集群下游 | Connect → Mesh | 是 |
| C 只访问集群管理页 | Forward | 否 |
JSON Lines over Unix Socket(macOS)/ Named Pipe(Windows)。
| 消息 | 方向 | 说明 |
|---|---|---|
ping |
Main → Helper | 健康检查 |
connect |
Main → Helper | namespace、dnsMode、kubeconfig、context |
disconnect |
Main → Helper | 停止 connect |
shutdown |
Main → Helper | 应用退出 |
log |
Helper → Main | stdout/stderr 流 |
status |
Helper → Main | starting/running/failed/stopped |
error |
Helper → Main | 结构化错误 |
安全:仅 127.0.0.1;命令白名单;ktctl 路径写死,禁止任意 shell。
kubectl get deploy -A -l virtual-env -o json
→ 解析 labels: virtual-env, app.kubernetes.io/env, app.kubernetes.io/name
→ 关联 Service 端口
→ 生成 MeshProfile(缓存 TTL 30s)
→ 组装 mesh 命令:
ktctl mesh <name>
--namespace <ns>
--versionMark "virtual-env:<virtual-env>"
-l "app.kubernetes.io/env=<env>,app.kubernetes.io/name=<name>,virtual-env=<virtual-env>"
--expose "<local>:<container>"
--mode manual --useShadowDeployment
--podCreationTimeout 120
pending → starting → running | failed → stopped
Session 字段:id、type、target、namespace、ports、virtualEnv、pid、state、startedAt、logs(环形缓冲 2000 行)、command(脱敏展示)。
应用退出:若有 running 会话,弹窗选择「全部停止并 recover / 保持后台 / 取消」。
| 层级 | 检测时机 | 典型错误 | UI 处理 |
|---|---|---|---|
| L0 环境 | 启动 | 二进制缺失、无 kubeconfig | 阻断页 |
| L1 集群 | 操作前 | context 不可达、RBAC 403 | Toast + 检查指引 |
| L2 参数 | 提交前 | 端口占用、Service 不存在 | 表单 inline |
| L3 运行时 | 子进程 | Shadow Pod 超时、镜像拉取失败 | 日志高亮 + 排查建议 |
| L4 Helper | IPC | 未授权、Helper 崩溃 | 顶栏红灯 + 重新授权 |
诊断日志:~/.kt-virtual-env/logs/;设置页支持导出诊断包(日志 + 脱敏配置)。
配置持久化:~/.kt-virtual-env/config.json(kubeconfig 路径、context、最近命名空间、Connect DNS 勾选记忆)。
kt-virtual-env/
├── apps/desktop/ # Electron 主应用
│ ├── src/main/ # 主进程
│ ├── src/preload/
│ └── src/renderer/ # React UI
├── packages/
│ ├── shared/ # 类型、错误码、Session 模型
│ └── k8s-discovery/ # MeshProfile 生成
├── native/privileged-helper/ # Go Helper
├── resources/bin/ # ktctl 0.3.7 + kubectl
├── scripts/fetch-binaries.sh
└── docs/superpowers/specs/
Renderer:React + TypeScript + Tailwind;Zustand 状态;contextBridge 类型安全 IPC。
| 平台 | 产物 |
|---|---|
| macOS arm64/x64 | .dmg |
| Windows x64 | NSIS .exe |
electron-builder extraResources 打入平台二进制。体积预估约 190MB/平台。
CI 流程:fetch-binaries(SHA256 校验)→ build helper → build desktop → electron-builder →(可选)签名公证。
版本锁定:ktctl 0.3.7、kubectl 1.28.x(参数化)、Electron 固定版本。关于页展示全部组件版本。
| 类型 | 范围 |
|---|---|
| 单元 | MeshProfile 解析、命令组装、端口检测、错误码映射 |
| 集成 | mock kubectl/ktctl 输出,Main 进程编排 |
| E2E 手动 | 真实集群:Connect DNS、Forward 访问、Mesh 流量、recover/clean |
| 跨平台 | macOS arm64 + Windows x64 各一遍 |
| 不做 | 原因 | 后续版本 |
|---|---|---|
| Linux 桌面支持 | 用户范围外 | v2 评估 |
| 自动更新(app + 二进制) | 需内网更新服务 | v1.1 |
| 多集群同时连接 | 复杂度高 | v1.1 |
| 替代 kubectl 的完整 K8s 管理 | 超出联调工具定位 | 不做 |
| 自研网络隧道 | v1 封装 ktctl | 长期评估 |
| ktctl exchange / preview | 非当前痛点 | 按需 |
| 团队定制 zt-ktctl 分支 | 已确认用官方 0.3.7 | 若官方不满足再评估 |
| 完全零管理员权限的 Connect | 系统限制,无法透明 DNS | 提供 mesh/forward 免提权路径 |
| 云同步配置 | 无需求 | 不做 |
| 版本 | 内容 |
|---|---|
| v1.0 | Connect + Forward + Mesh + 会话管理 + Helper 提权 + 自动发现 |
| v1.1 | 内网自动更新;多 forward 模板;最近联调历史 |
| v1.2 | IDE 插件联动(如 VS Code 一键 Mesh);托盘常驻 |
| v2.0 | Linux 支持;多集群 profile 切换 |
现有 zt-ktctl Cursor Skill 面向 AI Agent 命令行编排,本桌面工具:
references/connect.md 等)作为命令组装的权威来源| 风险 | 缓解 |
|---|---|
| macOS Helper 签名/公证复杂 | v1 可先内部分发 unsigned;文档说明允许步骤 |
| kt-connect 项目停更(官方 0.3.7) | 版本锁定 + 行为集成测试;长期评估 fork |
| 集群 RBAC 不足 | 启动前 RBAC 预检,明确缺失权限列表 |
| Electron 包体大 | 接受 ~190MB;内网分发 |
| Shadow 镜像拉取失败 | 错误提示 + 集群侧检查指引 |
virtual-env 的 Deployment,点选后一键 Mesh 成功