WuKongIM 有界云租约(Cloud Lease)暴露负载节点:Chat Lifecycle 的临时入口设计与实现解析
即时通讯后端【免费下载链接】WuKongIMMore than just IM 不只是即时通讯(IM)项目地址https://gitcode.com/gh_mirrors/wu/WuKongIM点击查看免费下载导读本文围绕 WuKongIM 仓库中的架构决策记录 ADR-0042Expose the load node for the bounded Cloud Lease讲解自动化 Chat Lifecycle 云租约场景下负载节点load node这一受控临时入口的设计逻辑与落地实现。你将理解为什么在无常驻入站与部署访问窗口两大原则之下仍允许负载节点以0.0.0.0/0开放 SSH 22 与 HTTP 80这三个暴露面如何与租约生命周期、双清理层、双 SSH 身份体系协同以及仓库源码与配置中对应的具体实现位置。读完本文你可以直接对照 Run Plan 物化逻辑 与 Cloud Lease 控制面 复现这套临时的、有界的、可回收的入口设计。决策背景从无常驻入站到有界例外WuKongIM 的云端自动化体系围绕两条安全基线展开无常驻入站no-standing-ingress网络入口只应在特定窗口内存在用完即关。ADR-0006 规定 Analysis MCP Gateway 不保持公网可达仅在 Analysis Run 期间临时放行当前 GitHub Runner 出口地址并在无条件清理中关闭规则ADR-0013 规定部署束通过 Deployment Access Window 传输——只临时放行 Runner 地址到模拟器 SSH 端口SSH 仅作为供应传输通道从不暴露给 Codex 或 Analysis MCP。有界云租约Cloud Lease基础设施以租约形式存在从创建起就携带不可变到期时间并通过双清理层强制回收见 ADR-0009。ADR-0042 正是在这两条原则之上开出的范围受限例外仅针对自动化的 Chat Lifecycle 运行允许负载节点在租约有效期内将 SSH 22 和 HTTP 80 对0.0.0.0/0开放。决策原文明确指出这是为了在临时测试服务器上换取操作者与 Codex 的直接访问而刻意用更弱的入站限制换取更强直达性的取舍。四主机拓扑只有负载节点拥有公网暴露面Chat Lifecycle 的基础设施拓扑在 ADR-0041 中确定同一 cn-hangzhou 可用区内的四台同规格阿里云 PostPaid 主机——三台 4 vCPU/8 GiB 的 WuKongIM 服务节点外加一台 4 vCPU/8 GiB 的负载主机后者承载三个 worker、协调、监控、分析与公共代理职责。这一拓扑直接反映在受审模板中。以 rehearsal-v1.json 为例formal 模板 formal-v1.json 同构host_groups: [ { role: service, count: 3, system_disk_bytes: 42949672960, data_disk_bytes: 536870912000, public_ipv4: false }, { role: load, count: 1, system_disk_bytes: 42949672960, data_disk_bytes: 214748364800, public_ipv4: true } ]关键区别一目了然三台 service 节点public_ipv4: false保持私有、离线不暴露任何入站面唯一一台 load 节点public_ipv4: true且 ADR-0042 进一步规定它只开放两个端口22仅密钥 SSH与 80Manager 与 Demo 的明文 HTTP。物化逻辑在 internal/usecase/chatlifecyclerun/run.go 中把模板翻译为 Cloud Lease PlanHostGroupPlan依据group.PublicIPv4决定是否分配公网地址与峰值带宽固定 20 Mbps并把 load 组的数据盘设为 200 GiB对应DataDisks[1].SizeBytes 20030。暴露面清单SSH 22 与 HTTP 80 的具体语义ADR-0042 规定的两条入站规则被物化为 Cloud Lease Plan 的InitialAccess初始授权位于 run.goNetwork: cloudlease.NetworkPlan{ Isolated: true, SingleZone: true, ConservativePublicEgressBytes: template.Network.ConservativePublicEgressBytes, InitialAccess: []cloudlease.AccessGrant{ {ID: public-ssh, TargetRole: load, Protocol: cloudlease.ProtocolTCP, PortFrom: 22, PortTo: 22, SourcePrefix: netip.MustParsePrefix(0.0.0.0/0), Until: expiresAt}, {ID: public-http, TargetRole: load, Protocol: cloudlease.ProtocolTCP, PortFrom: 80, PortTo: 80, SourcePrefix: netip.MustParsePrefix(0.0.0.0/0), Until: expiresAt}, }, },两条规则的语义如下规则 ID端口目标角色源前缀有效期用途public-sshTCP 22load0.0.0.0/0至expiresAt租约到期仅密钥 SSH供操作者与 Codex 直达public-httpTCP 80load0.0.0.0/0至expiresAt租约到期Manager 与 Demo 的明文 HTTP其中expiresAt由物化时间加上模板lease_duration_seconds计算得出run.go。也就是说两条入站规则的寿命与租约寿命严格一致租约结束即规则失效——这正是有界在时间维度上的体现。访问规则本身由 Cloud Lease 控制面校验。在 internal/usecase/cloudlease/control.go 的validateAccessGrant中每条授权必须满足协议为 TCP 或 UDP、端口范围合法、源前缀为合法且已掩码的 CIDR、Until晚于当前时间且不晚于租约到期时间、目标角色必须存在于租约角色集合中。这些校验同时保证规则有界不能超过租约期与目标正确只能打到 load 节点。有界性保障不可变到期与双清理层ADR-0042 的有界不止于规则本身还依赖整条租约的到期机制不可变到期时间租约创建时即写入ExpiresAt模板规定 rehearsal 租约 12 小时、formal 租约 96 小时见 run.go 的LeaseDurationSeconds校验PostPaid 主机在成功或终止后立即释放不刻意持有到到期。双清理层来自 ADR-0009每台计算实例配置云厂商原生的定时释放AutoRelease同时独立的定时 Cleanup Workflow 按标签发现过期运行清除残留计算、磁盘、地址与运行专属网络规则。清理报告必须识别残留计费资源并在厂商无法证明已删除时显式失败。零库存证明release-until-zero.sh 调用 Cloud Lease Release 工作流要求返回wukongim.cloud_lease.release/v1结果中的zero_inventory证据含 selector、账号哈希、观察时间与清理范围否则视为未证明零库存继续依赖定时 sweeper。这意味着负载节点上的入站规则、授权密钥authorized keys都会随租约一起被移除——ADR-0042 原文强调所有规则与授权密钥随租约一并清除all rules and authorized keys are removed with the Lease。仅密钥 SSH禁用密码与 root 登录ADR-0042 明确规定负载节点的 SSH 采用key-only模式密码登录与 root 密码登录保持禁用。这一约束与 ADR-0044 的双 SSH 身份体系配套Deployment 身份加密存放于 GitHub 持有的临时身份用于部署、监控、收尾与证据抢救Codex 诊断身份本地生成的 Ed25519 密钥对私钥只留在 Codex 侧用于实时诊断。两者都随租约到期而失效且只有在证明零库存之后才删除。BootstrapAccess.AuthorizedKeys在物化时被写入这两把公钥run.go且物化逻辑强制codexKey ! deploymentKeyrun.go防止两把身份混用。UI 凭据的传递同样走加密信封。wkchatlifecycle的 access.go 提供seal-access用 Codex Ed25519 公钥对 Manager/Demo 凭据做匿名 sealed-box 加密生成wukongim.chat_lifecycle.encrypted_access/v1信封与open-access校验指纹、请求身份、租约身份与未过期后以 0600 权限写出明文凭据确保即使明文凭据流经 GitHub Artifacts 也不会泄露。为什么是负载节点Manager、Demo 与 Codex 直达选择只有负载节点暴露而非三台服务节点全部暴露直接服务于三类使用场景Manager 与 Demo 的可用性ADR-0045Exclude manual Demo traffic from workload verdicts确认运行期间 Manager 与 Demo 保持可用但只有带运行标记的负载数据进入正确性、重试、延迟与吞吐的判定分母外部演示流量被报告为external_demo_activity不会破坏精确对账。因此 HTTP 80 只开在承载 Manager/Demo 反向代理职责的 load 节点上。操作者与 Codex 的直达运维人员需要在临时测试机上直接检查、修复Codex 需要持本地私钥做实时诊断ADR-0044。这些都不应通过服务节点的数据面进行。服务节点的攻击面收敛三台 service 节点完全私有离线即便 SSH 或 HTTP 被爆破也无法触达集群数据面从而把风险限制在单台代理/负载主机上。这也与 ADR-0040 的边界一致部署动作只消费租约票据与临时 SSH 凭据不持有云资源生命周期权限暴露面管理属于租约控制面wkcloudlease 的grant_access/revoke_access命令与部署行为解耦。实现验证测试如何钉死这套契约仓库测试把仅 load 节点暴露、规则有界到租约期作为可断言契约。在 internal/usecase/chatlifecyclerun/run_test.go 的TestRepositoryRehearsalTemplateMaterializesExactFourHostLease中if lease.HostGroups[0].Count ! 3 || lease.HostGroups[1].Count ! 1 || lease.HostGroups[0].Compute.VCPUs ! 4 || ... || !lease.HostGroups[1].PublicIPv4 || lease.HostGroups[1].PeakBandwidthMbps ! 20 || len(lease.Network.InitialAccess) ! 2 || lease.Network.InitialAccess[0].SourcePrefix.String() ! 0.0.0.0/0 || len(plan.BootstrapAccess.AuthorizedKeys) ! 2 { t.Fatalf(lease plan %v, lease) }测试同时断言两条初始访问规则、源前缀为0.0.0.0/0、load 节点持有公网 IP 且带宽 20 Mbps、授权密钥恰为两把deployment Codex。validateAccessGrant的到期上限校验grant.Until.After(expiresAt)即失败则从控制面钉死规则不得越过租约边界。边界、代价与适用前提最后需要强调 ADR-0042 的适用边界避免误用仅限自动化 Chat Lifecycle 运行。这是刻意开出的范围例外scoped exception不是通用入站策略Analysis MCP、模拟器部署等路径仍遵循各自的无常驻入站原则。代价是刻意的以更强的入站限制换取操作者与 Codex 在临时测试服务器上的直接访问——这是决策原文明示的权衡适用于一次性、短期、到期即毁的测试环境而不适用于生产数据面。明文 HTTP 有边界端口 80 是明文传输之所以可接受是因为它只服务临时测试集群的 Manager/Demo且 Demo 流量被排除在工作负载判定之外ADR-0045。回收是强制的规则、密钥随租约到期失效双清理层兜底最终以零库存证明收尾release-until-zero.sh。综上ADR-0042 是 WuKongIM 云端自动化体系中安全原则与运维可达性的平衡样本它不推翻无常驻入站原则而是把它包装成生命周期有界、目标角色受限、密钥仅存、到期必清的临时例外并通过 Run Plan 物化、Cloud Lease 控制面 与 Cloud Lease CLI 三层实现落地。赞分享即时通讯后端【免费下载链接】WuKongIMMore than just IM 不只是即时通讯(IM)项目地址https://gitcode.com/gh_mirrors/wu/WuKongIM点击查看免费下载相关推荐WuKongIM Cloud Lease 边界抽象从仿真工作流中抽取可复用的临时云资源租约契约WuKongIM Cloud Lease 边界抽象从仿真工作流中抽取可复用的临时云资源租约契约 导读 WuKongIM 的自动化云端仿真Simulation即时通讯后端WuKongIM 云仿真 Analysis Access WindowMCP 分析网关的按需临时入口设计WuKongIM 云仿真 Analysis Access WindowMCP 分析网关的按需临时入口设计 本文聚焦 WuKongIM 云仿真Cloud Si即时通讯后端WuKongIM Chat-Lifecycle 直接操作员工作流从付费租约到同租约修复循环的完整实战指南WuKongIM Chat Lifecycle 直接操作员工作流从付费租约到同租约修复循环的完整实战指南 本指南完整讲解 WuKongIM 仓库中 scrip即时通讯后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI生成内容检测与降AI工具实战评测

