Files
LinkPort/docs/live-target-switch.md

4.9 KiB
Raw Permalink Blame History

运行中切换网关目标

此功能用于解决连接关系已修改但运行中的监听仍使用旧目标,以及不同网关账号需要访问不同目标的问题。账号级连线表达独立路由;切换保存成功后会断开该网关的现有客户端连接,客户端重连后直接使用保存后的新配置快照。详细设计原因见 变更原因与设计记录。

你可以在「网关服务」点击「切换目标」,先选择具体网关账号,再选择相同协议的目标服务和目标账号,点击「保存并切换」。Redis、MongoDB 无认证配置和 TCP 映射会显示一个明确但不可编辑的空账号选项。也可以在「拖拽连线」从运行中网关的账号行连接到目标账号行。

在切换子页面中选择具体网关账号,或在「拖拽连线」拖动蓝色网关卡片内的账号按钮,可以只修改该账号的目标服务和目标账号,其他账号不变。每个账号有自己的连线,支持依次点击两端,便于手机操作。拖动卡片顶部只移动服务位置,画板支持平移、缩放和全屏,详见 服务连线画板。未启动的网关可以逐条连线,所有启用账号完成映射后才能启动。

网关服务卡片和目标服务卡片均不建立关联;界面不提供「全部网关账号」批量映射。每次切换只更新一个明确的网关账号到一个目标账号,其他账号的目标、密码、来源限制和读写权限均保持不变。为保证运行实例不再保留任何旧目标会话,保存成功后该网关所有账号的现有客户端连接都会断开。

切换不关闭监听端口,也不停止网关。服务器发布新配置后会取消并关闭该网关已经接受的全部客户端连接,包括尚在认证的连接以及其他账号的连接;正在执行的请求、事务和 SSH/SFTP 会话会中断。客户端重新连接同一监听地址时直接使用新配置,其中被切换的账号路由到新目标,其他账号仍使用各自未变的映射。

服务器先校验目标协议、账号映射及 SSH 主机指纹,再保存并发布运行配置;只有这些步骤全部成功后才断开现有连接。保存失败时继续使用原目标并保留原连接。切换不等于连通性验证,可在目标服务页面先测试连接。SSH/SFTP 目标仍使用已确认的主机指纹校验策略。

目标与网关的完整配置编辑器在运行中也可保存。目标地址、账号、TLS、出口和高级选项更新后,所有引用该目标的运行网关会在同一次保存成功后发布新快照;网关监听、认证账号、来源限制和访问策略也可直接更新。新连接使用新快照,已经接受的连接继续使用接受时的旧快照。修改监听 IP 或端口时,服务端先绑定候选 listener,再持久化并切换;候选绑定或持久化失败时,数据库、运行快照和原 listener 均保持不变。切换成功后原 listener 不再接受新连接,但其已接受连接继续运行。

服务协议仍不可修改。并发编辑使用运行快照比较;若保存期间已有更新、启动或停止先完成,接口返回 409,操作者需刷新后重试,不会覆盖较新的配置。共享文件资产或连接资产仍按完整影响范围限制运行中更新和删除;WebDAV 整体配置替换涉及新增、删除和全局引用,仍要求本机全部网关停止。

SSH/SFTP 目标的主机、端口或出口改变且会影响关联网关时,保存前只探测候选主机公开密钥,不提交认证凭据。接口以 target_host_confirmation 返回 SHA256 指纹;用户核对后带该指纹重试,服务端再次探测且结果一致才保存并发布。

API:POST /api/v1/proxies/{id}/target,界面请求始终包含 gatewayAccountId、targetId 和 targetAccountId。真实网关账号提交稳定账号 ID;Redis、MongoDB、TCP 的 UI 空账号提交空字符串。目标账号列表为空的 Redis/MongoDB 及 TCP 目标允许空 targetAccountId,目标一旦配置真实账号就必须提交有效账号 ID。省略 gatewayAccountId 的旧 API 批量语义仅为兼容既有调用保留,管理界面不再暴露。服务端按当前目标配置校验,失败不会修改已保存绑定。接口适用于已停止和运行中的网关;个人会话写请求需要 CSRF,API Token 需要写入作用域。不接受网关密码或监听字段。成功返回脱敏配置及当前运行状态,绑定会持久保存。

验证使用隔离 SQLite、本机 TCP/SSH fixture,覆盖显式切换成功后断开旧连接、重连使用新目标、保存失败保留旧连接、监听保持运行,以及普通配置更新的新旧快照分流、监听预绑定、CAS、SSH 候选指纹和接口权限;未连接真实数据库。本次开发阶段调整按要求未执行前端构建和浏览器回归,完整结果见 测试记录。