3. 平台门户架构设计:微服务前端、后端API网关、认证鉴权、插件化集成机制

平台门户作为 Operator 集群资源可视化与运维的统一入口,其架构设计直接决定了系统的可扩展性、安全性与运维效率。本章围绕四大核心组件展开:微服务前端(负责界面组合与动态路由)、后端API网关(负责请求分发与协议转换)、认证鉴权(负责身份校验与权限控制)、插件化集成机制(负责第三方工具与自定义能力的无缝接入)。

3.1 架构总览:四层职责分离

平台门户采用前后端分离的微服务架构,整体分为四层:

层级 核心职责 关键技术
微服务前端层 微前端框架、动态路由、组件隔离 qiankun / Module Federation / Single-SPA
API网关层 请求路由、限流、协议转换、聚合 Kong / APISIX / Spring Cloud Gateway
认证鉴权层 OAuth2 / JWT / RBAC / 多租户隔离 Keycloak / Casdoor / OPA / Auth0
插件化集成层 插件注册、生命周期管理、沙箱隔离 WebAssembly / Lua Plugin / SPI / Sidecar
架构原则:每一层职责单一,层间通过标准 API 契约通信。前端不直接调用后端服务,所有请求必须经过 API 网关与认证鉴权层,确保安全边界统一。
平台门户四层架构图 微服务前端层 主应用容器(Shell) + 子应用(Cluster Dashboard / Operator Catalog / 运维大盘) qiankun 沙箱隔离 | 动态注册 | 共享组件库 后端API网关层 请求路由 | 限流熔断 | 协议转换(gRPC ↔ HTTP) | 请求聚合 Kong / APISIX / Spring Cloud Gateway 认证鉴权层 OAuth2 / JWT 签发与校验 | RBAC 权限模型 | 多租户隔离 Keycloak / Casdoor / OPA / Auth0 插件化集成层 插件注册中心 | 生命周期管理 | 沙箱隔离 | 事件总线 WebAssembly / Lua Plugin / SPI / Sidecar

3.2 微服务前端:动态组合与沙箱隔离

平台门户的前端采用微前端架构,将原本单体庞大的运维控制台拆分为多个独立开发、独立部署的子应用。主应用(Shell)负责布局、导航、全局状态与认证,子应用负责具体的业务功能,如集群资源列表、Operator 安装向导、告警大盘等。

3.2.1 核心机制

  • 动态注册与路由分发:子应用通过注册中心向主应用声明自己的路由前缀与资源入口。主应用根据 URL 路径动态加载对应子应用的 JS/CSS 资源。
  • 沙箱隔离:每个子应用运行在独立的 JavaScript 沙箱中,全局变量、样式、DOM 事件互不干扰。qiankun 使用 Proxy 拦截全局对象,Module Federation 通过 Webpack 5 的共享模块机制实现隔离。
  • 共享组件库:通用 UI 组件(表格、表单、图表、导航)由主应用统一提供,子应用通过 import map 或 npm 包引用,避免重复打包。
实践建议:子应用之间的通信优先使用 CustomEvent 或 全局状态库(如 Redux / Zustand),避免直接操作父应用 DOM。主应用应提供统一的 loading 与错误边界组件,提升用户体验。

3.3 后端API网关:统一入口与流量治理

API 网关是平台门户的流量枢纽,所有来自前端的请求都必须经过网关。网关负责将请求路由到正确的后端微服务,同时执行跨横切关注点(Cross-Cutting Concerns)的逻辑。

3.3.1 网关核心功能清单

功能 说明 典型实现
请求路由 根据请求路径、Header、权重将请求转发到对应服务 APISIX Route / Kong Service
限流与熔断 防止突发流量压垮后端服务,支持令牌桶、滑动窗口 APISIX limit-conn / Sentinel
协议转换 将前端 HTTP/1.1 请求转换为后端 gRPC 或 Dubbo 协议 grpc-web / protobuf 序列化
请求聚合 将多个后端服务的响应合并为一个响应返回给前端 GraphQL / BFF 模式
认证前置 在网关层统一校验 JWT ,拒绝无效请求 APISIX jwt-auth / Kong OIDC
避坑提示:不要在网关层做业务逻辑处理(如数据校验、状态转换)。网关应保持轻量,仅做路由与横切关注点。业务逻辑应下沉到后端微服务中,避免网关成为“胖代理”。

