数据流
概述
本文档描述 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 可以使用事件驱动缓存:
注册条目变更触发事件
事件存储在
datastore_events表缓存订阅事件并增量更新
定期清理过期事件
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 |
注册条目 |
定期同步 |
优化建议
性能提示
启用事件缓存: 减少数据库查询
调整同步间隔: 根据负载调整
使用连接池: 数据库连接复用
监控延迟: 设置告警阈值
下一步
了解 插件系统 以深入理解 SPIRE 的可扩展性。