架构
Web Terminal 通过平台的 WebSocket 服务将浏览器会话连接到 Kubernetes Pod。web-cli 后端负责管理 cluster 客户端、创建 terminal Pod,并将交互式流转发到浏览器。
交互图
以下时序展示了 terminal 会话如何建立,以及命令输出如何返回到浏览器。
请求流程
请求流程如下:
- 在平台页面右上角点击 Web CLI。
- 平台会打开位于
/console-webcli的 Web Terminal 会话页面,该页面在左侧窗格中列出可用的 cluster 及其 node。 - 选择一个 cluster 或 node 后会打开一个子标签页,前端通过平台服务为该目标打开
/auth/v1/pod/shellWebSocket。 - 平台审计中间件处理该 WebSocket 请求并将其转发给 web-cli。
- terminal 处理程序对请求进行身份验证,并将所选项解析为 cluster 或 node terminal。
- terminal manager 在系统 namespace 中创建或复用一个 terminal Pod。
- 处理程序将 WebSocket 流连接到 Pod exec 会话。
- manager 记录活动并定期对活跃会话进行协调。
会话和 Pod 管理
terminal manager 在本地存储活跃会话记录,通过 active-terminals ConfigMap 进行同步,在重启后恢复会话,并移除超过空闲超时的会话。它会使用 web-terminal=true label selector 查找 terminal Pod,并在创建新的 cluster terminal Pod 之前检查 cluster terminal 容量。有关会话生命周期和 Pod 语义,请参见 Terminal Sessions 和 Terminal Pods。
缓存的 cluster 元数据
client manager 会缓存 cluster 客户端和 Registry 元数据一小时。该缓存可减少重复的客户端创建,并会在生命周期到期或相关凭据变更时失效。
可观测性边界
该服务在 /terminal/metrics 暴露 Prometheus 指标。身份验证、授权和审计处理通过平台服务器和中间件集成提供。