如何撤销 Kubernetes 集群中的签名证书?

How to revoke signed certificate in Kubernetes cluster?

kube-apiserver 似乎没有提供使用证书撤销列表 (CRL) 的选项。

如果客户证书丢失或不再使用,有没有办法撤销它?

据我所知,没有办法通过 CRL 直接撤销证书。然而,我们目前正在使用的有效方法是 ABAC policies 来识别用户(通过证书的通用名称设置),以及他们是否有权访问在 Kubernetes 上给定资源。

例如,假设您有一个名为 "random" 的用户。您将从给定的证书颁发机构为他们生成一个客户端证书,其通用名称为 "random".

从那里,您可以获得一个 ABAC 策略文件(一个 csv 文件,每行有点 JSON),为用户 "random" 设置权限,这将为他们提供特定的权限对 Kubernetes API 的访问级别。您可以让他们访问所有内容或某些命名空间或其他 API 参数。如果您需要撤销权限,只需从 ABAC 策略文件中删除该用户即可。我们已经对此进行了测试,并且效果很好。不幸的是,我要说的是,您 必须重新启动 Kubernetes API 服务才能使这些更改生效,因此此更改可能会有几秒钟的停机时间发生。显然在开发环境中这不是什么大问题,但在生产环境中您可能需要安排添加用户的时间。

希望将来一个简单的 "kube-apiserver reload" 将允许重新读取该 ABAC 策略文件。

最后一件事要注意:当使用客户端证书进行 ABAC 身份验证时,您需要单独为用户设置权限。与带有 ABAC 的身份验证令牌不同,您不能在 "groups." 中设置客户端证书用户 这让我们很头疼,所以认为它值得传递。 :)

希望对您有所帮助!