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 网关与认证鉴权层,确保安全边界统一。
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 认证流程
- 用户登录:前端将用户名/密码或 OAuth2 授权码发送到认证中心(如 Keycloak)。
- 签发:认证中心验证身份后,返回 Access (JWT 格式,有效期短)和 Refresh (有效期长)。
- 请求携带 :前端将 Access 放在 HTTP Header
Authorization: Bearer <>中发送到 API 网关。 - 网关校验:API 网关使用公钥或 JWKS 端点验证 JWT 签名与有效期,通过后将请求转发到后端服务。
- 后端细粒度鉴权:后端服务根据 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,后端使用消息队列 |
| 卸载 | 插件被禁用或删除时,清理资源、取消路由注册 | 确保无内存泄漏与僵尸路由 |
3.6 架构设计要点总结
- 前端微服务化:主应用只负责壳与路由,子应用独立迭代,降低团队协作冲突。
- 网关前置认证:在网关层统一校验 JWT,拒绝无效请求,减轻后端服务压力。
- 权限下沉到服务:网关不做细粒度鉴权,由后端服务结合 OPA 或本地策略引擎执行。
- 插件生命周期标准化:注册、加载、运行、卸载四个阶段必须有明确的钩子与清理机制。
- 沙箱隔离:前端使用 qiankun 或 Module Federation 沙箱,后端使用 WebAssembly 或容器 Sidecar 隔离。
架构演进方向:随着平台规模增长,可引入 Service Mesh(如 Istio)将认证、限流、可观测性能力从网关进一步下沉到 Sidecar,实现更细粒度的流量治理。