7.1.3 Istio证书和密钥轮换机制

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)上述证书签名请求过程会定期重复以进行证书和密钥轮换。