# 数据流 ## 概述 本文档描述 SPIRE 系统中的主要数据流,包括证明流程、SVID 颁发和轮换。 ## 节点证明流程 ```{mermaid} sequenceDiagram participant Agent as SPIRE Agent participant NodeAttestor as 节点证明器(Agent) participant Server as SPIRE Server participant ServerAttestor as 节点证明器(Server) participant DataStore as 数据存储 participant CA as CA 管理器 Agent->>NodeAttestor: 请求证明数据 NodeAttestor-->>Agent: 返回证明数据 Agent->>Server: AttestAgent(证明数据) Server->>ServerAttestor: 验证证明数据 ServerAttestor-->>Server: 验证结果 Server->>DataStore: 创建/更新节点记录 Server->>CA: 请求 Agent SVID CA-->>Server: Agent SVID Server-->>Agent: Agent SVID + 信任包 Agent->>Agent: 存储 SVID ``` ## 工作负载证明流程 ```{mermaid} sequenceDiagram participant Workload as 工作负载 participant Agent as SPIRE Agent participant WorkloadAttestor as 工作负载证明器 participant Cache as 条目缓存 Workload->>Agent: FetchX509SVID Agent->>Agent: 获取调用者 PID Agent->>WorkloadAttestor: 生成选择器 WorkloadAttestor-->>Agent: 选择器列表 Agent->>Cache: 匹配注册条目 Cache-->>Agent: 匹配的条目 Agent-->>Workload: X.509-SVID + 信任包 ``` ## 注册条目同步 ### 同步流程 ```{mermaid} sequenceDiagram participant Agent as SPIRE Agent participant Server as SPIRE Server participant DataStore as 数据存储 participant Cache as Agent 缓存 loop 同步循环 Agent->>Server: FetchEntries Server->>DataStore: 查询授权条目 DataStore-->>Server: 条目列表 Server-->>Agent: 条目 + SVID Agent->>Cache: 更新缓存 end ``` ### 事件驱动缓存 对于大规模部署,Server 可以使用事件驱动缓存: 1. 注册条目变更触发事件 2. 事件存储在 `datastore_events` 表 3. 缓存订阅事件并增量更新 4. 定期清理过期事件 ## SVID 生命周期 ### 状态机 ```{mermaid} stateDiagram-v2 [*] --> 请求: 工作负载连接 请求 --> 颁发: 匹配成功 请求 --> 拒绝: 匹配失败 颁发 --> 活跃: SVID 有效 活跃 --> 轮换中: TTL < 50% 轮换中 --> 活跃: 新 SVID 颁发 活跃 --> 过期: 未能续期 过期 --> [*] 拒绝 --> [*] ``` ### 轮换时机 Agent 在以下情况触发 SVID 轮换: - 剩余 TTL 小于 50% - Server 推送新的注册条目 - 手动触发 ## JWT-SVID 流程 ```{mermaid} sequenceDiagram participant Workload as 工作负载 participant Agent as SPIRE Agent participant Server as SPIRE Server participant CA as CA 管理器 Workload->>Agent: FetchJWTSVID(audience) Agent->>Agent: 工作负载证明 Agent->>Server: MintJWTSVID Server->>CA: 签名 JWT CA-->>Server: JWT Token Server-->>Agent: JWT-SVID Agent-->>Workload: JWT-SVID ``` ## 信任包分发 ### 本地信任包 ```{mermaid} flowchart LR subgraph Server CA[CA 管理器] Bundle[信任包] end subgraph Agent Cache[信任包缓存] end subgraph Workload TLS[TLS 验证] end CA --> Bundle Bundle -->|同步| Cache Cache -->|Workload API| TLS ``` ### 联邦信任包 ```{mermaid} flowchart LR subgraph "域 A" ServerA[Server A] BundleA[信任包 A] end subgraph "域 B" ServerB[Server B] BundleB[信任包 B] end ServerA -->|发布| BundleA ServerB -->|发布| BundleB ServerA <-->|联邦| ServerB BundleA -->|分发| ServerB BundleB -->|分发| ServerA ``` ## 性能考虑 ### 缓存策略 | 组件 | 缓存内容 | 刷新策略 | |------|---------|----------| | Server | 注册条目 | 事件驱动/轮询 | | Agent | SVID | TTL 50% | | Agent | 信任包 | 实时同步 | | Agent | 注册条目 | 定期同步 | ### 优化建议 :::{admonition} 性能提示 :class: tip 1. **启用事件缓存**: 减少数据库查询 2. **调整同步间隔**: 根据负载调整 3. **使用连接池**: 数据库连接复用 4. **监控延迟**: 设置告警阈值 ::: ## 下一步 了解 {doc}`/3.architecture/plugin-system` 以深入理解 SPIRE 的可扩展性。