如何使用 rest api 访问 kubernetes 中的命名空间?

how to access namespaces in kubernetes using rest api?

我无法使用 rest api 获取命名空间列表,rest 端点是 https://<localhost>:8001/api/v1/namespaces

使用this kubernetes document

我正在使用邮递员。我将重复这些步骤:

  1. 创建了一个用户并赋予了集群管理员权限:

kubectl create serviceaccount exampleuser

  1. 为具有集群角色 cluster-admin 的用户创建角色绑定:

kubectl create rolebinding <nameofrolebinding> --clusterrole cluster-admin --serviceaccount default:exampleuser

  1. 检查角色绑定使用:

kubectl describe rolebinding <nameofrolebinding>

  1. 现在使用:

kubectl describe serviceaccount exampleuser kubectl describe secret exampleuser-xxxx-xxxx

我将使用我在此处获得的令牌对邮递员进行身份验证。

GET https://<ipofserver>:port/api/v1/namespace

AUTH 使用不记名令牌。

列出集群中所有命名空间的预期结果。像 kubectl get namespaces。但是得到如下警告。

{
    "kind": "Status",
    "apiVersion": "v1",
    "metadata": {},
    "status": "Failure",
    "message": "namespaces is forbidden: User \"system:serviceaccount:default:exampleuser\" cannot list resource \"namespaces\" in API group \"\" at the cluster scope",
    "reason": "Forbidden",
    "details": {
        "kind": "namespaces"
    },
    "code": 403
}

我已经为用户使用了 "cluster-admin" clusterrole,仍然出现与身份验证相关的错误。 请帮忙

您应该使用 clusterrolebinding 而不是 rolebinding

kubectl create clusterrolebinding <nameofrolebinding> --clusterrole cluster-admin --serviceaccount default:exampleuser

RoleBinding表示对命名空间资源的权限,但namespace不是namespaced资源,您可以通过kubectl api-resouces检查。

更多详情请见 rolebinding-and-clusterrolebinding

Permissions can be granted within a namespace with a RoleBinding, or cluster-wide with a ClusterRoleBinding

所以问题不是使用 rolebinding ,我需要使用 clusterrolebinding 检查下面

kubectl create rolebinding nameofrolebinding --clusterrole cluster-admin --serviceaccount default:exampleuser

kubectl create clusterrolebinding nameofrolebinding --clusterrole cluster-admin --serviceaccount default:exampleuser

rolebinding 作用域最大为 namespace 并且 clusterrolebinding 范围是整个 cluster.

要使用 api/v1/namespaces,我们需要使用 clusterrolebinding