架构

Web Terminal 通过平台的 WebSocket 服务将浏览器会话连接到 Kubernetes Pod。web-cli 后端负责管理 cluster 客户端、创建 terminal Pod,并将交互式流转发到浏览器。

交互图

以下时序展示了 terminal 会话如何建立,以及命令输出如何返回到浏览器。

请求流程

请求流程如下:

  1. 在平台页面右上角点击 Web CLI
  2. 平台会打开位于 /console-webcli 的 Web Terminal 会话页面,该页面在左侧窗格中列出可用的 cluster 及其 node。
  3. 选择一个 cluster 或 node 后会打开一个子标签页,前端通过平台服务为该目标打开 /auth/v1/pod/shell WebSocket。
  4. 平台审计中间件处理该 WebSocket 请求并将其转发给 web-cli。
  5. terminal 处理程序对请求进行身份验证,并将所选项解析为 cluster 或 node terminal。
  6. terminal manager 在系统 namespace 中创建或复用一个 terminal Pod。
  7. 处理程序将 WebSocket 流连接到 Pod exec 会话。
  8. manager 记录活动并定期对活跃会话进行协调。

会话和 Pod 管理

terminal manager 在本地存储活跃会话记录,通过 active-terminals ConfigMap 进行同步,在重启后恢复会话,并移除超过空闲超时的会话。它会使用 web-terminal=true label selector 查找 terminal Pod,并在创建新的 cluster terminal Pod 之前检查 cluster terminal 容量。有关会话生命周期和 Pod 语义,请参见 Terminal SessionsTerminal Pods

缓存的 cluster 元数据

client manager 会缓存 cluster 客户端和 Registry 元数据一小时。该缓存可减少重复的客户端创建,并会在生命周期到期或相关凭据变更时失效。

可观测性边界

该服务在 /terminal/metrics 暴露 Prometheus 指标。身份验证、授权和审计处理通过平台服务器和中间件集成提供。