即时通讯后端【免费下载链接】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),仅供参考