【问题标题】:Kubernetes pull infomation from endpoints REST APIKubernetes 从端点 REST API 拉取信息
【发布时间】:2020-11-18 22:18:50
【问题描述】:

我尝试创建一个具有权限的服务帐户,以获取有关端点 pod IP 的信息并恢复权限问题。

创建服务帐户并为其授予正确的权限:

$ kubectl create role endpoints-reader --verb=get --verb=list --resource=endpoints
$ kubectl create serviceaccount endpoints-reader-sa
$ kubectl create rolebinding default-endpoints-reader --role=endpoints-reader --serviceaccount=endpoints-reader-sa:endpoints-reader-sa

将此 sa 添加到部署 YAML 文件中:

...
spec:
  serviceAccountName: endpoints-reader-sa
  containers:
  - name: ...

我声明了 pod 并登录到它 (ssh)。现在我想运行一个 REST 调用来提取信息:

$ TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token);
$ curl https://kubernetes.default.svc/api/v1/namespaces/XXX/endpoints --silent --header "Authorization: Bearer $TOKEN" --insecure
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "endpoints is forbidden: User \"system:serviceaccount:XXX:endpoints-reader-sa\" cannot list resource \"endpoints\" in API group \"\" in the namespace \"XXX\"",
  "reason": "Forbidden",
  "details": {
    "kind": "endpoints"
  },
  "code": 403
}

我做错了什么?

【问题讨论】:

    标签: kubernetes kubernetes-rbac


    【解决方案1】:

    好的...找到问题了。

    所以,这一行:

    kubectl create rolebinding default-endpoints-reader --role=endpoints-reader --serviceaccount=endpoints-reader-sa:endpoints-reader-sa
    

    应该改成这样:

    kubectl create rolebinding default-endpoints-reader --role=endpoints-reader --serviceaccount=XXX:endpoints-reader-sa
    

    其中XXX 是命名空间名称。 类似问题可以找here

    【讨论】:

    • 只是为了补充。当您使用Role 时,它围绕一个命名空间。如果您想拥有集群范围内的权限,您可以使用ClusterRole。更多信息here
    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2019-08-03
    相关资源
    最近更新 更多