Kubernetes извлекает информацию из REST API конечных точек

Я пытаюсь создать учетную запись службы с разрешениями для получения информации об 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: ...

Я указал модуль и вошел в него (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
}

Что я делаю не так?

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это имя пространства имен. Похожую проблему вы можете найти здесь.

Другие вопросы по тегам