Files
slide/decks/xinfra/slides.md
T

762 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
theme: frankfurt
title: XINFRA 平台架构
author: 实训小组
infoLine: true
transition: slide-left
mdc: true
drawings:
persist: false
---
# XINFRA 平台架构
<div class="text-xl mt-4 text-gray-400">
统一基础设施管理平台 · 总体架构设计
</div>
<div class="mt-8 text-lg text-gray-500">
实训小组
</div>
<!--
封面:XINFRA 平台架构总览
-->
---
layout: default
---
# 目录
<div class="grid grid-cols-3 gap-8 mt-8">
<div>
### 一、名词概述
- 组内约定
- 通用术语
</div>
<div>
### 二、架构图
- 平台分层架构
- 部署架构
- 监控告警链路
- 安全认证流程
</div>
<div>
### 三、架构描述
- 技术选型
- 数据库设计
- 安全机制
- 运维模型与风险
</div>
</div>
---
section: 名词概述
layout: center
---
# 一、名词概述
<div class="text-gray-400 mt-2">平台核心概念与通用术语</div>
---
layout: default
---
# 组内约定
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 主系统
XINFRA 平台自身的统管层,负责子系统无法覆盖的能力:
- 统一门户(SSO 跳转入口)
- 资源大盘、运维终端
- 登录审计与运维操作审计
- 资源指标面板
</div>
<div>
### 子系统
XINFRA 纳管的专项平台(独立 WebUI + API):
- **Wayne** — 多集群容器管理
- **CloudDM** — 数据库管理与 SQL 审核
- **CacheCloud** — Redis 缓存管理
- **Apollo** — 配置中心
- **Grafana** — 监控可视化
- **qpass** — 统一告警与值班通知
</div>
</div>
<div class="grid grid-cols-2 gap-6 mt-6">
<div>
### 工具层
纳管的 CLI / IaC 工具,无常驻 WebUI:
- **Ansible Playbook** — 自动化部署与基础设施即代码
</div>
<div>
### 监控告警层
聚合异构告警源,统一去重、收敛、分级:
- **Nightingale(夜莺)** — 告警聚合引擎
- **VictoriaMetrics** — 容器/业务指标存储
- **Zabbix** — 物理机硬件监控
</div>
</div>
<!--
主系统不替代子系统,只自建子系统无法覆盖的能力
-->
---
# 通用术语(一)
<div class="grid grid-cols-2 gap-x-8 gap-y-3 mt-4 text-sm">
<div>
| 术语 | 说明 |
|------|------|
| **APIKey** | Wayne 对外 API 认证密钥,CI/CD 自动化场景使用,最小权限 |
| **RBAC** | 基于角色的访问控制,用户与角色关联实现权限隔离 |
| **RKE2** | Rancher K8s 发行版,CIS 安全加固,支持离线安装 |
| **Calico BGP** | 纯路由模式无隧道开销,每集群独立 AS 号,跨机房扁平网络 |
| **Ceph RBD** | 分布式块存储,供给 K8s PV 给有状态服务 |
| **Nightingale** | 夜莺,统一告警聚合引擎,去重收敛分级后推送 |
| **Apollo** | 携程开源配置中心,多机房部署、灰度、回滚、审计 |
</div>
<div>
| 术语 | 说明 |
|------|------|
| **Consul** | 各机房服务注册发现,XINFRA 只读聚合展示 |
| **CD** | 持续部署,自动化服务上线流水线 |
| **WAF** | Web 应用防火墙,防护 SQL 注入、XSS、CSRF |
| **SLA** | 服务等级协议,定义可用性承诺指标 |
| **IaC** | 基础设施即代码,通过 Ansible 实现自动化管理 |
| **SINA CMDB** | 公司内部 CMDB,物理机与虚机资产数据基础来源 |
| **SSO** | 单点登录,主系统通过 LDAP 统一认证后跳转子系统 |
</div>
</div>
---
section: 架构图
layout: center
---
# 二、架构图
<div class="text-gray-400 mt-2">平台分层 · 部署 · 监控 · 安全</div>
---
# 平台分层架构 — 总体分层
<div class="mt-2">
```mermaid
graph TB
User["用户层<br/>LDAP SSO 统一认证"] --> Main["主系统层<br/>统一门户 + 功能模块"]
Main --> Sub["子系统层<br/>独立部署,各自授权"]
Main --> Infra["基础设施层<br/>计算 · 网络 · 存储 · 自动化"]
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
```
</div>
<div class="mt-4 text-sm text-gray-400">
> 四层模型:用户层 → 主系统层 → 子系统层 → 基础设施层,主系统是统一入口,子系统各司其职。
</div>
---
# 平台分层架构 — 主系统功能
<div class="mt-2">
```mermaid
graph TB
Portal["统一门户<br/>LDAP SSO 跳转入口"]
subgraph 全局视图
DashBoard["资源大盘<br/>集群拓扑 · 节点方格图"]
MonitorView["资源状态看板<br/>物理机/虚机/服务三层告警"]
end
subgraph 运维能力
TaskCenter["任务中心<br/>Ansible/Wayne 实时日志"]
OpsTerminal["运维终端<br/>Ansible / SSH<br/>仅管理员"]
end
subgraph 治理能力
AuditDash["审计面板<br/>登录记录 · 运维操作日志"]
CMDB["资源台账<br/>CMDB 多云同步"]
SvcDir["服务目录<br/>Consul 只读聚合"]
end
Portal --> DashBoard & MonitorView & TaskCenter & AuditDash & CMDB & SvcDir
```
</div>
<div class="mt-2 text-sm text-gray-400">
> 主系统不替代子系统,只自建子系统无法覆盖的能力:全局视图、运维兜底、审计、资源台账。
</div>
---
# 平台分层架构 — 子系统集成
<div class="mt-2">
```mermaid
graph LR
Portal["XINFRA 主系统"]
subgraph 子系统
Wayne["Wayne<br/>多集群容器管理"]
CloudDM["CloudDM<br/>SQL 审核"]
CacheCloud["CacheCloud<br/>Redis 管理"]
Apollo["Apollo<br/>配置中心"]
Grafana["Grafana<br/>监控可视化"]
QPass["qpass<br/>告警通知"]
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
```
</div>
<div class="mt-2 text-sm text-gray-400">
> 子系统各自独立部署和授权,主系统只做 SSO 跳转入口,各子系统自行维护操作审计。
</div>
---
# 平台分层架构 — 基础设施层
<div class="mt-2">
```mermaid
graph TB
subgraph 计算
RKE2["RKE2 集群 × 7 机房<br/>CIS 安全加固"]
end
subgraph 网络
Calico["Calico BGP<br/>每集群独立 AS 号<br/>跨机房扁平互通"]
end
subgraph 存储
Ceph["Ceph RBD<br/>MySQL/Redis 有状态服务 PV"]
end
subgraph 自动化
Ansible["Ansible Playbook<br/>节点初始化 · 服务部署<br/>WebSocket 实时日志"]
end
RKE2 --> Calico
RKE2 --> Ceph
Ansible -->|SSH| RKE2
```
</div>
<div class="mt-2 text-sm text-gray-400">
> RKE2 是计算底座,Calico BGP 构建跨机房扁平网络,Ceph RBD 提供持久化存储,Ansible 贯穿自动化运维。
</div>
---
# 部署架构
<div class="mt-2">
```mermaid
graph TB
subgraph "RKE2 集群(任一机房)"
subgraph "xinfra 命名空间"
FE["Nginx<br/>前端静态文件 + 反向代理"]
BE["Go API Server<br/>Deployment × 2"]
WS["WebSocket Gateway<br/>任务日志实时推送"]
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
```
</div>
<!--
Nginx 托管前端静态文件并反向代理后端 API,Go API Server 无状态水平扩展,WebSocket Gateway 独立处理实时日志推送
-->
---
# 监控告警数据流
<div class="mt-2">
```mermaid
graph LR
subgraph 采集源
RKE2["RKE2 集群"]
Zabbix["Zabbix<br/>硬件监控"]
end
subgraph 指标存储
VM[("VictoriaMetrics<br/>容器/业务指标")]
end
subgraph 可视化
Grafana["Grafana 仪表盘"]
end
subgraph 告警链路
Nightingale["夜莺<br/>去重 · 收敛 · 分级"]
QPass["qpass<br/>企业 IM 推送"]
end
RKE2 -.->|Metrics| VM
VM --> Grafana
VM --> Nightingale
Zabbix -.->|Webhook| Nightingale
Nightingale --> QPass
Zabbix -->|Zabbix API| Main["XINFRA 主系统<br/>资源状态看板"]
```
</div>
<div class="mt-2 text-sm text-gray-400">
> Zabbix 硬件监控分两条链路:告警事件通过 Webhook 推送至夜莺统一聚合;可观测数据(IPMI/温度/电源/风扇等)由主系统直接调用 Zabbix API 采集展示。
</div>
---
# 基础服务交付流程
<div class="mt-2">
```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: 部署完成,跳转任务中心
```
</div>
<div class="mt-2 text-sm text-gray-400">
> 用户通过服务卡片填参 → Ansible 自动化部署 → 完成后自动注册到对应子系统,全程日志实时查看。
</div>
---
# 多租户隔离模型(Phase 2+)
<div class="mt-2">
```mermaid
graph TB
LDAP["企业 LDAP"] -->|部门 DN| BL["业务线租户<br/>Kodo / LAS / 灵矽 / ..."]
BL --> NS["Kubernetes Namespace<br/>+ ResourceQuota + LimitRange"]
BL --> NP["物理节点池<br/>node-label + taint"]
NS -.->|Pod 只能调度到<br/>本业务线节点| 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
```
</div>
<div class="mt-4 text-sm text-gray-400">
> **双重隔离**:节点层通过 `business-line=xxx` 标签 + Taint 确保 Pod 调度隔离;命名空间层通过 ResourceQuota / LimitRange 限制资源用量上限。
> Phase 1 仅做基础设施准备(节点标签预留),多租户功能为 Phase 2+。
</div>
---
# 安全认证流程
<div class="mt-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: 跳转至子系统(免登录)
```
</div>
<div class="mt-2 text-sm text-gray-400">
> 外部 LDAP 通过 SAML 集成统一认证;子系统 SSO 通过 OAuth 2.0 对接,实现单点登录免跳转。
</div>
---
section: 架构描述
layout: center
---
# 三、架构描述
<div class="text-gray-400 mt-2">技术选型 · 数据库设计 · 安全机制 · 运维模型</div>
---
layout: default
---
# 技术选型
<div class="grid grid-cols-2 gap-6 mt-4 text-sm">
<div>
| 层级 | 选型 |
|------|------|
| 前端框架 | Vue 3 + Element Plus |
| 后端框架 | Go + Gin |
| 前后端通信 | REST/JSON,URL 路径版本 |
| 主系统数据库 | MySQL 8.0 |
| 缓存 | Redis |
| 前端部署 | Nginx |
| 主系统部署 | K8s Deployment |
</div>
<div>
| 层级 | 选型 |
|------|------|
| SSO 协议 | OAuth 2.0 + SAML |
| 告警数据源 | Nightingale + Zabbix API |
| Ansible 调度 | SSH 直接执行 |
| 实时推送 | 原生 WebSocket |
| 接口文档 | Swagger/OpenAPI |
| 界面语言 | 纯中文 |
| 测试策略 | 后端单元 + 集成测试 |
</div>
</div>
### 选型依据
| 选型 | 理由 | 备选淘汰原因 |
|------|------|------------|
| 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 设计规范
<div class="grid grid-cols-2 gap-6 mt-4 text-sm">
<div>
| 规范项 | 约定 |
|--------|------|
| 路由命名 | RESTful 风格,资源名复数 |
| 版本管理 | URL 路径版本 `/api/v1/...` |
| 分页 | `?page=1&pageSize=20`,响应含 `total` |
| 排序 | `?sort=created_at&order=desc` |
| 筛选 | `?status=running&businessLine=kodo` |
</div>
<div>
| 规范项 | 约定 |
|--------|------|
| 错误码 | HTTP 状态码 + 业务错误码 |
| 认证 | Bearer Token(JWT),OAuth 2.0 获取 |
| 响应格式 | `{ "code": 0, "data": {...} }` |
| 接口文档 | Swagger/OpenAPI 3.0 |
</div>
</div>
### 路由示例
```
GET /api/v1/clusters # 集群列表
GET /api/v1/clusters/:id/nodes # 集群节点
POST /api/v1/tasks # 创建任务
GET /api/v1/audit-logs?page=1&pageSize=20
```
---
# 数据库 ER 设计(核心表)
<div class="mt-2">
```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"
}
```
</div>
---
# 安全机制
<div class="grid grid-cols-2 gap-6 mt-4">
<div>
### 认证与授权
| 层面 | 机制 |
|------|------|
| 身份认证 | SAML + OAuth 2.0 |
| 访问控制 | RBAC + 业务线维度 |
| 传输安全 | HTTPS + TLS 1.2+ |
| 数据加密 | AES-256,敏感字段加密存储 |
| APIKey 管理 | SHA-256 哈希存储,scope 粒度授权 |
</div>
<div>
### 审计与隔离
| 层面 | 机制 |
|------|------|
| 审计留痕 | 登录/运维/API 全程记录,不可篡改 |
| 网络隔离 | BGP + 防火墙,管理面与数据面分离 |
| 凭证管理 | 禁止默认凭证,Vault / K8s Secret |
| Ansible/SSH | 仅管理员可见,普通用户菜单不包含 |
</div>
</div>
<div class="mt-6 p-4 bg-blue-50 rounded-lg text-sm text-blue-800">
> **RBAC 二维模型**:权限维度(角色能力)× 业务线维度(资源范围),遵循最小权限原则。
> 所有跨层操作全程审计留痕。
</div>
---
# 运维分层模型
<div class="mt-4">
| 故障层级 | 处理方 | 工具链 | 权限要求 |
|---------|--------|--------|---------|
| 应用发布异常 | 子系统自愈 | Wayne 一键回滚 | 项目成员 |
| 中间件故障 | 子系统自恢复 | CacheCloud / CloudDM 内置能力 | 子系统运维角色 |
| 配置变更异常 | Apollo 回滚 | Apollo 版本回滚 + 灰度发布 | 配置管理员 |
| 基础设施故障 | 主系统管理员 | Ansible Playbook / SSH 终端 | 仅主系统管理员 |
| 机房级故障 | 主系统管理员 | Ansible + 大内网链路切换 | 仅主系统管理员 |
</div>
<div class="mt-6 p-4 bg-amber-50 rounded-lg text-sm text-amber-800">
> 故障按层级自愈,跨层操作需主系统管理员权限。Ansible / SSH 终端等基础设施级操作仅对管理员角色可见,所有跨层操作全程审计留痕。
</div>
---
# 风险与约束
<div class="grid grid-cols-2 gap-6 mt-4 text-sm">
<div>
| 风险 | 缓解措施 |
|------|---------|
| RKE2 版本升级不兼容 | 测试环境验证,灰度发布 |
| Wayne 开源维护不确定 | 内部 Fork,保持核心可维护 |
| 七机房网络链路故障 | 网络冗余 + BGP 自动切换 |
| SQL 审核规则误判 | 白名单机制 + 规则持续调优 |
| Redis 大 Key / 热 Key | CacheCloud 诊断 + 应用侧治理 |
</div>
<div>
| 风险 | 缓解措施 |
|------|---------|
| Apollo 多机房配置一致性 | 本地缓存降级 + 灰度发布 |
| Consul 跨机房同步延迟 | 30 秒轮询 + 健康状态标注 |
| 云平台 API 限流 | 增量同步 + 重试 + 状态告警 |
| AWX 未引入,Ansible 直调 | 自建任务队列 + WebSocket 日志 |
| Go/Gin 开发人力 | 复用 Wayne/CloudDM 生态降低学习成本 |
</div>
</div>
---
layout: center
---
# 总结
<div class="grid grid-cols-3 gap-8 mt-8 text-sm">
<div class="text-center">
### 🏗 四层架构
用户层 → 主系统层<br/>→ 子系统层 → 基础设施层
</div>
<div class="text-center">
### 🔐 统一安全
LDAP SAML 认证<br/>RBAC + 业务线隔离<br/>全程审计留痕
</div>
<div class="text-center">
### 🚀 自动化运维
Ansible IaC 交付<br/>WebSocket 实时日志<br/>故障分层自愈
</div>
</div>
<div class="mt-12 text-gray-400 text-center">
XINFRA — 统一基础设施管理平台
</div>