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