Skip to content
openDesk EduopenDesk Edu
← Back to Blog

架构深度解析:openDesk Edu 的工作原理

技术架构
架构kubernetessamlkeycloak深度解析

架构深度解析:openDesk Edu 的工作原理

本文将深入探讨 openDesk Edu 背后的技术架构。如果您正在为所在机构评估该平台,或者考虑为其做出贡献,希望这篇文章能帮助您清楚地了解各个组件是如何协同工作的。

基础:openDesk CE

openDesk Edu 是 openDesk 社区版 v1.13.x 的超集。它继承了 openDesk CE 提供的核心工作空间服务:用于文件共享的 Nextcloud、用于视频通话的 Jitsi Meet、用于邮件和日历的 Open-Xchange/SOGo/Grommunio 三选一、用于文档编辑的 Collabora Online,以及用于身份管理的 Keycloak。这些服务在公共管理部门和企业的生产环境中已经经过了充分的实战检验。

在此基础之上,openDesk Edu 新增了 15 个面向教育的专用服务:ILIAS、Moodle、BigBlueButton、OpenCloud、Etherpad、CryptPad、BookStack、Planka、Zammad、LimeSurvey、LTB SSP、Draw.io、Excalidraw 和 TYPO3。全部 25 个服务共享同一套身份验证、网络和存储基础设施。

Kubernetes 原生部署

openDesk Edu 中的所有组件均运行在 Kubernetes 之上。每个服务被打包为一个 Helm Chart,完整技术栈通过 helmfile 进行编排。只需执行一条 helmfile apply 命令,即可根据您的配置渲染所有 Chart 并部署到集群中。

配置系统使用 global.yaml.gotmpl,这是一个集中管理所有部署参数的 Go 模板文件。您只需在一个地方设置域名、邮件配置、存储类和功能开关,这些值就会自动传递给每个 Chart。这意味着您无需逐个编辑各 Chart 的 values 文件,就能完成整个平台的配置。

helmfile 还负责处理依赖排序。依赖于 Keycloak 或 Ingress Controller 的服务会在其依赖就绪之后才进行部署。如果您只启用了部分服务,helmfile 会自动跳过已关闭的服务,仅部署您需要的部分。

统一身份验证

Keycloak 位于身份验证层的核心位置。openDesk Edu 中的每个服务都将身份验证委托给 Keycloak,无论底层使用的是 OpenID Connect、SAML 2.0 还是服务特定的协议。用户只需在 Nubus 门户登录一次,即可访问任何应用程序,无需重复输入凭据。

Nubus 同时充当用户门户和身份与访问管理(IAM)层。它为所有已启用的服务提供统一的启动入口,展示用户资料信息,并管理会话生命周期。当用户通过 Nubus 登录时,Keycloak 会颁发一个会话令牌,该令牌被所有下游服务所识别。

用户配置自动完成。当新用户首次通过 SAML 联邦或本地身份提供者进行身份验证时,Keycloak 会自动创建用户账户,并在所有已启用的服务中进行配置。无需在 ILIAS、Moodle、Nextcloud 或任何其他应用中单独创建账户。

教育领域的 SAML 联邦

openDesk Edu 的一个核心亮点是通过 DFN-AAI 和 eduGAIN 实现 SAML 联邦支持。在联邦架构中,机构的身份提供者(IdP)负责身份验证,而 openDesk Edu 作为联邦中的服务提供者(SP)运行。

Keycloak 以 SAML SP 的身份连接到联邦,将传入的断言转换为内部用户属性。eduPersonPrincipalNameeduPersonAffiliationeduPersonEntitlement 等属性被映射为 Keycloak 角色和组成员关系,随后传播到各个服务。

对于 ILIAS、Moodle 和 BigBlueButton 这类各自实现了独立 SAML SP 接口的应用,openDesk Edu 部署了 Shibboleth 作为 SAML 代理。Shibboleth 接收来自 Keycloak 的断言,应用属性过滤规则,然后将结果传递给应用程序。这种两跳架构保持了联邦元数据的整洁性,并允许为每个服务设置独立的属性策略。

备份与容灾

openDesk Edu 中的数据保护由 k8up 处理,这是一个基于 restic 构建的 Kubernetes Operator。k8up 监听 Backup 自定义资源,按照可配置的计划自动创建所有持久化卷的快照。

备份流程覆盖数据库、文件存储和配置。每个服务的 Helm Chart 都包含备份注解,告诉 k8up 需要包含和排除哪些卷。备份存储在兼容 S3 的存储桶或 restic 支持的任何其他后端中。

在灾难恢复方面,restic 备份格式支持增量快照和数据去重。恢复服务时,只需将 k8up 指向特定快照,即可重建卷数据。整个流程有完整文档记录,可以作为事件响应手册的一部分进行自动化。

证书管理

openDesk Edu 集成了 Bundesdruckerei 提供的 openDesk Certificates,实现自动化 TLS 证书配置。证书 Operator 在集群内运行,向 Bundesdruckerei CA 申请证书,自动处理续期和分发,无需人工干预。

如果您的机构使用其他证书颁发机构,或者运营自己的内部 CA,系统同样兼容 cert-manager 和 Let's Encrypt 等 ACME 提供商。Helm Chart 通过全局模板接受自定义证书配置。

选择适合的技术栈

openDesk Edu 在多个服务类别中刻意提供了替代方案。核心理念是:机构应该根据自身的工作流程和技术专长来选择,而不是被动接受供应商的决定。

在邮件和群件方面,您可以在 Open-Xchange、SOGo 和 Grommunio 之间选择。三者在功能集、资源需求和管理员熟悉度方面各有优势。在视频会议方面,Jitsi Meet 适合中小型会议,而 BigBlueButton 则专为结构化的虚拟课堂教学设计,可支持数百名参与者。在文件共享方面,Nextcloud 是默认选项,OpenCloud 则提供了针对教育场景优化的变体。

白板和文档协作类别包括用于轻量级绘图的 Excalidraw、用于加密协作的 CryptPad,以及用于结构化协作写作的 Etherpad。如有需要,三者可以同时启用。

未来展望

架构仍在持续演进。近期的优先事项包括:基于生产环境反馈稳定 Beta 服务、扩展 DFN-AAI 之外的联邦选项,以及构建监控仪表板,为管理员提供整个技术栈的服务健康状态可视化。模块化设计意味着新服务可以作为额外的 Helm Chart 加入,而无需修改核心编排层。

如果您想亲自查看代码、Chart 和配置,所有内容均在 Codeberg 上公开:

https://codeberg.org/opendesk-edu/opendesk-edu