From ddedce686ad5d2be860deeae538035b00db75074 Mon Sep 17 00:00:00 2001 From: panxiao81 Date: Wed, 16 Sep 2026 15:34:29 +0000 Subject: [PATCH] =?UTF-8?q?=E6=98=8E=E7=A1=AE=20NATS=20Account=20=E5=A4=9A?= =?UTF-8?q?=E7=A7=9F=E6=88=B7=E9=9A=94=E7=A6=BB=E5=8F=8A=E9=98=9F=E5=88=97?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E8=8C=83=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- architecture/constraints.md | 2 +- services/gitea-dynamic-runner.md | 3 ++- services/nats.md | 14 +++++++++++++- verification.md | 2 ++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/architecture/constraints.md b/architecture/constraints.md index 56b8362..98a28d6 100644 --- a/architecture/constraints.md +++ b/architecture/constraints.md @@ -18,7 +18,7 @@ | NetBox 目前是评估,拓扑由 Git 管理 | 不把网页编辑结果当作新的权威数据 | `apps/netbox/README.md`、`CLAUDE.md` | | 现有 privileged DinD runner 只运行可信 workflow | 实例级 runner 不能视为不可信任务隔离边界 | `platform/gitea-runner/README.md` | | 每个动态 Pod/VM 应能独立取得自身 SPIFFE 身份;runner 只提供执行环境 | 登录目标、audience、token 交换及业务凭据生命周期由 workflow 决定;服务自行维护权限 | [Dynamic Runner 设计原则](../services/gitea-dynamic-runner.md),维护者于 2026-09-16 明确 | -| NATS 是集群共享消息服务,目前仅 Dynamic Runner 消费 | 平台服务与消费者职责分开;runner 的 durable 等动态业务约定由其项目文档维护 | [NATS](../services/nats.md),维护者于 2026-09-16 说明 | +| NATS 是集群共享消息服务,原生以 Account 隔离租户,目前仅 Dynamic Runner 消费 | 不把跨 Account 的名称当作全局冲突;runner 所属 Account 内的 durable 等业务约定由其项目文档维护 | [NATS](../services/nats.md),维护者于 2026-09-16 说明 | | zot 匿名入口只读;鉴权入口必须按具体身份授权 | 能认证不代表可以推送;不得给整个 trust domain 写权限 | `apps/zot/README.md` | 通用变更约束:先做适用的 plan/check/diff,再操作现场;不将凭据和 Terraform state diff --git a/services/gitea-dynamic-runner.md b/services/gitea-dynamic-runner.md index 48b62ba..4388fc5 100644 --- a/services/gitea-dynamic-runner.md +++ b/services/gitea-dynamic-runner.md @@ -57,7 +57,8 @@ Gitea workflow_job webhook `microvm-runner-launch` 管理 VM 的临时磁盘、网络及清理,`guest-runner` 领取一次性 注册凭据并以 ephemeral 模式注册。`pod-worker` 创建 Kubernetes 执行 Pod。 该次 README 描述同一 runner label 的 worker 共享同一个 durable consumer,通过增加 worker -或 capacity 扩容。具体 durable 名称和后续调度改动以项目文档为准。 +或 capacity 扩容。这是 runner 所属 Account 和 stream 内的协调约定,不是跨 NATS Account +的全局命名要求。具体 durable 名称和后续调度改动以项目文档为准。 [NATS](nats.md) 作为集群共享服务部署;维护者说明当前只有 Dynamic Runner 消费它, 不因此将 NATS 视为 runner 私有组件。 diff --git a/services/nats.md b/services/nats.md index aa208e3..772081b 100644 --- a/services/nats.md +++ b/services/nats.md @@ -16,10 +16,22 @@ sources: 共享服务的定位不随当前消费者数量改变。NATS 属于平台基础设施, Dynamic Runner 使用它传递任务消息,但不独占消息服务的用途和生命周期。 +## 多租户边界 + +NATS 原生通过 **Account** 提供多租户隔离。不同 Account 拥有各自的 subject 命名空间 +和 JetStream 资源范围,多个消费者可以使用同一套 NATS 服务。 +不同 Account 下的 stream、subject 或 durable 名称不会仅因重名而互相冲突。 + +因此,讨论队列与 consumer 必须同时明确所属 Account、stream 和消费者约定, +不能把不同租户的名称当作集群全局冲突。跨 Account 通信需要显式配置, +同一 Account 内的 worker 协调则遵循所属项目的约定。 +这一共享服务的隔离定位由维护者于 2026-09-16 补充。 + ## 如何接入与维护 平台部署、连接入口、TLS 和账户配置以 homelab-infra 的 `platform/nats/README.md` -及其配置为维护入口。新增消费者应使用适合自身的账户与权限,不能直接沿用 runner 的业务约定。 +及其配置为维护入口。新租户通过独立 Account 及对应权限接入;属于同一租户的消费者 +按该 Account 的业务约定使用资源,不能把 runner 的约定推广为整个集群的统一命名要求。 Dynamic Runner 的 stream、subject、durable 名称、worker 配置和具体启用范围,以 [gitea-dynamic-runner 项目文档](https://git.ddupan.top/panxiao81/gitea-dynamic-runner) diff --git a/verification.md b/verification.md index 5739ffc..67dd9c7 100644 --- a/verification.md +++ b/verification.md @@ -10,6 +10,8 @@ NATS 已作为集群共享服务部署,当前唯一消费者为 Dynamic Runner 维护者明确 Dynamic Runner 正在积极开发,其启用范围、durable 名称和实现进度以 [项目文档](https://git.ddupan.top/panxiao81/gitea-dynamic-runner)为准。 不再将旧示例的 durable 名称差异或启用范围列为独立待核实项。 +NATS 原生通过 Account 隔离租户,跨 Account 的名称不构成全局冲突; +runner 的队列协调约定仅在其所属 Account 和 stream 范围内讨论。 Authelia 已按维护者于 2026-09-16 的说明标为 **active、唯一的主 OIDC broker**, 见 [Authelia](services/authelia.md)。原工作区的“OIDC 后续启用”描述待同步,