3.4 认证鉴权:零信任安全模型

平台门户采用零信任安全模型,即“永不信任,始终验证”。每个请求(无论来自内部还是外部)都必须经过认证与授权检查。

3.4.1 认证流程

  1. 用户登录:前端将用户名/密码或 OAuth2 授权码发送到认证中心(如 Keycloak)。
  2. 签发:认证中心验证身份后,返回 Access (JWT 格式,有效期短)和 Refresh (有效期长)。
  3. 请求携带 :前端将 Access 放在 HTTP Header Authorization: Bearer <> 中发送到 API 网关。
  4. 网关校验:API 网关使用公钥或 JWKS 端点验证 JWT 签名与有效期,通过后将请求转发到后端服务。
  5. 后端细粒度鉴权:后端服务根据 JWT 中的用户角色、租户 ID 执行 RBAC 或 ABAC 权限检查。

3.4.2 RBAC 权限模型

平台门户使用基于角色的访问控制(RBAC),权限结构如下:

  • 用户(User):平台的实际操作者,可属于多个租户。
  • 角色(Role):权限的集合,如 cluster-admin、operator-installer、viewer。
  • 权限(Permission):对特定资源的操作,如 cluster:list、operator:install、alert:acknowledge。
  • 租户(Tenant):资源隔离单元,用户在不同租户下可拥有不同角色。
关键设计:JWT 中只携带用户 ID 与角色列表,不携带具体权限。权限判断由后端服务通过 OPA(Open Policy Agent)或本地策略引擎实时计算,避免 体积过大。

3.5 插件化集成机制:可插拔的扩展能力

平台门户需要集成多种第三方工具(如 Prometheus、Grafana、ArgoCD、自定义 Operator 面板)。插件化集成机制允许开发者以标准方式注册新功能,而无需修改核心代码。

3.5.1 插件生命周期

阶段 操作 说明
注册 插件向注册中心提交元数据(名称、版本、路由、依赖) 注册中心存储于 etcd 或数据库
加载 主应用根据注册信息动态加载插件的 JS/CSS 或后端服务 前端使用 Module Federation,后端使用 SPI
运行 插件在沙箱中执行,通过事件总线与主应用通信 前端使用 CustomEvent,后端使用消息队列
卸载 插件被禁用或删除时,清理资源、取消路由注册 确保无内存泄漏与僵尸路由
插件化集成机制流程图 1. 插件注册 元数据提交 注册中心 etcd / 数据库 2. 动态加载 JS/CSS / SPI 3. 沙箱运行 事件总线通信 4. 卸载清理 资源释放 插件集成关键约束 • 前端插件:使用 Module Federation 动态加载,样式隔离 • 后端插件:使用 SPI 或 WebAssembly,资源限制 • 通信:统一事件总线,禁止直接操作宿主

3.6 架构设计要点总结

  • 前端微服务化:主应用只负责壳与路由,子应用独立迭代,降低团队协作冲突。
  • 网关前置认证:在网关层统一校验 JWT,拒绝无效请求,减轻后端服务压力。
  • 权限下沉到服务:网关不做细粒度鉴权,由后端服务结合 OPA 或本地策略引擎执行。
  • 插件生命周期标准化:注册、加载、运行、卸载四个阶段必须有明确的钩子与清理机制。
  • 沙箱隔离:前端使用 qiankun 或 Module Federation 沙箱,后端使用 WebAssembly 或容器 Sidecar 隔离。
架构演进方向:随着平台规模增长,可引入 Service Mesh(如 Istio)将认证、限流、可观测性能力从网关进一步下沉到 Sidecar,实现更细粒度的流量治理。