ServiceAccount в GKE не проходит аутентификацию - PullRequest
0 голосов
/ 03 октября 2018

Мне нужно создать учетные записи ServiceAccounts, которые могут получить доступ к кластеру GKE.Внутренне я делаю это с помощью следующих команд:

kubectl create serviceaccount onboarding --namespace kube-system
kubectl apply -f onboarding.clusterrole.yaml
kubectl create clusterrolebinding onboarding --clusterrole=onboarding --serviceaccount=kube-system:onboarding

Где содержимое файла onboarding.clusterrole.yaml выглядит примерно так:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: onboarding
rules:
- apiGroups:
  - '*'
  resources:
  - 'namespace,role,rolebinding,resourcequota'
  verbs:
  - '*'

Ресурс ServiceAccount создается, как ожидается, иClusterRole и ClusterRoleBinding также выглядят правильно, но когда я пытаюсь получить доступ к API с помощью этой новой роли, я получаю ошибку аутентификации.

curl -k -X GET -H "Authorization: Bearer [REDACTED]" https://36.195.83.167/api/v1/namespaces
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "namespaces is forbidden: User \"system:serviceaccount:kube-system:onboarding\" cannot list namespaces at the cluster scope: Unknown user \"system:serviceaccount:kube-system:onboarding\"",
  "reason": "Forbidden",
  "details": {
    "kind": "namespaces"
  },
  "code": 403

В ответе предлагается неизвестный пользователь, но я подтвердил, что ServiceAccount существует ив Темах ClusterRoleBinding.Можно ли таким образом определить ServiceAccount для GKE?

Я успешно использую точный процесс на кластерах kubernetes, которые мы запускаем в наших центрах обработки данных.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

GKE должен иметь такой же процесс.Ваша версия kubectl совпадает с версией кластера GKE?Не уверен, что это проблема, но для ClusterRole нужны множественные числа ресурсов, а ресурсы представлены в виде списков:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: onboarding
rules:
- apiGroups:
  - '*'
  resources:
  - namespaces
  - roles
  - rolebindings
  - resourcequotas
  verbs:
  - '*'

Работает для меня на K8s 1.11.x:

curl -k -X GET -H "Authorization: Bearer [REDACTED]" https://127.0.0.1:6443/api/v1/namespaces
{
  "kind": "NamespaceList",
  "apiVersion": "v1",
  "metadata": {
    "selfLink": "/api/v1/namespaces",
    "resourceVersion": "12345678"
  },
  ...
0 голосов
/ 04 октября 2018

Я вижу, что вы создаете учетную запись службы, роль и привязку роли, чтобы иметь доступ API к вашему кластеру kubernetes, единственное «но» - это то, что ресурсы не настроены должным образом.проверьте этот документ о том, как настроить роли rbac, ресурсы-глаголы, а также их определения и примеры.

0 голосов
/ 03 октября 2018

Можете ли вы показать вывод kubectl get clusterrolebinding onboarding -o yaml?

Это может быть несовпадение версий, поскольку вы создали rbac.authorization.k8s.io/v1beta1 ClusterRole, а kubectl create clusterrole создаст rbac.authorization.k8s.io/v1 ClusterRoleBinding.

Вам следует обновить ClusterRole до версии rbac.authorization.k8s.io/v1.

...