AI生成内容检测与降AI工具实战评测

1. 项目背景与需求解析在学术写作领域,AI生成内容的检测问题已成为全球学者关注的焦点。2023-2024年间,多所高校和期刊编辑部开始采用AI检测工具对投稿论文进行筛查,部分机构甚至明确要求论文AI生成率不得超过10%。这种技术监管的突然收紧&am…

2026/10/14 16:25:37 阅读更多 →
ESP32-C6 Zigbee空气质量仪DIY:SCD41+PMS5003接入Home Assistant

ESP32-C6 Zigbee空气质量仪DIY:SCD41+PMS5003接入Home Assistant

1. 为什么我选择用 ESP32-C6 折腾一台 Zigbee 空气质量仪家里那台老式的 Wi-Fi 空气质量检测仪用了快两年,最近实在忍不了了。倒不是传感器坏了,而是它每隔几分钟就往路由器上发一次数据,家里 IoT 设备一多,2.4G 频段挤得跟早高峰…

2026/10/14 16:25:37 阅读更多 →
ESP32-C6 + Zigbee 直连 Home Assistant:低功耗本地化空气质量监测方案

ESP32-C6 + Zigbee 直连 Home Assistant:低功耗本地化空气质量监测方案

1. 为什么我最终选了ESP32-C6加Zigbee这条路线去年冬天我在书房里折腾空气质量监测,前后换了三套方案,最后才落到ESP32-C6加Zigbee直连Home Assistant这条路上。前两套方案分别是Wi-Fi直连和蓝牙网关中转,各有各的难受:Wi-Fi方案功…

