一、Istio证书和身份管理
Istio中,工作负载的身份标识完全遵循SPIFFE标准
身份标识SPIFFE ID是一个统一资源标识符,包含信任域和工作负载标识。
服务网格中,数据面在通信方面同样基于工作负载的身份信息进行认证,授权和遥测数据的采集。
在Istio零信任网络安全中,数据面工作负载间使用X509证书进行身份认证,支持多种协议,不止HTTP
二、Citadel的基本架构
Istio支持通过SDS接口以订阅的方式从SDS服务器中获取工作负载证书,并在获取证书后直接在内存中加载,不会在磁盘中保存,也不需要Envoy热重启进行证书重新加载。
工作证书签发流程
1.Envoy预热阶段,根据TLS配置,向上游发起SDS请求,获取TLS证书
2.Pilot-agent处理SDS请求,会根据SDS请求继续向Citadel发送证书签发请求CSR,同时会做证书轮转。
3.Citadel 认证CSR请求,并且负责颁发证书。
三、Citadel核心原理
Citadel作为CA:使用管理员提供的根证书或者中间CA证书,为工作负载签发证书。如果没有提供中间CA证书,CA服务器默认自签的证书。生产环境下,不建议自签证书,最好使用安全性更好的根证书。
Citadel是一种RA:自己没有签发证书能力,通过Kubernetes创建证书签发请求,由Kubernetes或者外部CA机构负责证书的签发。也就是通过Kubernetes CSR API间接使用外部证书管理系统。
四、证书轮转器
由一个轮转器rotator和一个Secret控制器组成,轮转器也就是一个单独的go协程,用于周期性检查根证书。Secret控制器是一个操作Kubernetes的Secret的实体对象,由轮转器调用。