EOELAB互联云 是一个“本地域优先的联邦计算系统(Federated Sovereign Compute System)”
- 我们尊重计算集群物理隔离的事实,为了在本地域内维持高性能计算与强一致存储能力,不寻求建立跨中心的数据网络
- 我们认识到现实总存在破坏者,因此基于零信任出发设计联邦网络,并且取消匿名访问
- 我们理解现实中公网资源匮乏,因此提供联邦网络来接入不可直达的设备
- 由于非商业化设计目标,EOELAB 的互联模型以可控性与边界清晰性为优先,而非无限扩展性
- 我们尊重数字主权,因此联邦设施是随时拔插的
联邦计算系统中包括三类设备:
- 本地域:基于Incus的自治系统,拥有完整的权限认证能力与独立的调度能力(vm lxc oci同层调度)
- 本地服务设备:加入联邦并提供服务,但不具备自治能力的节点
- 本地设备:加入联邦只访问且不提供服务的设备
本地域
本地域是一个有唯一 Incus 控制面,能独立对外提供服务的本地Incus节点/集群
本地域可以架构为:
- 单Incus节点
- 集群:一个封闭网络设施下的所有节点组成的集合,满足:
- 存在三个及以上Incus节点组成集群
- 低延迟网络互通(L2/L3),并存在一个独立的边界网关
- 数据设施接口一致
计算设施
运行时
- 虚拟化
- VM:基于KVM的虚拟化
- 仅作为需要内核特权时的特殊运行时
- 有性能损失,有额外负担,启动速度较慢
- 系统层容器
- LXC:linux容器
- 标准运行时
- 系统层容器仅支持Linux,禁止特权容器,允许嵌套运行oci容器
- 应用层容器
- OCI:常规oci容器
- 服务运行时
- Cenv 作为 EOELAB 标准运行时,用于保证开发、CI/CD、生产环境和运行时的一致性与可复现性
- 构建仓库:codeberg.org/eoelab/cenv
- 镜像仓库:crpi-0fzeutaz68uv7lwt.cn-hangzhou.personal.cr.aliyuncs.com/eoelab/cenv
节点配置
- 计算设施节点主机名使用
Domain-Number命名方式,Domain由maintainer填入联邦唯一的域名,Number从1开始计数,例如core-1 - 默认启用了2MiB Hugepages,默认挂载/dev/hugepages
- 使用Debian stable + Incus stable(https://github.com/zabbly/incus)
鉴权
TLS
TLS鉴权是本地域维护者的最终鉴权方法,以下是两种方法添加鉴权,注意如果服务器不支持webui,则只能通过cli添加鉴权/访问
- 在webui生成crt与pfx密钥对,将crt发送至主机并信任,继续根据页面提示添加pfx,如果需要cli连接,如下所示
openssl pkcs12 -in NAME.pfx -clcerts -nokeys -out ~/.config/incus/client.crt
openssl pkcs12 -in NAME.pfx -nocerts -nodes -out ~/.config/incus/client.key
incus remote add ALIAS IP/NS --accept-certificate
- 直接执行
incus remote add ALIAS IP/NS,在主机生成trust token后添加
OIDC
OIDC鉴权是本地域用户/额外维护者鉴权方式,可以通过添加联邦鉴权设施得到
数据设施
存储接口
接口是最终暴露在计算设施中的数据入口,由存储服务接口与存储介质评级拼接:
- 存储服务接口:包括 bs fs os,代表块设备语义,文件系统语义,对象语义
- 存储介质评级:包括 介质 容量 性能(写延迟+带宽)
- 介质:h s n ,h代表SAS/SATA协议机械磁盘,s代表SAS/SATA协议固态磁盘,n代表NVME协议固态磁盘
- 容量:s m l e , s为1T以内, m为1-4T, l为4-12T, e为12T以上
- 性能:h m l ,h代表设备指标更好,m居中,l最差。初始设备一般分配l编号
注意:集群必须保证各节点数据接口一致,保证集群可以重平衡实例,但本地存储不支持集群自愈合
存储备份
为了服务稳定与可靠,默认情况下我们要求数据具有备份策略,按照实际策略,有三类
- 多副本
- 至少保证副本数量为2(raid1/10,ceph设置size为2)
- 奇偶校验码
- 纠删码
注:我们假设故障场景是任意主机的任一磁盘故障离线
存储驱动
我们不准备支持LINSTOR相关规范,因为: * 不支持实例间共享自定义卷 * 不支持在多个节点之间共享同一 LINSTOR 资源组 * 不支持从旧快照恢复
基于Btrfs提供本地存储
Btrfs接口为fs,由节点本地提供
基于TrueNAS提供小/中规模共享存储
- TrueNAS接入Incus接口为
bs,这是Incus原生支持的方式 - TrueNAS节点命名为
nas-Number- 小规模保持副本方式+高可用性部署
- 中规模(12+ HDD)可以考虑迁移到纠删码部署
- TrueNAS可以扩展存储接口,但以下接口不能接入Incus(带来额外负担、失去优化路径):
基于Ceph提供大/超大规模共享存储
- Ceph支持全部存储接口,os兼容Amazon S3与Swift接口
- 支持Dashboard,基于Web-UI实现管理Ceph的功能
- Crush rule策略:
- 数据分布策略:将存储介质评级同等的设备聚合
- 混合设备策略:默认不跨介质 WAL/DB 绑定,避免共享 SSD 作为多个 OSD 元数据设备时,在介质失效场景下引发批量 OSD down 及 PG 大规模降级的风险。
- Pool接口:与最终接口保持一致
- 附加功能后缀:
data:一个用于bs(在使用纠删码情况下)/fs的附加后缀,标识该存储池用于数据存储metadata:一个用于bs(在使用纠删码情况下)/fs的附加后缀,标识该存储池用于元数据存储
- Ceph架设方式:独立Ceph集群,节点命名为
ceph-Number- 当存储规模、性能或接口需求超出 TrueNAS 能力范围时,可部署独立 Ceph 集群
- 默认不推荐超融合部署,以避免计算与存储故障域耦合
- 存储选择
- fs支持多节点读写,读延迟低,带宽表现好,尤其是较大的文件,但写延迟相对较高且延迟时间不稳定,适用于对I/O延迟不大敏感的文件读写,以及非海量的小文件存储支持
- bs读写延迟双低,适用于对I/O延迟要求较高,且无多个节点同时读写数据需求的应用,例如数据库
- os是专门用于大数据存储的方案或海量小文件
网络设施
- 本地域内会存在固有的两个网络模型:
- 物理网络:由真实网络设备组成的物理网络,用于Incus集群本地物理互联
- 虚拟网络:由bridge虚拟网桥产生的内部网络,用于实例网络接入/实例间互联
- Incus 默认仅使用 bridge 作为标准网络接入方式,因为 bridge 是完全受 Incus 控制的虚拟网络设施,支持完整的网络行为管理能力,包括:
- ACL
- NAT/地址管理
- 网络隔离
- 流量观测与策略控制 注:
- 虽然 OVN 同样属于完全受控的虚拟网络方案,但其更适用于跨节点、跨机架的大规模 SDN 控制平面;EOELAB 不构建跨域控制面,也不尝试抽象跨数据中心网络,因此默认不引入 OVN
- SR-IOV 属于物理网络直通能力,会将实例直接接入物理二层网络,绕过部分虚拟网络控制能力,因此不作为标准网络设施。仅在存在明确高性能网络需求时才应考虑使用,例如:
- GPU 集群 RDMA
- 特定 HPC 场景
- 超低延迟数据交换
域内
物理网络地址池由维护者根据真实网络环境决定,通常使用 RFC1918 私有 IPv4 地址空间:
- 192.168.0.0/16
- 10.0.0.0/8
- 节点必须具有静态稳定的IP地址,不使用DHCP动态分配
物理 IPv6 使用原则:
- 具备公网 IPv6 可达性时,直接使用公网 IPv6
- 如果 IPv6 仅为 NAT/ULA/不可公网互通地址,则建议关闭物理 IPv6 网络
虚拟网络默认仅启用 IPv4 ;IPv6 属于可选能力,而非默认要求
- 由于虚拟网络属于域内受控网络,IPv6 的全局可路由优势并不明显,还增加 ACL、观测与策略控制复杂度
用户态接口使用br-<project>命名方式,地址池默认使用 172.16.0.0/12 私有地址空间,例如br-db -> 172.16.1.0/24
- 如果存在SR-IOV接入,则使用sriov作为接口前缀
默认情况下实例网络接入设备设置为eth0
- 只有vm在需要proxy设备的情况下需要设置静态地址,设置完成后在network会看到两个eth0设备,这只是一种覆盖。设置方法是:在yaml内
devices下添加
eth0:
ipv4.address: 实例静态ip
network: 接入网络
type: nic
实例使用proxy设备做端口转发以暴露服务:
- 容器(lxc/oci):
Listen设置为外部端口(需要满足端口池要求),connect设置为内部端口 - vm:
NAT mode启用,Listen的ip设置为节点ip,端口设置为主机端口,connect的ip设置为实例静态ip,端口设置为实例端口
域边界
框架:OpenWrt
- 本地域的公网出口/NAT边界,负责维护本地域的主机物理互联网络,也是边界网关;建议使用白名单策略,只开放真实服务端口
- 单节点本地域直接使用Incus的Proxy设备即可实现边界入口
- 尊重服务默认端口,例如3306优先分配给mysql,避免造成端口歧义/理解成本
- 服务默认端口:22 ssh, 80 http, 443 https, 53 dns, 123 ntp,2049 nfs, 3306 mysql, 5432 postgres, 6379 redis
核心本地域
核心本地域(Core Domain,coreNumber命名)是由 admin 团队长期维护、持续提供公共服务能力的本地域,这是为了保证 EOELAB 社区与联邦生态具备长期持续运行能力。
核心本地域可能承担:
- 社区公共服务
- 长期在线服务
- 公共数据库
- 测试与孵化性质服务
- 无其他本地域愿意接纳的公共实例
- 联邦协作相关基础服务
注意:
- 核心本地域仍然属于标准本地域,而非中央控制域
- 核心本地域不拥有其他本地域的控制权限
- Core 命名来源于长期维护、公共责任与社区信任,而非特殊权限
- 由于资源限制,核心本地域可能根据资源情况限制服务接入
联邦设施
- 为了克服本地域权限模型重复,无公网设备互联难度大,我们将基于以下跨域设施,构成一个联邦计算系统
- 为了保证联邦设施的可访问性,联邦设施会部署在公共云上,一些辅助节点可以由本地域贡献(headscale 中继节点)
- 联邦设施由 admin 团队集中运维,但不被设计为实时高可用集群,原因:
- 联邦设施不承载业务数据,短期不可达不影响各本地域独立运行
- 已签发的鉴权 token 在设施离线后仍可在有效期内继续使用
- 韧性策略设计:采用冷备份 + 可重建 + DNS 多端点策略保证长期可用性,降低运维复杂度的同时避免单一基础设施长期不可恢复的风险。
- 冷备份
- 联邦设施数据库定期自动加密备份至对象存储,备份周期不大于 24 小时
- 联邦设施配置以代码形式保存在受限访问的代码仓库中
- 可重建
- 重建所需信息随备份保存,任何持有备份解密密钥与重建手册的 admin/maintainer 均可在新环境中恢复联邦设施
- 恢复目标:在备份可用的情况下,1 小时内恢复联邦设施服务
- DNS 多端点
- 联邦设施通过 DNS 指向当前活跃实例
- 当主设施不可恢复时,由 admin 团队切换 DNS 记录至备用重建端点
- 备份与重建权限分发
- 加密后的备份及重建手册可安全分发给受信任的本地域 maintainer,作为极端情况下的恢复保障
- 分发的备份仅用于恢复,不构成多活运行实例。
鉴权(Identity & Authorization)
域名:auth.eoelab.org
通过统一的鉴权设施避免重复认证/自托管密钥库
注意:
- 联邦系统不是匿名系统,admin团队将追踪并打击资源滥用情况
- 鉴权服务器保证公网可达,稳定可靠
身份识别
框架:Zitadel
- 本地域会得到一个独立的子组织来区分权限模型;本地服务设备默认不会获得独立的子组织,可以向admin团队申请
- 仅 codeberg 下 eoelab 组织成员可以自动成为member;公开认证源(GitHub)默认成为pending组成员,需要等待admin团队审核/主动提交审核请求
注意:
- Zitadel将不会支持自主注册,只通过可靠认证源创建统一账户
- 我们不自建用户身份系统,而是使用外部可信 IdP,
- 我们不管理用户凭证,从而避免成为攻击面/泄露用户
细粒度授权
框架:Openfga
- 权限分级是:admin | maintainer | member
- admin负责维护联邦设施,通常不对本地域提供维护服务
- maintainer是本地域维护者,maintainer持有分表权限控制对应本地域 member 权限
- member仅可访问跨域网络,这是加入联邦设备的默认权限模型,也是最低权限模型
- Openfga仅面向本地域(Incus)提供细粒度权限模型,并且不单独持有本地域根权限(至少保证本地域存在一个TLS根鉴权)
网络
框架:Headscale
- 联邦网络是节点级互联模型,而非跨域互联模型,不应该加入子网路由器/退出节点来扩展网络
- 子网路由器会将“网络段”作为信任单位暴露给联邦,从而泄露本地域内部拓扑结构,并降低安全边界粒度(例如ceph节点被公开)
- 节点应以“可独立治理的计算实体”为单位加入联邦网络,通常包括 Incus 计算设施及联邦基础设施节点
- 联邦网络不依赖传统网络 ACL 进行流量控制,而通过身份系统与服务级授权模型进行访问约束
- 联邦网络内所有通信必须使用加密传输协议(TLS/mTLS/Noise 等),不得存在明文敏感数据传输
- 联邦网络仅提供节点可达性,不构成默认服务暴露平面。所有服务访问必须基于显式授权与身份控制
- 使用Headscale标准的CGNAT网段(100.64.0.0/10)
控制节点
域名:hs.eoelab.org
- 禁用内置derp服务器
- 用户通过 Zitadel OIDC 认证,仅
member 及以上角色可获取网络访问权限
中继节点
域名:REGION-NUMBER.derp.eoelab.org
- 由于网络延迟,derp节点额外区分区域
- REGION是节点所处地区的ISO两字母代码,NUMBER是序号(从1开始计数),例如cn-1.derp.eoelab.org代表中国区域1号中继
- REGION内节点数量应保持较小规模,并以 RTT 手动选择或客户端自动选择为准
双栈地址模型
在接入联邦网络后,节点同时具备两类可达性地址体系(双栈模型):
- 物理地址(Physical Address)
- 来源于本地域物理网络
- 通过Proxy设备暴露实例服务,并经由边界网关(集群)接入公网
- 联邦地址(Federation Address)
- 来源于联邦网络(Headscale)
- 用于节点间可信互联与管理通信
服务绑定规则
- 对外服务(Internet-facing)→ 物理地址 -> 公网/外部访问
- 联邦服务(node-to-node)→ 联邦地址 -> 节点间通信与控制面互联
- 内部服务(within domain)→ 本地域虚拟网络(bridge)
数据库
框架:PostgreSQL
仅用于支持联邦设施,不对业务开放
监控设施
以下监控设施,仅为本地域服务,不为本地服务设备接入
数据源
框架:Prometheus
可视化
框架:Grafana
日志
框架:Loki
告警
框架:Alertmanager
协作设施
EOELAB 存在用于联邦协作的即时通信群组,成员可以在其中:
- 协调运维与联邦维护
- 通知故障与安全事件
- 日常聊天与社区交流
注意:
- 即时通信群组仅作为协作与交流渠道,不作为正式权限系统
- 敏感操作与权限变更仍以正式鉴权系统为准
- admin 团队可能通过群组同步维护、安全事件与服务状态通知
公告设施
域名:eoelab.codeberg.page
这一 Pages 站点是我们的公告设施,Codeberg CI基于Zine框架自动构建并发布
公告设施用于发布联邦范围内的正式公开信息,包括:
- 服务端点/服务状态变更
- 基础设施信息/维护通知/安全事件公告
- 联邦规范与文档
- 社区公共通知
注:
- 公告设施属于 EOELAB 正式信息发布渠道,通知、服务入口与文档以公告设施内容为准
- 公告设施仅用于公开信息发布,不作为动态服务发现系统
系统模型
EOELAB 默认假设:
- 网络是不可信环境,通信可能被监听
- 任意节点可能离线、被攻陷或误操作
- 成员账户、凭证与设备可能泄露
- 联邦关系不代表默认信任
- 联邦设施可能短时不可达
- 本地域拥有并负责自身资源与业务数据
因此:
- 跨域通信默认加密
- 服务默认最小暴露
- 权限默认最小授权
- 本地域之间默认隔离
- 联邦设施不作为业务单点依赖
故障行为
- 使用本地存储的实例无法自动恢复,需要等待节点恢复
- 使用共享存储的集群实例可在等待期限后自动迁移到正常节点
- 联邦设施失效不会影响本地域继续独立运行
- 已签发的鉴权 token 在短时鉴权设施失效期间继续有效
数据安全与服务水平
由于本地域拥有并负责自身资源与业务数据,因此建立服务时最好自行维护一个本地域/服务设备,如果您需要其他本地域为您托管,请确保
- 您知悉它将存储您的业务数据,并提供服务,您了解数据存储策略并知悉它能提供的服务水平
- 应优先选择您信任的维护者托管服务;对于无法完全信任的托管环境,建议业务自行实现端到端加密或主机不可解密的数据保护机制(例如 Nextcloud E2EE)
时间同步
节点基于的 Debian stable 默认会通过 systemd-timesyncd 维持标准时间同步,无需额外操作
域名管理
联邦域名
由admin团队维护的eoelab.org及其子域名是联邦域名,用于:
注:
eoelab.org 及其子域名 DNS 控制权由 admin 团队维护eoelab.org 及其子域名 TLS证书由 admin 团队维护- admin团队不会签发泛域名证书,以避免过度信任
- admin团队有权回收长期失效、无人维护或存在安全风险的 eoelab.org 子域名
本地域业务域名
EOELAB 不要求本地域使用联邦域名提供服务,为了保证独立,本地域业务域名由维护者自行管理:
- 不建议使用静态自签名TLS证书,推荐使用 ACME 自动化更新证书
- 本地域应使用自身域名完成 ACME 验证与证书签发
出于域名续费/DNS管理等问题,您可以发送申请邮件到admin团队来获得一个子域名,这有助于:
- 降低额外负担
- 获得来自admin团队的帮助以自动更新证书
如何加入EOELAB
EOELAB是一个技术中立主义社区,我们不排斥任何人,为了防止机器人,我们需要以下任一鉴定依据:
- 申请人的 Zitadel 账户已绑定外部身份源(GitHub/Codeberg),且该外部账号创建时间超过 3 个月、有正常活动记录(非空白账号)
- 申请人能够提供其他可信证明(如已知的 EOELAB 成员推荐、公开技术贡献记录等)
无论要加入什么设备,先获得个人账户权限都是第一步:
- 直接使用公开认证源登陆Zitadel,从而得到一个账户
- 向admin团队发送邮件,自我介绍
- 如果你只连入本地设备,只需要说明用途,例如参与联机游戏
- 如果你连入本地服务设备,需要额外补充服务端点与类型
- 如果你连入本地域,需要额外解释本地域组成与拓扑结构
- 关于二级权限模型的独立子组织:
- 默认情况下,本地域维护者会获得一个独立的子组织权限
- 如果本地服务设备需要可以额外申请,但需要补充原因,例如半公开的测试服务
接下来正式加入设备:
- 对于本地服务设备/本地设备,加入headscale网络即可,获得唯一的联邦地址
- 对于本地域,不光计算设施节点加入,还需要接入联邦设施,包含鉴权/监控设施
如何退出EOELAB
对于标准的退出流程,请向admin团队发送退出邮件(如果有特别的原因,可以补充),admin团队将完成以下清理:
- 移除Zitadel账户
- 联邦网络移除本地服务设备/本地设备
- 对于本地域,导出联邦设施数据并交付,移除联邦设施接入
注:不支持静默退出,以便清理联邦资源并返还本地域相关数据
协作原则
我们是一个面向联邦基础设施与自治系统的技术社区。
我们鼓励:
- 基于技术事实进行讨论
- 尊重不同本地域的治理方式
- 对共享资源保持克制与责任感
- 在故障与安全事件中互相协助
我们不接受:
- 恶意攻击、扫描、滥用联邦资源
- 骚扰、人身攻击、持续性敌意行为
- 故意破坏社区协作关系
- 试图绕过权限与安全边界
资源滥用包括但不限于:
- 扫描
- DDoS
- 未授权资源占用
- 大规模垃圾流量
- 非法内容分发