From d2f0c9a3c425a54a7c16c469c2b69d07f83798cb Mon Sep 17 00:00:00 2001 From: hezhaohui Date: Thu, 16 Jul 2026 09:35:18 +0800 Subject: [PATCH] feat: add xinfra architecture slide deck --- decks/xinfra/slides.md | 761 +++++++++++++++++++++++++++++++++++++++++ index.html | 2 +- package.json | 2 + 3 files changed, 764 insertions(+), 1 deletion(-) create mode 100644 decks/xinfra/slides.md diff --git a/decks/xinfra/slides.md b/decks/xinfra/slides.md new file mode 100644 index 0000000..2a5ec84 --- /dev/null +++ b/decks/xinfra/slides.md @@ -0,0 +1,761 @@ +--- +theme: frankfurt +title: XINFRA 平台架构 +author: SRE Team +infoLine: true +transition: slide-left +mdc: true +drawings: + persist: false +--- + +# XINFRA 平台架构 + +
+统一基础设施管理平台 · 总体架构设计 +
+ +
+SRE Team +
+ + + +--- +layout: default +--- + +# 目录 + +
+
+ +### 一、名词概述 + +- 组内约定 +- 通用术语 + +
+
+ +### 二、架构图 + +- 平台分层架构 +- 部署架构 +- 监控告警链路 +- 安全认证流程 + +
+
+ +### 三、架构描述 + +- 技术选型 +- 数据库设计 +- 安全机制 +- 运维模型与风险 + +
+
+ +--- +section: 名词概述 +layout: center +--- + +# 一、名词概述 + +
平台核心概念与通用术语
+ +--- +layout: default +--- + +# 组内约定 + +
+
+ +### 主系统 +XINFRA 平台自身的统管层,负责子系统无法覆盖的能力: +- 统一门户(SSO 跳转入口) +- 资源大盘、运维终端 +- 登录审计与运维操作审计 +- 资源指标面板 + +
+
+ +### 子系统 +XINFRA 纳管的专项平台(独立 WebUI + API): +- **Wayne** — 多集群容器管理 +- **CloudDM** — 数据库管理与 SQL 审核 +- **CacheCloud** — Redis 缓存管理 +- **Apollo** — 配置中心 +- **Grafana** — 监控可视化 +- **qpass** — 统一告警与值班通知 + +
+
+ +
+
+ +### 工具层 +纳管的 CLI / IaC 工具,无常驻 WebUI: +- **Ansible Playbook** — 自动化部署与基础设施即代码 + +
+
+ +### 监控告警层 +聚合异构告警源,统一去重、收敛、分级: +- **Nightingale(夜莺)** — 告警聚合引擎 +- **VictoriaMetrics** — 容器/业务指标存储 +- **Zabbix** — 物理机硬件监控 + +
+
+ + + +--- + +# 通用术语(一) + +
+
+ +| 术语 | 说明 | +|------|------| +| **APIKey** | Wayne 对外 API 认证密钥,CI/CD 自动化场景使用,最小权限 | +| **RBAC** | 基于角色的访问控制,用户与角色关联实现权限隔离 | +| **RKE2** | Rancher K8s 发行版,CIS 安全加固,支持离线安装 | +| **Calico BGP** | 纯路由模式无隧道开销,每集群独立 AS 号,跨机房扁平网络 | +| **Ceph RBD** | 分布式块存储,供给 K8s PV 给有状态服务 | +| **Nightingale** | 夜莺,统一告警聚合引擎,去重收敛分级后推送 | +| **Apollo** | 携程开源配置中心,多机房部署、灰度、回滚、审计 | + +
+
+ +| 术语 | 说明 | +|------|------| +| **Consul** | 各机房服务注册发现,XINFRA 只读聚合展示 | +| **CD** | 持续部署,自动化服务上线流水线 | +| **WAF** | Web 应用防火墙,防护 SQL 注入、XSS、CSRF | +| **SLA** | 服务等级协议,定义可用性承诺指标 | +| **IaC** | 基础设施即代码,通过 Ansible 实现自动化管理 | +| **SINA CMDB** | 公司内部 CMDB,物理机与虚机资产数据基础来源 | +| **SSO** | 单点登录,主系统通过 LDAP 统一认证后跳转子系统 | + +
+
+ +--- +section: 架构图 +layout: center +--- + +# 二、架构图 + +
平台分层 · 部署 · 监控 · 安全
+ +--- + +# 平台分层架构 — 总体分层 + +
+ +```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 +``` + +
+ +
+ +> 主系统不替代子系统,只自建子系统无法覆盖的能力:全局视图、运维兜底、审计、资源台账。 + +
+ +--- + +# 平台分层架构 — 子系统集成 + +
+ +```mermaid +graph LR + Portal["XINFRA 主系统"] + + subgraph 子系统 + Wayne["Wayne
多集群容器管理"] + CloudDM["CloudDM
SQL 审核"] + CacheCloud["CacheCloud
Redis 管理"] + Apollo["Apollo
配置中心"] + Grafana["Grafana
监控可视化"] + QPass["qpass
告警通知"] + end + + Portal -.->|SSO 跳转| Wayne & CloudDM & CacheCloud & Apollo & Grafana & QPass + + Wayne -->|Client-Go| RKE2["RKE2 集群"] + CloudDM -->|SQL 审核| MySQL[("MySQL")] + CacheCloud -->|Agent| Redis[("Redis")] + Apollo -->|ConfigService| RKE2 +``` + +
+ +
+ +> 子系统各自独立部署和授权,主系统只做 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 +``` + +
+ +
+ +> RKE2 是计算底座,Calico BGP 构建跨机房扁平网络,Ceph RBD 提供持久化存储,Ansible 贯穿自动化运维。 + +
+ +--- + +# 部署架构 + +
+ +```mermaid +graph TB + subgraph "RKE2 集群(任一机房)" + subgraph "xinfra 命名空间" + FE["Nginx
前端静态文件 + 反向代理"] + BE["Go API Server
Deployment × 2"] + WS["WebSocket Gateway
任务日志实时推送"] + end + + subgraph "监控命名空间" + VM[("VictoriaMetrics")] + Grafana["Grafana"] + NE["Nightingale"] + end + + subgraph "子系统命名空间" + Wayne["Wayne"] + CloudDM["CloudDM"] + CacheCloud["CacheCloud"] + Apollo["Apollo"] + end + end + + LB["SLB / NodePort"] --> FE + FE -->|/api/*| BE + FE -->|WebSocket| WS + BE --> MySQL[("MySQL 8.0 主从")] + BE --> Redis[("Redis 会话缓存")] + BE -->|SSH/Ansible| Nodes["业务节点池"] + WS --> BE + + style FE fill:#e0f2fe,stroke:#0284c7 + style BE fill:#e0f2fe,stroke:#0284c7 + style WS fill:#e0f2fe,stroke:#0284c7 +``` + +
+ + + +--- + +# 监控告警数据流 + +
+ +```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 -.->|Webhook| Nightingale + Nightingale --> QPass + Zabbix -->|Zabbix API| Main["XINFRA 主系统
资源状态看板"] +``` + +
+ +
+ +> Zabbix 硬件监控分两条链路:告警事件通过 Webhook 推送至夜莺统一聚合;可观测数据(IPMI/温度/电源/风扇等)由主系统直接调用 Zabbix API 采集展示。 + +
+ +--- + +# 基础服务交付流程 + +
+ +```mermaid +sequenceDiagram + actor User as 业务人员 + participant Portal as XINFRA 服务目录 + participant Ansible as Ansible Playbook + participant Infra as RKE2 / 主机 + participant Sub as 子系统注册 + + User->>Portal: 选择服务卡片,填写业务线、规格 + Portal->>Portal: 实时预览 playbook 参数(YAML) + User->>Portal: 确认部署 + Portal->>Ansible: 提交 playbook 任务 + Ansible->>Infra: 内核初始化 · containerd · 加入集群 + Ansible-->>Portal: 任务状态 → WebSocket 实时日志 + Portal->>Sub: 自动注册(CloudDM / CacheCloud) + Portal-->>User: 部署完成,跳转任务中心 +``` + +
+ +
+ +> 用户通过服务卡片填参 → Ansible 自动化部署 → 完成后自动注册到对应子系统,全程日志实时查看。 + +
+ +--- + +# 多租户隔离模型(Phase 2+) + +
+ +```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 +``` + +
+ +
+ +> **双重隔离**:节点层通过 `business-line=xxx` 标签 + Taint 确保 Pod 调度隔离;命名空间层通过 ResourceQuota / LimitRange 限制资源用量上限。 +> Phase 1 仅做基础设施准备(节点标签预留),多租户功能为 Phase 2+。 + +
+ +--- + +# 安全认证流程 + +
+ +```mermaid +sequenceDiagram + actor User as 用户 + participant Main as XINFRA 主系统 + participant LDAP as 企业 LDAP + participant Sub as 子系统 + + User->>Main: 访问主系统 + Main->>LDAP: SAML 认证请求 + LDAP-->>Main: SAML Response(用户身份 + LDAP 组信息) + Main->>Main: 签发 JWT Token(含角色 + 业务线) + Main-->>User: 登录成功,返回 Token + + User->>Main: 点击子系统卡片 + Main->>Sub: OAuth 2.0 Authorization Code + Sub->>Main: 验证 Token,创建子系统会话 + Main-->>User: 跳转至子系统(免登录) +``` + +
+ +
+ +> 外部 LDAP 通过 SAML 集成统一认证;子系统 SSO 通过 OAuth 2.0 对接,实现单点登录免跳转。 + +
+ +--- +section: 架构描述 +layout: center +--- + +# 三、架构描述 + +
技术选型 · 数据库设计 · 安全机制 · 运维模型
+ +--- +layout: default +--- + +# 技术选型 + +
+
+ +| 层级 | 选型 | +|------|------| +| 前端框架 | Vue 3 + Element Plus | +| 后端框架 | Go + Gin | +| 前后端通信 | REST/JSON,URL 路径版本 | +| 主系统数据库 | MySQL 8.0 | +| 缓存 | Redis | +| 前端部署 | Nginx | +| 主系统部署 | K8s Deployment | + +
+
+ +| 层级 | 选型 | +|------|------| +| SSO 协议 | OAuth 2.0 + SAML | +| 告警数据源 | Nightingale + Zabbix API | +| Ansible 调度 | SSH 直接执行 | +| 实时推送 | 原生 WebSocket | +| 接口文档 | Swagger/OpenAPI | +| 界面语言 | 纯中文 | +| 测试策略 | 后端单元 + 集成测试 | + +
+
+ +### 选型依据 + +| 选型 | 理由 | 备选淘汰原因 | +|------|------|------------| +| Vue 3 + Element Plus | 七牛内部技术栈统一,团队有 Vue 2 迁移经验 | React + Ant Design — 学习成本更高 | +| Go + Gin | Wayne/CloudDM 同生态,可复用 Client-Go、GORM | Java Spring Boot — 部署资源占用更大 | +| MySQL 8.0 | 运维团队已有经验和工具链,CloudDM 原生支持 | PostgreSQL — 团队运维经验不足 | + +--- + +# API 设计规范 + +
+
+ +| 规范项 | 约定 | +|--------|------| +| 路由命名 | RESTful 风格,资源名复数 | +| 版本管理 | URL 路径版本 `/api/v1/...` | +| 分页 | `?page=1&pageSize=20`,响应含 `total` | +| 排序 | `?sort=created_at&order=desc` | +| 筛选 | `?status=running&businessLine=kodo` | + +
+
+ +| 规范项 | 约定 | +|--------|------| +| 错误码 | HTTP 状态码 + 业务错误码 | +| 认证 | Bearer Token(JWT),OAuth 2.0 获取 | +| 响应格式 | `{ "code": 0, "data": {...} }` | +| 接口文档 | Swagger/OpenAPI 3.0 | + +
+
+ +### 路由示例 + +``` +GET /api/v1/clusters # 集群列表 +GET /api/v1/clusters/:id/nodes # 集群节点 +POST /api/v1/tasks # 创建任务 +GET /api/v1/audit-logs?page=1&pageSize=20 +``` + +--- + +# 数据库 ER 设计(核心表) + +
+ +```mermaid +erDiagram + USERS ||--o{ AUDIT_LOGS : "产生" + USERS ||--o{ TASKS : "执行" + USERS ||--o{ API_KEYS : "拥有" + + USERS { + bigint id PK + varchar username UK "LDAP 用户名" + varchar role "管理员/操作员/访客" + varchar business_line "所属业务线" + } + + AUDIT_LOGS { + bigint id PK + bigint user_id FK + varchar action "login/terminal/playbook" + varchar ip "来源 IP" + } + + TASKS { + bigint id PK + varchar task_type "ansible/wayne-deploy" + varchar status "pending/running/success/failed" + bigint user_id FK + } + + API_KEYS { + bigint id PK + varchar key_hash UK "密钥哈希" + varchar scope "授权范围" + datetime expires_at + } + + CLUSTERS { + bigint id PK + varchar name UK "集群名称" + varchar datacenter "所在机房" + varchar status "健康状态" + } + + NODES { + bigint id PK + bigint cluster_id FK + varchar hostname "主机名" + varchar business_line "业务线标签" + } + + RESOURCES { + bigint id PK + varchar hostname UK "主机名" + varchar source "cmdb/alicloud/aws/las" + varchar lifecycle "production/idle/retired" + } +``` + +
+ +--- + +# 安全机制 + +
+
+ +### 认证与授权 + +| 层面 | 机制 | +|------|------| +| 身份认证 | SAML + OAuth 2.0 | +| 访问控制 | RBAC + 业务线维度 | +| 传输安全 | HTTPS + TLS 1.2+ | +| 数据加密 | AES-256,敏感字段加密存储 | +| APIKey 管理 | SHA-256 哈希存储,scope 粒度授权 | + +
+
+ +### 审计与隔离 + +| 层面 | 机制 | +|------|------| +| 审计留痕 | 登录/运维/API 全程记录,不可篡改 | +| 网络隔离 | BGP + 防火墙,管理面与数据面分离 | +| 凭证管理 | 禁止默认凭证,Vault / K8s Secret | +| Ansible/SSH | 仅管理员可见,普通用户菜单不包含 | + +
+
+ +
+ +> **RBAC 二维模型**:权限维度(角色能力)× 业务线维度(资源范围),遵循最小权限原则。 +> 所有跨层操作全程审计留痕。 + +
+ +--- + +# 运维分层模型 + +
+ +| 故障层级 | 处理方 | 工具链 | 权限要求 | +|---------|--------|--------|---------| +| 应用发布异常 | 子系统自愈 | Wayne 一键回滚 | 项目成员 | +| 中间件故障 | 子系统自恢复 | CacheCloud / CloudDM 内置能力 | 子系统运维角色 | +| 配置变更异常 | Apollo 回滚 | Apollo 版本回滚 + 灰度发布 | 配置管理员 | +| 基础设施故障 | 主系统管理员 | Ansible Playbook / SSH 终端 | 仅主系统管理员 | +| 机房级故障 | 主系统管理员 | Ansible + 大内网链路切换 | 仅主系统管理员 | + +
+ +
+ +> 故障按层级自愈,跨层操作需主系统管理员权限。Ansible / SSH 终端等基础设施级操作仅对管理员角色可见,所有跨层操作全程审计留痕。 + +
+ +--- + +# 风险与约束 + +
+
+ +| 风险 | 缓解措施 | +|------|---------| +| RKE2 版本升级不兼容 | 测试环境验证,灰度发布 | +| Wayne 开源维护不确定 | 内部 Fork,保持核心可维护 | +| 七机房网络链路故障 | 网络冗余 + BGP 自动切换 | +| SQL 审核规则误判 | 白名单机制 + 规则持续调优 | +| Redis 大 Key / 热 Key | CacheCloud 诊断 + 应用侧治理 | + +
+
+ +| 风险 | 缓解措施 | +|------|---------| +| Apollo 多机房配置一致性 | 本地缓存降级 + 灰度发布 | +| Consul 跨机房同步延迟 | 30 秒轮询 + 健康状态标注 | +| 云平台 API 限流 | 增量同步 + 重试 + 状态告警 | +| AWX 未引入,Ansible 直调 | 自建任务队列 + WebSocket 日志 | +| Go/Gin 开发人力 | 复用 Wayne/CloudDM 生态降低学习成本 | + +
+
+ +--- +layout: center +--- + +# 总结 + +
+
+ +### 🏗 四层架构 +用户层 → 主系统层
→ 子系统层 → 基础设施层 + +
+
+ +### 🔐 统一安全 +LDAP SAML 认证
RBAC + 业务线隔离
全程审计留痕 + +
+
+ +### 🚀 自动化运维 +Ansible IaC 交付
WebSocket 实时日志
故障分层自愈 + +
+
+ +
+XINFRA — 统一基础设施管理平台 +
diff --git a/index.html b/index.html index 83c6084..53be365 100644 --- a/index.html +++ b/index.html @@ -26,7 +26,7 @@