Kubernetes: как заставить другого человека получить доступ к кластеру Kubernetes с разрешениями редактирования clusterRole? - PullRequest
0 голосов
/ 05 августа 2020

Я сделал так:

  1. Я создал сервисный аккаунт
cat <<EOF | kubectl create -f -
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: myname
...
Я генерирую токен из секрета, созданного в учетной записи службы:

token=$(kubectl get secrets myname-xxxx-xxxx -o jsonpath={.data.token} | base64 --decode)

Я установил учетные данные для serviceAccount myname создал: kubectl config set-credentials myname --token=$token

Я создал контекст kubectl config set-context myname-context --cluster=my-cluster --user=myname

затем я создал коп ie из ~ / .kube / config и удалить записи cluster-admin (разрешая только пользователю myname)

Я привязал пользователя к определенному пространству имен c с правами редактирования clusterRole:

cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata: 
  name: dev-access
  namespace: my-ns
roleRef: 
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: edit
subjects: 
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: myname
EOF
Я отправил отредактированный ~/.kube/config человеку, который хочет получить доступ к кластеру, теперь он может перечислить поды, но не c в них:

Ошибка

(Forbidden): pods "pod-xxxxx-xxxx" is forbidden: User "system:serviceaccount:default:myname" cannot create resource "pods/exec" in API group "" in the namespace "my-ns"

Я хочу сделать это с не главной машины, на которую скопирован мастер ~/.kube/config.

Спасибо

1 Ответ

1 голос
/ 05 августа 2020

Имеющийся у вас RoleBinding привязывает ClusterRole к User, а не ServiceAccount. Ошибка четко показывает ServiceAccount system:serviceaccount:default:myuser Таким образом, RoleBinding должен быть таким, как показано ниже

cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata: 
  name: dev-access
  namespace: my-ns
roleRef: 
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: edit
subjects: 
  - kind: ServiceAccount
    name: myuser
    namespace: default
EOF

Чтобы проверить все разрешения ServiceAccount myuser, используйте команду ниже

kubectl auth can-i --list --as=system:serviceaccount:default:myuser

Чтобы проверить указанные c разрешение pods/exec из ServiceAccount myuser, используйте команду ниже

kubectl auth can-i create pods/exec --as=system:serviceaccount:default:myuser
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...