Как я могу использовать curl для доступа к API Kubernetes из модуля?



Я использую Kubernetes 1.8.6 на движке Google Kubernetes и имею стручок, работающий Alpine в составе StatefulSet.



Я вошел в свой модуль с помощью kubectl exec -it my-pod-0 -- /bin/sh , а затем в командной строке выполните следующие команды:



$ CA_CERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
$ TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
$ NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
$ curl --cacert $CA_CERT -H "Authorization: Bearer $TOKEN" "https://kubernetes
/api/v1/namespaces/$NAMESPACE/services/"


К сожалению, возвращается запрещенная ошибка 403:



{
"kind": "Status",
"apiVersion": "v1",
"metadata": {

},
"status": "Failure",
"message": "services is forbidden: User "system:serviceaccount:default:default" cannot list services in the namespace "default": Unknown user "system:serviceaccount:default:default"",
"reason": "Forbidden",
"details": {
"kind": "services"
},
"code": 403


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

651   1  

1 ответ:

Вы не делаете ничего плохого. Учетная запись службы этого модуля (указанная в serviceAccountName модуля) просто не имеет никаких разрешений API.

Этой учетной записи службы можно предоставить роль представления следующим образом:

kubectl create rolebinding default-viewer \
  --clusterrole=view \
  --serviceaccount=default:default \
  --namespace=default

См. https://kubernetes.io/docs/admin/authorization/rbac/#service-account-permissions для получения более подробной информации о предоставлении разрешений учетным записям служб.

Comments

    Ничего не найдено.