使用kubectl与Kubernetes授权模式ABAC



我在Ubuntu上发送了一个运行Kubernetes的4节点集群(1个master 3个worker)。我打开了--authorization mode=ABAC,并设置了一个策略文件,其中包含如下

{"user":"bob","readonly":true,"namespace":"projectgino"}

我希望用户bob只能查看projectgino中的资源。我在使用kubectl命令行作为用户Bob时遇到问题。当我运行以下命令时

kubectl get-pods--token=xxx--namespace=projectgino--server=https://xxx.xxx.xxx.xx:6443

我得到以下错误

错误:无法从服务器读取版本:服务器不允许访问请求的资源

我跟踪了kubectl命令行代码,问题似乎是由kubectl在pkg/client/helper.go中调用NegotiateVersion函数引起的。这会调用服务器上的/api来获取Kubernetes的版本。此调用失败,因为rest路径不包含命名空间projectgino。我在pkg/auth/authorizer/abac/abac.go中添加了跟踪代码,但它在命名空间检查中失败了。

我还没有升级到Kubernetes的最新1.1.1版本,但查看代码时,我没有发现这方面有任何变化。

有人知道如何配置Kubernetes来解决这个问题吗?

这是ABAC授权程序中缺少的功能。修复程序正在进行中:#16148。

关于变通方法,请参阅授权文档:

对于其他端点,如/版本,则资源为空字符串。

因此,您可以通过定义一个策略来解决问题:

{"用户":"bob","只读":true,"资源":"}

(注意resource的空字符串)以授予对未转换端点的访问权限。如果这不起作用,我认为没有一个干净的解决方法可以让您使用带有--authorization mode=ABAC的kubectl。

最新更新