Получение Service Account Token
Service Account Token — один из способов авторизации в Kubernetes API, альтернатива Static Token File и клиентским сертификатам.
Для получения токена необходимо создать сервис-аккаунт (ServiceAccount) и связать его с кластерной ролью. Каждый созданный сервис-аккаунт будет иметь токен, хранящийся в Kubernetes API-секрете.
Чтобы получить Service Account Token:
Создайте ServiceAccount:
kubectl -n kube-system create serviceaccount <service-account-name>
Создайте ClusterRoleBinding и добавьте роль с правами администратора (cluster-admin):
kubectl create clusterrolebinding <clusterrolebinding-name> --clusterrole=cluster-admin --serviceaccount=kube-system:<service-account-name>
Получите имя секрета созданного ServiceAccount, в котором хранится токен:
export TOKENNAME=$(kubectl -n kube-system get serviceaccount/<service-account-name> -o jsonpath='{.secrets[0].name}')
Получите токен из секрета в base64, декодируйте и добавьте в переменную окружения
TOKEN
:export TOKEN=$(kubectl -n kube-system get secret $TOKENNAME -o jsonpath='{.data.token}' | base64 --decode)
Проверьте работоспособность токена, сделайте запрос в Kubernetes API с токеном в заголовке
"Authorization: Bearer <TOKEN-HERE>"
:curl -k -H "Authorization: Bearer $TOKEN" -X GET "https://<KUBE-API-IP>:6443/api/v1/nodes" | json_pp
Добавьте сервис-аккаунт в kubeconfig:
kubectl config set-credentials <service-account-name> --token=$TOKEN
Переключите контекст:
kubectl config set-context --current --user=<service-account-name>
Проверьте работоспособность:
kubectl get no NAME STATUS ROLES AGE VERSION test-psp-node-tv9rb Ready <none> 33d v1.16.9
Обновленный kubeconfig будет находиться в домашней директории $HOME/.kube/config