--- tags: [xinfra, architecture, infra] create time: 2026-07-13 16:00 --- # XINFRA 架构文档 ## 概述 本文档描述 XINFRA 平台的总体架构设计、技术选型、分层模型和系统集成关系。 ## 核心概念 ### 组内约定 | 概念 | 定义 | |------|------| | 主系统 | XINFRA 平台自身的统管层,负责子系统无法覆盖的能力:统一门户(SSO 跳转入口)、资源大盘、登录审计与运维操作审计、资源指标面板、运维终端 | | 子系统 | XINFRA 纳管的专项平台(有独立 WebUI 和 API 服务),各司其职:**Wayne**(多集群容器管理)、**CloudDM / open-cdm**(数据库管理与 SQL 审核)、**CacheCloud**(Redis 缓存管理)、**Apollo**(配置中心)、**Nightingale**(统一告警引擎) | | 工具层 | 纳管的 CLI / IaC 工具,无常驻 WebUI,由运维人员通过命令行或脚本触发:**Ansible Playbook**(自动化部署与基础设施即代码) | | 业务线租户 | 基于 LDAP 组织信息自动生成的多租户隔离单元,每个业务线拥有独立的命名空间、节点池和资源配额 | ### 通用术语 | 概念 | 定义 | |------|------| | APIKey | Wayne 平台对外提供的 API 认证密钥,用于 CI/CD 流水线等自动化场景的身份认证,遵循最小权限原则 | | RBAC | 基于角色的访问控制(Role-Based Access Control),通过角色分配权限,用户与角色关联实现权限隔离 | | RKE2 | Rancher 发行的 Kubernetes 发行版,已通过 CIS Benchmark 安全加固,支持离线 air-gap 安装,默认启用加密和审计 | | Calico BGP | Calico 采用纯路由模式(BGP),无隧道开销,每个集群配置独立 AS 号,构建跨机房扁平大二层网络 | | Ceph RBD | 分布式块存储,供给 K8s PV 给 MySQL、Redis 等有状态服务 | | Nightingale | 夜莺,统一告警聚合引擎,支持接入 Zabbix、VictoriaMetrics 等异构告警源,负责去重、收敛、分级,推送至 qpass | | Apollo | 携程开源配置中心,支持多机房 Cluster 部署、配置灰度、版本回滚和操作审计 | | Consul | 各机房已有的服务注册发现系统,xinfra 通过 Catalog API 做只读聚合展示 | | CD | 持续部署(Continuous Deployment),自动化服务上线的流水线;CI(持续集成)由团队已有 CI 系统负责 | | WAF | Web 应用防火墙(Web Application Firewall),防护 SQL 注入、XSS、CSRF 等常见 Web 攻击 | | SLA | 服务等级协议(Service Level Agreement),定义服务可用性的承诺指标 | | IaC | 基础设施即代码(Infrastructure as Code),通过 Ansible Playbook 等工具实现基础设施自动化管理 | | SINA CMDB | 公司内部 CMDB 系统,物理机与虚机资产数据的基础来源 | | open-cdm | SQL 审核与变更平台,数据库上线统一审核 | | qpass | 统一告警与值班通知平台 | | SSO | 单点登录(Single Sign-On),主系统通过 LDAP 统一认证后跳转至各子系统 | --- ## 平台分层架构 ### 总体分层 ```mermaid graph TB User["用户层
LDAP SSO 统一认证"] --> Main["主系统层
统一门户 + 功能模块"] Main --> Sub["子系统层
独立部署,各自授权"] Main --> Infra["基础设施层
计算 · 网络 · 存储 · 自动化"] Sub --> Infra style User fill:#f3e8fd,stroke:#9333ea style Main fill:#e0f2fe,stroke:#0284c7 style Sub fill:#e8f0fe,stroke:#4285f4 style Infra fill:#ecfdf5,stroke:#059669 ``` --- ### 主系统功能架构 ```mermaid graph TB Portal["统一门户
LDAP SSO 跳转入口"] subgraph 全局视图 DashBoard["资源大盘
集群拓扑 · 节点方格图"] MonitorView["资源状态看板
物理机/虚机/服务三层告警"] end subgraph 运维能力 TaskCenter["任务中心
Ansible/Wayne 实时日志"] OpsTerminal["运维终端
Ansible / SSH
仅管理员"] end subgraph 治理能力 AuditDash["审计面板
登录记录 · 运维操作日志"] CMDB["资源台账
CMDB 多云同步"] SvcDir["服务目录
Consul 只读聚合"] end Portal --> DashBoard & MonitorView & TaskCenter & AuditDash & CMDB & SvcDir SRE["SRE"] --> OpsTerminal ``` > [!tip] 主系统不替代子系统,只自建子系统无法覆盖的能力:全局视图、运维兜底、登录与运维审计、资源台账。 --- ### 子系统集成关系 ```mermaid graph LR Portal["XINFRA 主系统"] subgraph 子系统 Wayne["Wayne
多集群容器管理"] CloudDM["open-cdm
SQL 审核"] CacheCloud["CacheCloud
Redis 管理"] Apollo["Apollo
配置中心"] end Portal -.->|SSO 跳转| Wayne & CloudDM & CacheCloud & Apollo Wayne -->|Client-Go| RKE2["RKE2 集群"] CloudDM -->|SQL 审核| MySQL[("MySQL")] CacheCloud -->|Agent| Redis[("Redis")] Apollo -->|ConfigService| RKE2 ``` > [!tip] 子系统各自独立部署和授权,主系统只做 SSO 跳转入口,各子系统自行维护操作审计。 --- ### 基础设施层 ```mermaid graph TB subgraph 计算 RKE2["RKE2 集群 × 7 机房
CIS 安全加固"] end subgraph 网络 Calico["Calico BGP
每集群独立 AS 号
跨机房扁平互通"] end subgraph 存储 Ceph["Ceph RBD
MySQL/Redis 有状态服务 PV"] end subgraph 自动化 Ansible["Ansible Playbook
节点初始化 · 服务部署
WebSocket 实时日志"] end RKE2 --> Calico RKE2 --> Ceph Ansible -->|SSH| RKE2 ``` > [!tip] RKE2 是计算底座,Calico BGP 构建跨机房扁平网络,Ceph RBD 提供有状态服务的持久化存储,Ansible 贯穿自动化运维。 --- ## 监控告警数据流 ```mermaid graph LR subgraph 采集源 RKE2["RKE2 集群"] Zabbix["Zabbix
硬件监控"] end subgraph 指标存储 VM[("VictoriaMetrics
容器/业务指标")] end subgraph 可视化 Grafana["Grafana 仪表盘"] end subgraph 告警链路 Nightingale["夜莺
去重 · 收敛 · 分级"] QPass["qpass
企业 IM 推送"] end RKE2 -.->|Metrics| VM VM --> Grafana VM --> Nightingale Zabbix --> Nightingale Nightingale --> QPass ``` > [!tip] VictoriaMetrics 承载容器和业务指标,Zabbix 覆盖物理机硬件监控,夜莺作为统一告警聚合层,最终推送至 qpass 通知。 --- ## 技术选型与架构决策 | 层级 | 选型 | 说明 | |------|------|------| | **前端框架** | Vue 3 + Element Plus | 企业级 UI 方案,与七牛内部技术栈一致 | | **后端框架** | Go + Gin | 高性能 HTTP 框架,与 Wayne/Open-CDM 生态一致 | | **前后端通信** | 混合模式 | 前端 REST/JSON,服务间 gRPC;API 版本管理采用 URL 路径版本 `/api/v1/...` | | **主系统数据库** | MySQL 8.0 | 存储任务记录、审计日志、资源台账、用户会话等 | | **缓存** | Redis | 分布式缓存和会话存储 | | **前端部署** | Nginx | 托管前端静态文件 + 反向代理后端 API | | **主系统部署** | K8s 内部署 | 以 Deployment 方式运行在 RKE2 集群内 | | **SSO 协议** | SAML | 企业统一认证,主系统做 SSO 跳转入口 | | **告警数据源** | 仅 Nightingale API | 主系统不直接对接 Zabbix/VictoriaMetrics,统一通过夜莺获取告警数据 | | **Ansible 调度** | AWX | 通过 AWX API 提交 Playbook 任务,由 AWX 管理执行和日志 | | **实时推送** | 原生 WebSocket | 任务日志实时推送,基于 gorilla/websocket 库 | | **接口文档** | Swagger/OpenAPI | 后端生成 Swagger 文档供前端开发 | | **界面语言** | 纯中文 | 不需要国际化 | | **测试策略** | 后端测试为主 | 单元测试 + 集成测试 | --- ## 基础服务交付流程 ```mermaid sequenceDiagram actor User as 业务人员 participant Portal as XINFRA 服务目录 participant Ansible as Ansible Playbook participant Infra as RKE2 / 主机 participant Sub as 子系统注册 User->>Portal: 选择服务卡片(MySQL/Redis/...)
填写业务线、规格、架构模式 Portal->>Portal: 实时预览 playbook 参数(YAML) User->>Portal: 确认部署 Portal->>Ansible: 提交 playbook 任务 Ansible->>Infra: 内核初始化 · containerd · 加入集群 Ansible-->>Portal: 任务状态 → WebSocket 实时日志 Portal->>Sub: 自动注册(open-cdm / CacheCloud) Portal-->>User: 部署完成,跳转任务中心 ``` > [!tip] 用户通过服务卡片填参 → 后台 Ansible 自动化部署 → 部署完成后自动注册到对应子系统,全程任务日志可在任务中心实时查看。 --- ## 多租户隔离模型 ```mermaid graph TB LDAP["企业 LDAP"] -->|部门 DN| BL["业务线租户
(Kodo / LAS / 灵矽 / ...)"] BL --> NS["Kubernetes Namespace
+ ResourceQuota + LimitRange"] BL --> NP["物理节点池
node-label + taint"] NS -.->|Pod 只能调度到
本业务线节点| NP style LDAP fill:#f3e8fd,stroke:#9333ea style BL fill:#e0f2fe,stroke:#0284c7 style NS fill:#ecfdf5,stroke:#059669 style NP fill:#fef3c7,stroke:#d97706 ``` > [!tip] 双重隔离:**节点层**通过 `business-line=xxx` 标签 + Taint 确保 Pod 只调度到本业务线节点;**命名空间层**通过 ResourceQuota / LimitRange 限制资源用量上限。 --- ## 系统集成关系 **关键集成点**: | 源 | 目标 | 接口方式 | 说明 | |----|------|---------|------| | 企业 LDAP | 各子系统 + 主系统 | LDAP Bind / SSO | 统一身份认证,主系统做 SSO 跳转入口 | | SINA CMDB | 资源台账 | REST API | 物理机/虚机基础数据来源 | | 阿里云 / AWS / 七牛 LAS | 资源台账 | OpenAPI | 云上虚机增量同步 | | Consul × 7 DC | 服务目录 | Catalog API | 只读聚合,不改变原有链路 | | Nightingale | 资源状态看板 | API | 统一告警数据源 | | Zabbix | Nightingale | 告警接入 | 硬件监控告警 | | VictoriaMetrics | Nightingale | 告警接入 | 容器/业务指标告警 | | GitLab CI | Wayne | REST API(APIKey 认证) | 自动触发部署 | | GitLab CI | Harbor | Docker Push | 镜像推送 | | Wayne | RKE2 | Client-Go(K8s API) | 容器编排操作 | | CloudDM / open-cdm | MySQL / PG 等 | Sidecar SQL 代理 | SQL 审核执行 | | CacheCloud | Redis | Agent | 实例生命周期管理 | | Apollo | 各业务线 | Config Service API | 配置下发与灰度发布 | | Ansible | 各主机 | SSH | 基础设施初始化部署 | | 企业 LDAP | 主系统 | LDAP Bind | 登录事件记录至审计面板 | | 各子系统 + 基础设施 | VictoriaMetrics | HTTP / Exporter | Metrics 采集 | | VictoriaMetrics | Grafana | PromQL | 监控指标可视化(直接复用) | | Nightingale | qpass | 告警推送 | 统一告警通知 | --- ## 风险与约束 | 风险 | 影响 | 缓解措施 | |------|------|---------| | RKE2 版本升级可能引入不兼容变更 | 集群稳定性 | 先在测试环境验证,灰度发布 | | Wayne 开源版本维护活跃度不确定 | 功能迭代受限 | 内部 Fork 并保持核心模块可维护 | | 七机房网络链路故障 | 跨机房服务中断 | 网络冗余 + BGP 自动切换 + 告警监控 | | SQL 审核规则误判 | 合法 SQL 被拦截 | 白名单机制 + 规则持续调优 | | Redis 大 Key / 热 Key | 性能劣化 | CacheCloud 诊断工具 + 应用侧治理 | | Apollo 多机房配置一致性 | 配置下发错误 | 本地缓存降级 + 灰度发布验证 | | Consul 跨机房同步延迟 | 服务发现不一致 | 30 秒轮询 + 健康状态标注 | | 云平台 API 限流/不可用 | 资源同步中断 | 增量同步 + 重试机制 + 状态告警 | --- ## 运维分层模型 > 故障按层级自愈,跨层操作需主系统管理员权限。 | 故障层级 | 处理方 | 工具链 | 权限要求 | |---------|--------|--------|---------| | 应用发布异常 | 子系统自愈 | Wayne 一键回滚 | 项目成员 | | 中间件故障 | 子系统自恢复 | CacheCloud / CloudDM 内置运维能力 | 子系统运维角色 | | 配置变更异常 | Apollo 回滚 | Apollo 版本回滚 + 灰度发布 | 配置管理员 | | 基础设施故障 | 主系统管理员 | Ansible Playbook / SSH 终端 | 仅主系统管理员 | | 机房级故障 | 主系统管理员 | Ansible + 大内网链路切换 | 仅主系统管理员 | > [!warning] 安全约束 > Ansible / SSH 终端等基础设施级操作仅对主系统管理员角色可见,普通用户菜单中不包含此项。所有跨层操作全程审计留痕。 --- ## 关联笔记 - [[requirements]] - [[mvp-plan]] - [[technical/xinfra-preview]]