kubernetes pods запрещен: пользователь "user1" не может перечислить pods в пространстве имен "stage" - PullRequest
0 голосов
/ 06 февраля 2019

при тестировании доступа на основе ролей в контейнерном сервисе Alibaba он выдает мне сообщение об ошибке "pods запрещено: пользователь" user1 "не может вывести список модулей в пространстве имен" stage "" это проблема RBAC,что я не могу понять, где я ошибаюсь

Определение RoleBinding

root@kube-master:# kubectl describe rolebinding stage-role-binding  -n stage
Name:         stage-role-binding
Labels:       <none>
Annotations:  <none>
Role:
  Kind:  Role
  Name:  staging
Subjects:
  Kind  Name   Namespace
  ----  ----   ---------
  User  user2  

Определение роли

root@kube-master:# kubectl describe role -n stage
Name:         staging
Labels:       <none>
Annotations:  <none>
PolicyRule:
  Resources               Non-Resource URLs  Resource Names  Verbs
  ---------               -----------------  --------------  -----
  deployments             []                 []              [get list watch create update patch delete]
  pods                    []                 []              [get list watch create update patch delete]
  replicasets             []                 []              [get list watch create update patch delete]
  deployments.apps        []                 []              [get list watch create update patch delete]
  pods.apps               []                 []              [get list watch create update patch delete]
  replicasets.apps        []                 []              [get list watch create update patch delete]
  deployments.extensions  []                 []              [get list watch create update patch delete]
  pods.extensions         []                 []              [get list watch create update patch delete]
  replicasets.extensions  []                 []              [get list watch create update patch delete]

Один модуль хорошо работает в пространстве имен этапа

root@kube-master:# kubectl get pods -n stage 
NAME      READY     STATUS    RESTARTS   AGE
busybox   1/1       Running   0          10m

Определение контекста

root@kube-master:# kubectl config set-context stage --cluster=kubernetes --namespace=stage --user=user2
Context "stage" modified.

Тестирование RBAC

root@kube-master:/home/ansible# kubectl --context=stage get pods
No resources found.
Error from server (Forbidden): pods is forbidden: User "user1" cannot list pods in the namespace "stage"

Не уверен, откуда user1

и выдает ошибку RBAC

Существует только context установлено для user2

root@kube-master:# kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   
          stage                         kubernetes   user2              stage

Так я создал пользователя

openssl genrsa -out user2.key 2048
openssl req -new -key user2.key -out user2.csr -subj "/CN=user1/O=8gwifi.org"
openssl x509 -req -in user2.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out user2.crt -days 500

kubectl config set-credentials user2 --client-certificate=user2.crt --client-key=user2.key
kubectl config set-context stage --cluster=kubernetes --namespace=stage --user=user2

1 Ответ

0 голосов
/ 06 февраля 2019

RoleBinding предназначен для пользователя user2 , а не для user1 .Вот почему вы получаете ошибку RBAC.

Установка контекста для пользователя user2 не означает, что kubernetes идентифицирует этого пользователя как user2 .Это зависит от того, какие учетные данные вы используете.Если использованные учетные данные принадлежат пользователю user-x , то kubernetes будет обрабатывать его как user-x .Пользователь context предназначен для kubectl, чтобы найти информацию о полномочиях пользователя.Чтобы понять аутентификацию kubernetes, см. здесь .

Учетные данные, которые вы там использовали, разрешены для пользователя user1 .Поэтому вы должны обновить RoleBinding до user1 .

После обновленного вопроса

Для аутентификации сертификата CN будетимя пользователя (ref: здесь ).В вашем сертификате "/CN=user1/O=8gwifi.org", поэтому имя пользователя будет user1 , а не user2 .

...