2016-04-28 52 views

回答

3

据我所知,没有办法通过CRL直接吊销证书。但是,什么工作,以及我们目前使用的是ABAC policies以识别用户(通过证书的公用名设置)以及他们是否有权访问Kubernetes上的给定资源。

举个例子,假设你有一个叫做“random”的用户。您将从您指定的证书颁发机构为其生成一份客户证书,并使用通用名称“随机”。

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

希望未来一个简单的“kube-apiserver重新加载”将允许重新读取该ABAC策略文件。

最后要注意的一点是:当使用客户端证书进行ABAC认证时,您需要为用户INDIVIDUALLY设置权限。与使用ABAC的授权令牌不同,您不能在“组”中设置客户端证书用户。一些令我们头痛的事情,所以认为值得传递。 :)

希望这有助于!

+0

感谢您的解答,解释和建议。目前,我的k8s集群中有4组密钥和crts,分别是'apiserver','other master component','minions',最后一个是'kubectl'。起初,我想知道一种方法来解决像其中一个人丢失的问题。现在看来,ABAC政策是最好的选择。一个愚蠢的问题,哪种烫发适合于只能制造豆荚的kubectl? – Yang

+1

@Yang在这种情况下丢失证书肯定是不幸的,但不幸的是,我认为答案仍然是从ABAC中删除该用户,并创建一个新用户。例如,如果“随机”丢失了他们的证书,则可能必须为该用户创建一个具有新证书的“random2”用户。我知道社区一直在讨论将CRL支持添加到更高版本的Kubernetes,但是现在撤消证书是不可能的。一个可能的解决办法可能是在Kube API前面检查HAProxy/NGINX以检查撤销的证书。 –

+1

感谢这么多详细的暗示,我非常感谢,特别是HAProxy/NGINX的想法,它使我转向了XD – Yang