1

我尝试创建一个具有权限的服务帐户,以获取有关端点 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
}

我做错了什么?

4

1 回答 1

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命名空间名称在哪里。您可以在这里找到类似的问题。

于 2020-07-29T10:42:05.877 回答