如何使用Rest API访问Kubernetes中的名称空间?

时间:2019-05-22 06:06:08

标签: kubernetes kubernetes-apiserver

我无法使用rest api获取名称空间列表,并且剩余终点为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,仍然出现与身份验证相关的错误。 请帮忙。

2 个答案:

答案 0 :(得分:1)

您应该使用clusterrolebinding而不是rolebinding

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

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

rolebinding-and-clusterrolebinding处有更多详细信息:

  

权限可以在带有RoleBinding的名称空间中授予,也可以在带有ClusterRoleBinding的群集范围内授予

答案 1 :(得分:0)

因此问题不是使用 rolebinding ,而是需要使用 clusterrolebinding 检查

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

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

角色绑定范围最多为命名空间,并且 集群绑定范围是整个集群

要使用api / v1 /命名空间,我们需要使用 clusterrolebinding