2026/10/14 16:25:37 阅读更多 →

最新新闻

PHM故障预测与健康管理落地实战:从状态监控到维护决策

PHM故障预测与健康管理落地实战:从状态监控到维护决策

简介:PHM故障预测与健康管理技术专题文档面向设备维护工程师、可靠性研究人员及智能制造从业者,系统梳理了从传统事后维护转向预测性维护的核心思路。文档围绕状态监测—故障预测—健康管理主线,详细介绍传感数据采集、机器学习分析、故障预测…

2026/10/14 17:10:35 阅读更多 →
FastapiAdmin RBAC权限管理实战:菜单、按钮、数据三级权限配置全流程教程

FastapiAdmin RBAC权限管理实战:菜单、按钮、数据三级权限配置全流程教程

后端前端认证鉴权代码生成移动开发 【免费下载链接】FastapiAdmin FastapiAdmin 是一套完全开源的快速开发平台,提供免费使用。它结合了现代、高性能的技术栈,后端采用Fastapi SQLAlchemy,前端采用基于 vue3 typescript vite pinia Elem…

2026/10/14 17:10:35 阅读更多 →
Verible 解析器设计详解:Flex/Bison 解耦、上下文消歧与未预处理 SystemVerilog 语法分析

Verible 解析器设计详解:Flex/Bison 解耦、上下文消歧与未预处理 SystemVerilog 语法分析

