```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"]
- Superset["Superset"]
- end
+ subgraph "XINFRA 运行环境"
+ FE["Nginx
静态资源 + 反向代理"]
+ BE["Go API Server
资源 / 交付 / 审核 / 审计"]
+ WS["WebSocket Gateway
任务日志实时推送"]
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
+ subgraph "数据与状态"
+ DB[("MySQL
主数据 / 审计 / 任务")]
+ Cache[("Redis
会话 / 缓存")]
+ end
- style FE fill:#e0f2fe,stroke:#0284c7
- style BE fill:#e0f2fe,stroke:#0284c7
- style WS fill:#e0f2fe,stroke:#0284c7
+ subgraph "外部系统"
+ Wayne["Wayne"]
+ CloudDM["CloudDM"]
+ Apollo["Apollo"]
+ Nightingale["夜莺"]
+ AC["Ansible 控制中心"]
+ end
+
+ LB["SLB / Ingress"] --> FE
+ FE --> BE
+ FE --> WS
+ BE --> DB
+ BE --> Cache
+ BE --> Wayne & CloudDM & Apollo & Nightingale & AC
```
+
```mermaid
graph LR
- subgraph 采集源
- RKE2["RKE2 集群"]
- Zabbix["Zabbix
硬件监控"]
+ subgraph 资源层
+ K8s["K8s 集群"]
+ Node["物理机 / 虚机"]
end
- subgraph 指标存储
- VM[("VictoriaMetrics
容器/业务指标")]
+ subgraph 监控源
+ Nightingale["夜莺"]
end
- subgraph 可视化
- Grafana["Grafana 仪表盘"]
+ subgraph 展示层
+ Main["XINFRA 监控概览"]
end
- subgraph 告警链路
- Nightingale["夜莺
去重 · 收敛 · 分级"]
- end
-
- RKE2 -.->|Metrics| VM
- VM --> Grafana
- VM --> Nightingale
- Zabbix -.->|Webhook| Nightingale
- Zabbix -->|Zabbix API| Main["XINFRA 主系统
资源状态看板"]
+ K8s -.->|指标| Nightingale
+ Node -.->|指标| Nightingale
+ Nightingale --> Main
```
-
-
-> 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: 部署完成,跳转任务中心
-```
-
-
-
-
----
-
-# 多租户隔离模型
-
-
-
-```mermaid
-graph LR
- 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 限制资源用量上限。
-
-
-
----
-
-# 安全认证流程
-
-
-
-```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