Kubernetes 与 Helm¶
每个领域产品都是可独立运行的完整系统,且都能运行在 Kubernetes 上。套件层并不会 替你部署各产品——每个产品拥有自己的命名空间、Helm release 与发布生命周期。
一套代码,两种形态¶
Link 最能说明这种交付二元性:一套代码,两种形态。
| 形态 | 位置 | 依赖 |
|---|---|---|
| 单机(all-in-one) | 单个静态二进制 + 本地栈 | 自带数据库、消息骨干与可选对象存储 |
| Kubernetes / K3s | 产品的 Helm Chart | 自带数据库与消息骨干;对象存储复用或自带 |
同一个产品二进制同时服务两种形态。最小的有状态依赖只包括一个数据库与一个消息 骨干;对象存储是可选的(平台托管固件上传需要它,外部 URL OTA 不需要)。
命名空间与拓扑¶
在参考拓扑中,每个产品位于以自身命名的独立命名空间,而身份平面整套件只部署 一套:
flowchart TB
subgraph CENTER["中心管理集群"]
ID["nereididentity\n身份引擎"]
SPHERE["nereidsphere\n门户 · OIDC RP · 票据中枢"]
HORIZON["nereidhorizon\n边缘分发"]
FORGE["nereidforge\n模型工厂"]
end
subgraph CONN["连接面(水平扩展)"]
LINK["nereidlink\nMQTT 入口 · ingest · 规则"]
end
SPHERE -->|ticket / OIDC| LINK
SPHERE -->|ticket / OIDC| HORIZON
ID -.->|issuer| SPHERE
LINK -->|mTLS| EDGE["NE\n现场网关"]
- 身份是整套件唯一的一个平面。 无论有多少个连接面集群,它们都对着同一个 issuer 认证,而不是各自运行身份服务。
- 连接面靠加集群扩展,而不是靠加命名空间:按租户或设备号段隔离 MQTT 入口、 ingest 与时序负载。
- 多租户是产品概念,不是命名空间边界。 租户存在于产品的业务模型内; Kubernetes 命名空间不是租户。
生产形态下每个产品命名空间各自带有资源配额、默认拒绝并显式放行的网络策略,以及 独立的仓库拉取凭证。实验 / POC 安装则可改用单一 all-in-one 命名空间。
Helm Chart 与版本¶
Chart 来自内部 Chart 仓库。所有派生版本——Chart 版本、其 appVersion 与镜像
标签——都源自唯一的 VERSION 事实来源,因此不会漂移:Chart 版本去掉前导 v,
而 appVersion 与镜像标签原样保留。镜像标签留空时回退到 Chart 的 appVersion。
先部署身份平面,再部署门户,最后部署各产品:门户是套件唯一的 OIDC 依赖方,必须在 产品能够验证交接之前就可达。
NereidSphere 的部署行为¶
Sphere是采用密封 Cookie 会话的无状态门户,其 Chart 暴露了安装时最 关键的几个选择:
- 认证模式。 默认 Sphere 对着身份引擎认证。当身份平面不可达时,还提供带 bcrypt 账号(部署时声明)的应急本地模式用于灾难恢复——它仅是最后的应急通道,绝 不是生产默认。见 SSO 与 OIDC。
- 多副本票据安全。 交接票据是一次性的。当 Sphere 有多个副本时,一次性认领必须 共享,因此 Sphere 使用 Valkey 键值拓扑做跨副本强制。若无法确认一次性,它会 失败即关闭(fail closed),而不冒重放风险;进程内存存储在仅单副本的开发 环境才支持,且 Chart 拒绝以此渲染多副本。
高可用与自带基础设施¶
- Link 高可用以可选叠加层交付:多应用副本、CloudNativePG PostgreSQL、 多节点 NATS JetStream、读写多路(RWX)共享存储与 NATS-KV 选主。默认仍为单节点。
- 自带基础设施:关闭自带依赖,改为提供已有数据库、消息骨干与对象存储的端点 与凭据。若选了外部依赖却把端点留空,Chart 会快速失败。
私有仓库¶
所有部署镜像都来自私有仓库(参考部署中为 Harbor);部署期不拉取任何公共仓库。 仓库拉取凭证会带入各命名空间,节点级镜像源配置使容器运行时能在气隙集群上解析该 仓库(见 气隙安装)。
运维文档
逐步的安装与运维细节在各产品仓库中: github.com/NereidAI。