使用kubectl和Kubernetes授权模式ABAC

时间:2015-11-18 21:10:24

标签: kubernetes

我在Ubuntu上发送了一个运行Kubernetes的4节点集群(1个主3个工作者)。我打开--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命令行代码,问题似乎是由pkg / client / helper.go中的kubectl调用函数NegotiateVersion引起的。这会调用服务器上的/ api来获取Kubernetes的版本。此调用失败,因为其余路径不包含名称空间projectgino。我将跟踪代码添加到pkg / auth / authorizer / abac / abac.go,并且在命名空间检查时失败。

我还没有提升最新的1.1版Kubernetes,但是看看代码我没看到这个领域发生了什么变化。

有人知道如何配置Kubernetes以解决问题吗?

1 个答案:

答案 0 :(得分:1)

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

至于解决方法,来自the authorization doc

  

对于其他端点,例如     / version,资源是空字符串。

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

  

{"用户":" bob"," readonly":true,"资源":"" }

(请注意资源的空字符串)以授予对未版本化端点的访问权限。如果这不起作用,我认为没有一个干净的解决方法可以让你使用kubectl和--authorization-mode = ABAC。