Is there a way to create a token for a normal user in Kubernetes?

Refresh

November 2018

Views

1.3k time

1

Question

There is a way to create a service account and get token as in How to Add Users to Kubernetes (kubectl)? but is there a way to get or create a token for a normal user?

Background

Followed Configure RBAC In Your Kubernetes Cluster and created a normal user.

Bind a cluster role to the user as below (not sure this is correct, appreciate suggestions). I would like to create a token for the user and use it to access the dashboard but do not know how to do.

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: kube-system
  name: dashboard-admin-role
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: dashboard-admin-rolebinding
  namespace: office
subjects:
- kind: User
  name: myuser
  apiGroup: "rbac.authorization.k8s.io"
roleRef:
  kind: ClusterRole
  name: dashboard-admin-role
  apiGroup: "rbac.authorization.k8s.io"
mon

1 answers

5

Запросы API связаны либо обычного пользователя или учетной записи службы, или рассматриваются как анонимных запросов .

  • Обычные пользователи, как предполагается, управляются извне, независимая службой (частные ключей, третьи лица, как учетные записи Google, даже файл со списком имен пользователей и паролей). Kubernetes не имеет объектов, которые представляют собой обычные учетные записи пользователей.
  • Учетные записи служб являются пользователями , управляемого API Kubernetes, связанными с конкретными пространствами имен. Учетные записи служб связаны с набором учетных данных , хранящихся в тайне. Обслуживание счета на предъявитель лексема вполне допустима использовать вне кластера и может быть использована для создания идентичности для длительных постоянных рабочих мест , которые хотели бы поговорить с API Kubernetes. Чтобы вручную создать учетную запись службы, просто используйте kubectl create serviceaccount ACCOUNT_NAMEкоманду. Это создает учетную запись службы в текущем пространстве имен и связанный с секретом , который держит общедоступный центр сертификации сервера API и подписанная JSON Web Токен (JWT).

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

Нечто подобное этому примеру

$ kubectl create serviceaccount jenkins
serviceaccount "jenkins" created
$ kubectl get serviceaccounts jenkins -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  # ...
secrets:
- name: jenkins-token-1yvwg

А затем принести маркер

$ kubectl get secret jenkins-token-1yvwg -o yaml
apiVersion: v1
data:
  ca.crt: (APISERVER'S CA BASE64 ENCODED)
  namespace: ZGVmYXVsdA==
  token: (BEARER TOKEN BASE64 ENCODED)
kind: Secret
metadata:
  # ...
type: kubernetes.io/service-account-token