4. Istio 安全架构:Citadel、Sidecar 证书加载与 SPIFFE 身份
Istio 的安全架构围绕“零信任”网络模型设计,其核心在于为每个工作负载颁发强身份标识,并基于此实现双向 TLS(mTLS)认证。本章深入剖析 Istio 安全体系的三大支柱:证书签发机构(Citadel)、Sidecar 代理的证书加载机制,以及底层的 SPIFFE 身份标准。
4.1 Istio Citadel:证书签发机构
Citadel(现已演进为 istiod 中的安全组件)是 Istio 的证书颁发机构(CA)。它负责管理密钥和证书的生命周期,为网格内的所有工作负载提供身份凭证。
- 密钥生成:为每个服务账户生成公私钥对。
- 证书签发:根据 SPIFFE 标准签发 X.509 证书,将服务身份绑定到证书中。
- 证书轮换:自动管理证书的过期与轮换,默认每 24 小时轮换一次。
- CA 证书管理:维护根证书和中间证书,供网格内所有组件信任。
Citadel 支持多种 CA 集成方式,以适应不同的生产环境需求:
| 集成模式 | 描述 | 适用场景 |
|---|---|---|
| 自签名 CA(默认) | Istio 自动生成自签名根证书和中间证书。 | 开发、测试环境,快速验证。 |
| 集成外部 CA | 对接企业 PKI 或云厂商 CA 服务(如 cert-manager)。 | 生产环境,满足合规与审计要求。 |
| 插件 CA | 通过 Kubernetes CSR API 与外部 CA 交互。 | 需要与现有证书管理体系集成的场景。 |
4.2 Sidecar 代理(Envoy)的证书加载机制
Envoy 代理作为数据平面的核心,其证书加载机制直接决定了 mTLS 通信的效率和安全性。Istio 通过 Secret Discovery Service(SDS) 实现了证书的动态加载与轮换。
传统方式(Envoy 文件挂载)存在证书轮换时需要重启代理的缺陷。SDS 机制彻底解决了这一问题:
- 启动阶段:Envoy 启动时,通过 SDS API 向 Citadel(istiod)请求证书。
- 身份验证:Citadel 验证 Envoy 所代表的 Pod 的 Kubernetes 服务账户(Service Account)。
- 证书下发:Citadel 生成包含 SPIFFE 身份的证书,并通过 SDS 通道下发给 Envoy。
- 动态更新:Envoy 监听 SDS 资源变化,当证书即将过期时,自动请求新证书,无需重启。
下图展示了 Envoy 通过 SDS 从 Citadel 获取证书的完整流程:
4.3 SPIFFE 标准与身份标识
SPIFFE(Secure Production Identity Framework for Everyone) 是云原生环境下工作负载身份的标准规范。Istio 完全遵循 SPIFFE 标准,为每个工作负载分配唯一的身份标识。
4.3.1 SPIFFE 身份格式
SPIFFE 身份通过 SPIFFE ID 表示,格式为 URI:
spiffe://<trust-domain>/ns/<namespace>/sa/<service-account>
在 Istio 中,一个典型的 SPIFFE ID 示例:
spiffe://cluster.local/ns/default/sa/bookinfo-productpage
该 ID 明确标识了:
- 信任域(Trust Domain):
cluster.local(默认值,可配置) - 命名空间(Namespace):
default - 服务账户(Service Account):
bookinfo-productpage
4.3.2 SPIFFE 在 Istio 中的实现
Istio 将 SPIFFE 身份嵌入到 X.509 证书的 Subject Alternative Name(SAN) 扩展字段中。当 Envoy 发起 mTLS 连接时,对端 Envoy 会提取证书中的 SPIFFE ID,并与预先配置的授权策略进行比对。
| 组件 | SPIFFE 角色 | 说明 |
|---|---|---|
| Citadel | SPIFFE 颁发者 | 根据服务账户签发包含 SPIFFE ID 的证书。 |
| Envoy | SPIFFE 消费者 | 在 mTLS 握手时出示证书,验证对端 SPIFFE ID。 |
| Pilot/istiod | 身份配置分发 | 将 SPIFFE 信任域和授权策略下发到数据平面。 |
- 信任域(trust-domain)应视为根信任锚点,跨集群通信时必须显式配置信任域映射。
- 服务账户是身份绑定的关键,避免在非生产命名空间中使用生产服务账户。
- SPIFFE ID 一旦泄露,攻击者可伪造身份。建议启用审计日志,监控证书签发行为。
下图展示了 SPIFFE 身份在 Istio 网格中的认证与授权关系:
4.4 安全架构总结
Istio 的安全架构通过 Citadel、SDS 和 SPIFFE 的协同工作,构建了一个完整的身份与信任体系:
- Citadel 作为信任的起点,负责签发和验证身份。
- SDS 实现了证书的动态分发与轮换,保障了高可用性。
- SPIFFE 提供了标准化的身份格式,使得跨平台、跨集群的身份互认成为可能。