数据流

概述

本文档描述 SPIRE 系统中的主要数据流,包括证明流程、SVID 颁发和轮换。

节点证明流程

        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
    

工作负载证明流程

        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 + 信任包
    

注册条目同步

同步流程

        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 生命周期

状态机

        stateDiagram-v2
    [*] --> 请求: 工作负载连接
    请求 --> 颁发: 匹配成功
    请求 --> 拒绝: 匹配失败
    颁发 --> 活跃: SVID 有效
    活跃 --> 轮换中: TTL < 50%
    轮换中 --> 活跃: 新 SVID 颁发
    活跃 --> 过期: 未能续期
    过期 --> [*]
    拒绝 --> [*]
    

轮换时机

Agent 在以下情况触发 SVID 轮换:

  • 剩余 TTL 小于 50%

  • Server 推送新的注册条目

  • 手动触发

JWT-SVID 流程

        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
    

信任包分发

本地信任包

        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
    

联邦信任包

        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

注册条目

定期同步

优化建议

性能提示

  1. 启用事件缓存: 减少数据库查询

  2. 调整同步间隔: 根据负载调整

  3. 使用连接池: 数据库连接复用

  4. 监控延迟: 设置告警阈值

下一步

了解 插件系统 以深入理解 SPIRE 的可扩展性。