Welcome to EOELAB!

EOELAB互联云架构

EOELAB互联云 是一个“本地域优先的联邦计算系统(Federated Sovereign Compute System)”

  1. 我们尊重计算集群物理隔离的事实,为了在本地域内维持高性能计算与强一致存储能力,不寻求建立跨中心的数据网络
  2. 我们认识到现实总存在破坏者,因此基于零信任出发设计联邦网络,并且取消匿名访问
  3. 我们理解现实中公网资源匮乏,因此提供联邦网络来接入不可直达的设备
  4. 由于非商业化设计目标,EOELAB 的互联模型以可控性与边界清晰性为优先,而非无限扩展性
  5. 我们尊重数字主权,因此联邦设施是随时拔插的

联邦计算系统中包括三类设备:

  1. 本地域:基于Incus的自治系统,拥有完整的权限认证能力与独立的调度能力(vm lxc oci同层调度)
  2. 本地服务设备:加入联邦并提供服务,但不具备自治能力的节点
  3. 本地设备:加入联邦只访问且不提供服务的设备

本地域

本地域是一个有唯一 Incus 控制面,能独立对外提供服务的本地Incus节点/集群

本地域可以架构为:

  1. 单Incus节点
  2. 集群:一个封闭网络设施下的所有节点组成的集合,满足:
    • 存在三个及以上Incus节点组成集群
    • 低延迟网络互通(L2/L3),并存在一个独立的边界网关
    • 数据设施接口一致

计算设施

运行时

  1. 虚拟化
    • VM:基于KVM的虚拟化
    • 仅作为需要内核特权时的特殊运行时
    • 有性能损失,有额外负担,启动速度较慢
  2. 系统层容器
    • LXC:linux容器
    • 标准运行时
    • 系统层容器仅支持Linux,禁止特权容器,允许嵌套运行oci容器
  3. 应用层容器
    • OCI:常规oci容器
    • 服务运行时
    • Cenv 作为 EOELAB 标准运行时,用于保证开发、CI/CD、生产环境和运行时的一致性与可复现性
      • 构建仓库:codeberg.org/eoelab/cenv
      • 镜像仓库:crpi-0fzeutaz68uv7lwt.cn-hangzhou.personal.cr.aliyuncs.com/eoelab/cenv

