Создать пользователя в Kubernetes для kubectl

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

echo -n "lucia" | base64
bHVjaWE=
echo -n "pass" | base64
cGFzcw==

apiVersion: v1
kind: Secret
metadata:
  name: lucia-secret
type: Opaque
data:
  username: bHVjaWE=
  password: cGFzcw==

Или создайте с помощью:

kubectl create secret generic lucia-secret --from-literal=username='lucia',password='pass'

Я не знаю как продолжить

USER_NICK=lucia

kubectl config set-credentials $USER_NICK \
    --username=lucia \
    --password=pass

kubectl get secret lucia-secret -o json | jq -r '.data["ca.crt"]' | base64 -d > ca.crt

endpoint=`kubectl config view -o jsonpath="{.clusters[?(@.name == \"$name\")].cluster.server}"`

kubectl config set-cluster cluster-for-lucia \
  --embed-certs=true \
  --server=$endpoint \
  --certificate-authority=./ca.crt

kubectl config set-context context-lucia \
  --cluster=cluster-for-lucia \
  --user=$USER_NICK \
  --namespace=default

ca.crt имеет значение null

Спасибо за помощь!


person jbelenus    schedule 06.07.2017    source источник


Ответы (3)


В docs и статьях kubernetes используется сертификат для создания или аутентификации пользователей для kubectl. клиент. Однако есть один простой способ сделать это с помощью ServiceAccount. Можно использовать ServiceAccount как группу для обеспечения аутентификации управления RBAC, это очень просто и наглядно. Вот шаги. Все шаги, которые я выполняю, находятся в пространстве имен default. Я собираюсь создать пользователя модуля, доступного только для чтения, который может получать, просматривать и просматривать любой модуль во всех пространствах имен.

  • Создайте ServiceAccount, скажите "только для чтения".

    kubectl create serviceaccount readonlyuser

  • Создайте роль кластера, скажите "только для чтения".

    kubectl create clusterrole readonlyuser --verb=get --verb=list --verb=watch --resource=pods

  • Создайте привязку роли кластера, скажем "только для чтения".

    kubectl create clusterrolebinding readonlyuser --serviceaccount=default:readonlyuser --clusterrole=readonlyuser

  • Теперь получите токен из секрета ServiceAccount, который мы создали ранее. мы будем использовать этот токен для аутентификации пользователя.

    TOKEN=$(kubectl describe secrets "$(kubectl describe serviceaccount readonlyuser | grep -i Tokens | awk '{print $2}')" | grep token: | awk '{print $2}')

  • Теперь установите учетные данные для пользователя в файле конфигурации kube. Я использую "викаш" в качестве имени пользователя.

    kubectl config set-credentials vikash --token=$TOKEN

  • Теперь создайте контекст, скажем, podreader. Я использую здесь свое имя кластера "кубернеты".

    kubectl config set-context podreader --cluster=kubernetes --user=vikash

  • Наконец, используйте контекст.

    kubectl config use-context podreader

Вот и все. Теперь можно выполнить kubectl get pods --all-namespaces. Также можно проверить доступ, выполнив как указано:

~ : $ kubectl auth can-i get pods --all-namespaces
yes
~ : $ kubectl auth can-i create pods
no
~ : $ kubectl auth can-i delete pods
no
person Vikash Singh    schedule 05.04.2019
comment
Есть ли какая-либо документация для этого подхода? - person knowledge20; 09.04.2021

В этом руководстве вы можете узнать, как настроить пользователя для вашего кластера: https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/#use-case-1-create-user-with-limited-namespace-access

Короче:

  • Создать сертификаты для пользователя
  • Создать запрос на подпись сертификата
  • Подпишите сертификат в центре сертификации кластера
  • Создайте конфигурацию для вашего пользователя
  • Добавить правила RBAC для этого пользователя или его группы

Что касается ca.crt, вам нужно найти его на своем главном хосте.

Отредактировано: в случае GKE проверьте здесь https://cloud.google.com/container-engine/docs/iam-integration

person Javier Salmeron    schedule 06.07.2017
comment
Спасибо за ваш ответ, я знаю эту запись, но проблема в том, что я не могу найти ca.key, я использую GKE с container-vm. Это файл --client-ca-file = XXXX? - person jbelenus; 06.07.2017
comment
Единственное, чего я не могу найти, так это ключ ca. в моем кластере GKE. - person jbelenus; 07.07.2017
comment
В случае GKE, похоже, это работает так: cloud.google.com/ container-engine / docs / iam-integration - person Javier Salmeron; 07.07.2017
comment
@JavierSalmeron Я установил кубернеты на ранчо. не могли бы вы помочь мне найти ca.crt? - person Swapnil Pandey; 18.10.2018

Небольшое позднее обновление того, что сработало для меня.
Мне также нужно было отфильтровать по пространствам имен, чтобы предоставить разработчикам доступ только для чтения к основным ресурсам приложения, но не к узлам, секретам, контроллерам входа, входящим или другим пространствам имен.

Измените и примените следующий YAML:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: sa-reader
  namespace: default

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: reader-cr
rules:
- verbs: ["get", "list", "watch"]
  resources: 
  - namespaces
  - services
  - endpoints
  - pods
  - deployments
  - configmaps
  - jobs
  - cronjobs
  - daemonsets
  - statefulsets
  - replicasets
  - persistentvolumes
  apiGroups: ["","apps","batch"]
- verbs: ["create", "delete"]
  resources: ["pods"]
  apiGroups: [""]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-tuxerrante-pods-rb
  namespace: tuxerrante
subjects:
- kind: ServiceAccount
  name: sa-reader
  namespace: default
roleRef:
  kind: ClusterRole
  name: reader-cr
  apiGroup: rbac.authorization.k8s.io

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-tuxerrante-round-pods-rb
  namespace: tuxerrante-round
subjects:
- kind: ServiceAccount
  name: sa-reader
  namespace: default
roleRef:
  kind: ClusterRole
  name: reader-cr
  apiGroup: rbac.authorization.k8s.io
# THIS WILL APPEND CONFIGURATIONS TO YOUR CURRENT KUBECONFIG
$ TOKEN=$(kubectl describe -n default secrets "$(kubectl describe -n default serviceaccount sa-reader | grep -i Tokens | awk '{print $2}')" | grep token: | awk '{print $2}')
$ kubectl config set-credentials reader-user --token=$TOKEN
$ kubectl config set-context cluster-reader --cluster=cluster-svil --user=reader-user

# I PREFER TO COPY THE PREVIOUS NEW CONFIG IN A NEW FILE AND THEN USE IT
# 
$ export KUBECONFIG=~/.kube/tuxerrante-reader.kubeconfig
$ kubectl config use-context cluster-reader
$ kubectl auth can-i get pods --all-namespaces
$ kubectl auth can-i create pods
$ kubectl auth can-i delete pods
$ kubectl -n tuxerrante get pods
person tuxErrante    schedule 16.04.2021