【问题标题】:Using kubectl with Kubernetes authorization mode ABAC将 kubectl 与 Kubernetes 授权模式 ABAC 一起使用
【发布时间】:2016-02-20 19:14:02
【问题描述】:

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

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

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

kubectl 获取 pod --token=xxx --namespace=projectgino --server=https://xxx.xxx.xxx.xx:6443

我收到以下错误

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

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

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

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

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    ABAC authorizer 中缺少此功能。修复正在进行中:#16148

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

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

    所以你也许可以通过定义一个策略来解决:

    {"user":"bob", "readonly": true, "resource": ""}

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

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2018-10-02
      • 2018-11-01
      相关资源
      最近更新 更多