节点配置

  1. 计算设施节点主机名使用Domain-Number命名方式,Domain由maintainer填入联邦唯一的域名,Number从1开始计数,例如core-1
  2. 默认启用了2MiB Hugepages,默认挂载/dev/hugepages
  3. 使用Debian stable + Incus stable(https://github.com/zabbly/incus)

鉴权

TLS

TLS鉴权是本地域维护者的最终鉴权方法,以下是两种方法添加鉴权,注意如果服务器不支持webui,则只能通过cli添加鉴权/访问

  1. 在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
  1. 直接执行incus remote add ALIAS IP/NS,在主机生成trust token后添加

OIDC

OIDC鉴权是本地域用户/额外维护者鉴权方式,可以通过添加联邦鉴权设施得到

数据设施

存储接口

接口是最终暴露在计算设施中的数据入口,由存储服务接口与存储介质评级拼接:

  1. 存储服务接口:包括 bs fs os,代表块设备语义,文件系统语义,对象语义
  2. 存储介质评级:包括 介质 容量 性能(写延迟+带宽)
    • 介质: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编号

注意:集群必须保证各节点数据接口一致,保证集群可以重平衡实例,但本地存储不支持集群自愈合

存储备份

为了服务稳定与可靠,默认情况下我们要求数据具有备份策略,按照实际策略,有三类

  1. 多副本
    • 至少保证副本数量为2(raid1/10,ceph设置size为2)
  2. 奇偶校验码
    • 仅TrueNAS使用raid-z1
  3. 纠删码
    • 仅中规模TrueNAS/大规模Ceph使用

注:我们假设故障场景是任意主机的任一磁盘故障离线

存储驱动

我们不准备支持LINSTOR相关规范,因为: * 不支持实例间共享自定义卷 * 不支持在多个节点之间共享同一 LINSTOR 资源组 * 不支持从旧快照恢复

基于Btrfs提供本地存储

Btrfs接口为fs,由节点本地提供

基于TrueNAS提供小/中规模共享存储

  1. TrueNAS接入Incus接口为bs,这是Incus原生支持的方式
  2. TrueNAS节点命名为nas-Number
    • 小规模保持副本方式+高可用性部署
    • 中规模(12+ HDD)可以考虑迁移到纠删码部署
  3. TrueNAS可以扩展存储接口,但以下接口不能接入Incus(带来额外负担、失去优化路径):
    • 集成NFS提供fs接口
    • 集成MinIO提供os接口

基于Ceph提供大/超大规模共享存储

  1. Ceph支持全部存储接口,os兼容Amazon S3与Swift接口
  2. 支持Dashboard,基于Web-UI实现管理Ceph的功能
  3. Crush rule策略:
    • 数据分布策略:将存储介质评级同等的设备聚合
    • 混合设备策略:默认不跨介质 WAL/DB 绑定,避免共享 SSD 作为多个 OSD 元数据设备时,在介质失效场景下引发批量 OSD down 及 PG 大规模降级的风险。
  4. Pool接口:与最终接口保持一致
    • 附加功能后缀:
      1. data:一个用于bs(在使用纠删码情况下)/fs的附加后缀,标识该存储池用于数据存储
      2. metadata:一个用于bs(在使用纠删码情况下)/fs的附加后缀,标识该存储池用于元数据存储
  5. Ceph架设方式:独立Ceph集群,节点命名为ceph-Number
    • 当存储规模、性能或接口需求超出 TrueNAS 能力范围时,可部署独立 Ceph 集群
    • 默认不推荐超融合部署,以避免计算与存储故障域耦合
  6. 存储选择
    • fs支持多节点读写,读延迟低,带宽表现好,尤其是较大的文件,但写延迟相对较高且延迟时间不稳定,适用于对I/O延迟不大敏感的文件读写,以及非海量的小文件存储支持
    • bs读写延迟双低,适用于对I/O延迟要求较高,且无多个节点同时读写数据需求的应用,例如数据库
    • os是专门用于大数据存储的方案或海量小文件

网络设施

  1. 本地域内会存在固有的两个网络模型:
    1. 物理网络:由真实网络设备组成的物理网络,用于Incus集群本地物理互联
    2. 虚拟网络:由bridge虚拟网桥产生的内部网络,用于实例网络接入/实例间互联
  2. Incus 默认仅使用 bridge 作为标准网络接入方式,因为 bridge 是完全受 Incus 控制的虚拟网络设施,支持完整的网络行为管理能力,包括:
    • ACL
    • NAT/地址管理
    • 网络隔离
    • 流量观测与策略控制 注:
  3. 虽然 OVN 同样属于完全受控的虚拟网络方案,但其更适用于跨节点、跨机架的大规模 SDN 控制平面;EOELAB 不构建跨域控制面,也不尝试抽象跨数据中心网络,因此默认不引入 OVN
  4. SR-IOV 属于物理网络直通能力,会将实例直接接入物理二层网络,绕过部分虚拟网络控制能力,因此不作为标准网络设施。仅在存在明确高性能网络需求时才应考虑使用,例如:
    • GPU 集群 RDMA
    • 特定 HPC 场景
    • 超低延迟数据交换

域内

  1. 物理网络地址池由维护者根据真实网络环境决定,通常使用 RFC1918 私有 IPv4 地址空间:

    • 192.168.0.0/16
    • 10.0.0.0/8
    • 节点必须具有静态稳定的IP地址,不使用DHCP动态分配
  2. 物理 IPv6 使用原则:

    • 具备公网 IPv6 可达性时,直接使用公网 IPv6
    • 如果 IPv6 仅为 NAT/ULA/不可公网互通地址,则建议关闭物理 IPv6 网络
  3. 虚拟网络默认仅启用 IPv4 ;IPv6 属于可选能力,而非默认要求

    • 由于虚拟网络属于域内受控网络,IPv6 的全局可路由优势并不明显,还增加 ACL、观测与策略控制复杂度
  4. 用户态接口使用br-<project>命名方式,地址池默认使用 172.16.0.0/12 私有地址空间,例如br-db -> 172.16.1.0/24

    • 如果存在SR-IOV接入,则使用sriov作为接口前缀
  5. 默认情况下实例网络接入设备设置为eth0

    • 只有vm在需要proxy设备的情况下需要设置静态地址,设置完成后在network会看到两个eth0设备,这只是一种覆盖。设置方法是:在yaml内devices下添加
    eth0:
        ipv4.address: 实例静态ip
        network: 接入网络
        type: nic
    
  6. 实例使用proxy设备做端口转发以暴露服务:

    • 容器(lxc/oci):Listen设置为外部端口(需要满足端口池要求),connect设置为内部端口
    • vm:NAT mode启用,Listen的ip设置为节点ip,端口设置为主机端口,connect的ip设置为实例静态ip,端口设置为实例端口

域边界

框架:OpenWrt

  1. 本地域的公网出口/NAT边界,负责维护本地域的主机物理互联网络,也是边界网关;建议使用白名单策略,只开放真实服务端口
  2. 单节点本地域直接使用Incus的Proxy设备即可实现边界入口
  3. 尊重服务默认端口,例如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 社区与联邦生态具备长期持续运行能力。

核心本地域可能承担:

注意:

  1. 核心本地域仍然属于标准本地域,而非中央控制域
  2. 核心本地域不拥有其他本地域的控制权限
  3. Core 命名来源于长期维护、公共责任与社区信任,而非特殊权限
  4. 由于资源限制,核心本地域可能根据资源情况限制服务接入

联邦设施

  1. 为了克服本地域权限模型重复,无公网设备互联难度大,我们将基于以下跨域设施,构成一个联邦计算系统
  2. 为了保证联邦设施的可访问性,联邦设施会部署在公共云上,一些辅助节点可以由本地域贡献(headscale 中继节点)
  3. 联邦设施由 admin 团队集中运维,但不被设计为实时高可用集群,原因:
    • 联邦设施不承载业务数据,短期不可达不影响各本地域独立运行
    • 已签发的鉴权 token 在设施离线后仍可在有效期内继续使用
  4. 韧性策略设计:采用冷备份 + 可重建 + DNS 多端点策略保证长期可用性,降低运维复杂度的同时避免单一基础设施长期不可恢复的风险。
    1. 冷备份
      • 联邦设施数据库定期自动加密备份至对象存储,备份周期不大于 24 小时
      • 联邦设施配置以代码形式保存在受限访问的代码仓库中
    2. 可重建
      • 重建所需信息随备份保存,任何持有备份解密密钥与重建手册的 admin/maintainer 均可在新环境中恢复联邦设施
      • 恢复目标:在备份可用的情况下,1 小时内恢复联邦设施服务
    3. DNS 多端点
      • 联邦设施通过 DNS 指向当前活跃实例
      • 当主设施不可恢复时,由 admin 团队切换 DNS 记录至备用重建端点
    4. 备份与重建权限分发
      • 加密后的备份及重建手册可安全分发给受信任的本地域 maintainer,作为极端情况下的恢复保障
      • 分发的备份仅用于恢复,不构成多活运行实例。

鉴权(Identity & Authorization)

域名:auth.eoelab.org

通过统一的鉴权设施避免重复认证/自托管密钥库

注意:

  1. 联邦系统不是匿名系统,admin团队将追踪并打击资源滥用情况
  2. 鉴权服务器保证公网可达,稳定可靠

身份识别

框架:Zitadel

注意:

  1. Zitadel将不会支持自主注册,只通过可靠认证源创建统一账户
    • 我们不自建用户身份系统,而是使用外部可信 IdP,
    • 我们不管理用户凭证,从而避免成为攻击面/泄露用户

细粒度授权

框架:Openfga

  1. 权限分级是:admin | maintainer | member
    • admin负责维护联邦设施,通常不对本地域提供维护服务
    • maintainer是本地域维护者,maintainer持有分表权限控制对应本地域 member 权限
    • member仅可访问跨域网络,这是加入联邦设备的默认权限模型,也是最低权限模型
  2. Openfga仅面向本地域(Incus)提供细粒度权限模型,并且不单独持有本地域根权限(至少保证本地域存在一个TLS根鉴权)

网络

框架:Headscale

  1. 联邦网络是节点级互联模型,而非跨域互联模型,不应该加入子网路由器/退出节点来扩展网络
    • 子网路由器会将“网络段”作为信任单位暴露给联邦,从而泄露本地域内部拓扑结构,并降低安全边界粒度(例如ceph节点被公开)
    • 节点应以“可独立治理的计算实体”为单位加入联邦网络,通常包括 Incus 计算设施及联邦基础设施节点
  2. 联邦网络不依赖传统网络 ACL 进行流量控制,而通过身份系统与服务级授权模型进行访问约束
  3. 联邦网络内所有通信必须使用加密传输协议(TLS/mTLS/Noise 等),不得存在明文敏感数据传输
  4. 联邦网络仅提供节点可达性,不构成默认服务暴露平面。所有服务访问必须基于显式授权与身份控制
  5. 使用Headscale标准的CGNAT网段(100.64.0.0/10)

控制节点

域名:hs.eoelab.org

中继节点

域名:REGION-NUMBER.derp.eoelab.org

双栈地址模型

  1. 在接入联邦网络后,节点同时具备两类可达性地址体系(双栈模型):

    1. 物理地址(Physical Address)
      • 来源于本地域物理网络
      • 通过Proxy设备暴露实例服务,并经由边界网关(集群)接入公网
    2. 联邦地址(Federation Address)
      • 来源于联邦网络(Headscale)
      • 用于节点间可信互联与管理通信
  2. 服务绑定规则

    • 对外服务(Internet-facing)→ 物理地址 -> 公网/外部访问
    • 联邦服务(node-to-node)→ 联邦地址 -> 节点间通信与控制面互联
    • 内部服务(within domain)→ 本地域虚拟网络(bridge)

数据库

框架:PostgreSQL

仅用于支持联邦设施,不对业务开放

监控设施

以下监控设施,仅为本地域服务,不为本地服务设备接入

数据源

框架:Prometheus

可视化

框架:Grafana

日志

框架:Loki

告警

框架:Alertmanager

协作设施

EOELAB 存在用于联邦协作的即时通信群组,成员可以在其中:

注意:

  1. 即时通信群组仅作为协作与交流渠道,不作为正式权限系统
  2. 敏感操作与权限变更仍以正式鉴权系统为准
  3. admin 团队可能通过群组同步维护、安全事件与服务状态通知

公告设施

域名:eoelab.codeberg.page

这一 Pages 站点是我们的公告设施,Codeberg CI基于Zine框架自动构建并发布

公告设施用于发布联邦范围内的正式公开信息,包括:

注:

  1. 公告设施属于 EOELAB 正式信息发布渠道,通知、服务入口与文档以公告设施内容为准
  2. 公告设施仅用于公开信息发布,不作为动态服务发现系统

系统模型

EOELAB 默认假设:

  1. 网络是不可信环境,通信可能被监听
  2. 任意节点可能离线、被攻陷或误操作
  3. 成员账户、凭证与设备可能泄露
  4. 联邦关系不代表默认信任
  5. 联邦设施可能短时不可达
  6. 本地域拥有并负责自身资源与业务数据

因此:

故障行为

  1. 使用本地存储的实例无法自动恢复,需要等待节点恢复
  2. 使用共享存储的集群实例可在等待期限后自动迁移到正常节点
  3. 联邦设施失效不会影响本地域继续独立运行
  4. 已签发的鉴权 token 在短时鉴权设施失效期间继续有效

数据安全与服务水平

由于本地域拥有并负责自身资源与业务数据,因此建立服务时最好自行维护一个本地域/服务设备,如果您需要其他本地域为您托管,请确保

  1. 您知悉它将存储您的业务数据,并提供服务,您了解数据存储策略并知悉它能提供的服务水平
  2. 应优先选择您信任的维护者托管服务;对于无法完全信任的托管环境,建议业务自行实现端到端加密或主机不可解密的数据保护机制(例如 Nextcloud E2EE)

时间同步

节点基于的 Debian stable 默认会通过 systemd-timesyncd 维持标准时间同步,无需额外操作

域名管理

联邦域名

由admin团队维护的eoelab.org及其子域名是联邦域名,用于:

注:

  1. eoelab.org 及其子域名 DNS 控制权由 admin 团队维护
  2. eoelab.org 及其子域名 TLS证书由 admin 团队维护
  3. admin团队不会签发泛域名证书,以避免过度信任
  4. admin团队有权回收长期失效、无人维护或存在安全风险的 eoelab.org 子域名

本地域业务域名

EOELAB 不要求本地域使用联邦域名提供服务,为了保证独立,本地域业务域名由维护者自行管理:

  1. 不建议使用静态自签名TLS证书,推荐使用 ACME 自动化更新证书
  2. 本地域应使用自身域名完成 ACME 验证与证书签发

出于域名续费/DNS管理等问题,您可以发送申请邮件到admin团队来获得一个子域名,这有助于:

如何加入EOELAB

EOELAB是一个技术中立主义社区,我们不排斥任何人,为了防止机器人,我们需要以下任一鉴定依据:

无论要加入什么设备,先获得个人账户权限都是第一步:

  1. 直接使用公开认证源登陆Zitadel,从而得到一个账户
  2. 向admin团队发送邮件,自我介绍
    • 如果你只连入本地设备,只需要说明用途,例如参与联机游戏
    • 如果你连入本地服务设备,需要额外补充服务端点与类型
    • 如果你连入本地域,需要额外解释本地域组成与拓扑结构
  3. 关于二级权限模型的独立子组织:
    • 默认情况下,本地域维护者会获得一个独立的子组织权限
    • 如果本地服务设备需要可以额外申请,但需要补充原因,例如半公开的测试服务

接下来正式加入设备:

  1. 对于本地服务设备/本地设备,加入headscale网络即可,获得唯一的联邦地址
  2. 对于本地域,不光计算设施节点加入,还需要接入联邦设施,包含鉴权/监控设施

如何退出EOELAB

对于标准的退出流程,请向admin团队发送退出邮件(如果有特别的原因,可以补充),admin团队将完成以下清理:

注:不支持静默退出,以便清理联邦资源并返还本地域相关数据

协作原则

我们是一个面向联邦基础设施与自治系统的技术社区。

我们鼓励:

我们不接受:

资源滥用包括但不限于:

Post list