Как создать роль для ServiceAccount с контекстом - PullRequest
0 голосов
/ 01 июля 2018

Я хочу создать роль для учетной записи службы с контекстом.
Моя цель - иметь возможность запускать kubectl get pods в контексте учетной записи службы.

Для этого мне нужно:

  1. Создать сервисный аккаунт
  2. Создать роль
  3. Создать роль связывания
  4. Создать контекст

Я создал учетную запись службы:

kubectl create serviceaccount myservice

Role.yaml:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata: 
  namespace: development
  name: my-role
rules: 
- apiGroups: ["", "extensions", "apps"]
  resources: ["pods"]
  verbs: ["get"] 

BindRole.yaml:

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata: 
  name: my-role-binding
  namespace: development
subjects: 
- kind: ServiceAccount 
  name: myservice
  namespace: development
  apiGroup: ""
roleRef: 
  kind: Role
  name: my-role
  apiGroup: ""

Я хочу иметь возможность запускать kubectl get pods в контексте учетной записи службы myservice.

Для создания контекста мне нужно что-то вроде этого:

kubectl config set-context myservice-context --cluster=kubernetes --user=???

Но я не могу использовать --user для служебной учетной записи.
Так как я могу это сделать?

Я думал использовать kubectl config set-credentials, но он просто создает пользователя, и у меня уже есть учетная запись службы.

EDIT:
Вот моя попытка создать пользователя с токеном учетной записи службы, а затем использовать его с kubectl --context=myservice-context get pods, но это не удалось:
enter image description here

1 Ответ

0 голосов
/ 02 июля 2018

Похоже, что кластер отсутствует в вашем файле ~/.kube/config. Если бы это была проблема с разрешениями, я бы ожидал увидеть либо error: You must be logged in to the server (Unauthorized), либо Error from server (Forbidden).

Ошибка, которую вы видите The connection to the server localhost:8080 was refused - did you specify the right host or port?, означает, что нет кластера с именем, которое вы указали в kubeconfig.

Я бы проверил, что ваш kubeconfig включает имя кластера kubernetes с certificate-authority-data и соответствующим server.

Например, здесь я пытаюсь использовать несуществующую учетную запись службы сначала с недопустимым кластером, а затем снова с кластером, который существует в моем kubeconfig.

Неверное имя кластера:

kubectl config set-context service-context \
--cluster=doesnotexist \
> --namespace=default \
> --user=service-account
Context "service-context" modified.
➜  ~ kubectl --context=service-context get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?

Хорошее имя кластера:

kubectl config set-context service-context \
--cluster=exists \
--namespace=default \
--user=service-account
Context "service-context" modified.
➜  ~ kubectl --context=service-context get pods
error: You must be logged in to the server (Unauthorized)

Следующая ошибка может указывать на то, что с вашим пользователем / разрешениями что-то не так. Первый предполагает, что cluster не существует в вашем kubeconfig.

EDIT:

Также помните, когда вы используете sudo его использование /root/.kube/config, которое может быть не тем, что вы хотите

...