Istio在Kubernetes上提供了如下证书和密钥运行方案:
1)Citadel监视Kubernetes apiserver,为每个现有和新的服务账户创建SPIFFE证书和密钥对。Citadel将证书和密钥对存储为Kubernetes secret。
2)创建pod时,Kubernetes会根据其服务账户通过Kubernetes secret volume将证书和密钥对挂载到pod。
3)Citadel监视每个证书的生命周期,并通过重写Kubernetes secret自动轮换证书。
4)Pilot生成安全命名信息,该信息定义了服务账号与其可以运行服务类型之间的对应关系。然后Pilot将安全命名信息传递给Sidecar代理。
此外,Istio还提供了使用节点代理方式进行证书和密钥的配置管理,具体来说包括如下步骤:
1)Citadel创建了一个gRPC服务接收证书签名请求CSR。
2)Envoy代理通过Envoy密钥发现服务(SDS)API发送了证书和密钥请求。
3)收到SDS API请求后,在将带有凭据的证书签名请求CSR发送到Citadel进行签名之前,节点代理会创建私钥和证书签名请求CSR。
4)Citadel验证证书签名请求CSR中携带的凭证,并签署CSR以生成证书。
5)节点代理通过Envoy SDS API将从Citadel接收的证书和私钥发送给Envoy。
6)上述证书签名请求CSR过程会定期重复以进行证书和密钥轮换。
类似地,Istio在本地计算机节点上提供了如下证书和密钥运行方案:
1)Citadel创建一个gRPC服务来接收证书签名请求。
2)节点代理生成私钥和证书签名请求,并将CSR及其凭据发送给Citadel进行签名。
3)Citadel验证证书签名请求携带的凭证,并签署CSR以生成证书。
4)节点代理将从Citadel接收的证书和私钥发送给Envoy。
5)上述证书签名请求过程会定期重复以进行证书和密钥轮换。