开发工具Lint静态分析硬件开发 【免费下载链接】verible Verible is a suite of SystemVerilog developer tools, including a parser, style-linter, formatter and language server 项目地址: https://gitcode.com/gh_mirrors/ve/verible 点击查看 免费下载 本文…

2026/10/14 17:10:35 阅读更多 →
Flink ProcessFunction底层原理与实战避坑指南

Flink ProcessFunction底层原理与实战避坑指南

1. 这不是“又一个函数接口”:ProcessFunction 为什么被称作 Flink 的“底层API”很多人第一次在 Flink 文档里看到ProcessFunction,下意识会把它当成和 MapFunction、FilterFunction 差不多的“又一个函数式接口”——写个 lambda,传进去&am…

2026/10/14 17:10:35 阅读更多 →
Unity运行时录屏:RenderTexture与CommandBuffer底层实践

Unity运行时录屏:RenderTexture与CommandBuffer底层实践

1. 项目概述:为什么Unity运行时录屏不是“点一下就完事”的事Unity运行游戏时录屏,听起来就是按个快捷键、选个窗口、点下录制——但凡在实际项目里做过三次以上真机测试、联调、演示或用户反馈复现的人,都会立刻摇头。这不是功能有没有的问题…

2026/10/14 17:10:35 阅读更多 →
Spring Boot静态资源404:No mapping for GET根因排查与解决

Spring Boot静态资源404:No mapping for GET根因排查与解决

不知道你是不是也撞过这个警告?页面打开F12一片红,前端同事已经开始催了,后端控制台躺着一行No mapping for GET /static/js/app.js。很多开发第一次看到这个提示直接懵了:静态资源明明放进项目了,路径也核对过好几遍&…

2026/10/14 17:09:26 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →