Получение ошибки 403 при попытке создать поды с использованием специальной учетной записи службы
В кластере k8s я создал следующие объекты.
- Пространство имен (testpsp)
- Custom ServiceAccount (тестовый пользователь)
- Role и RoleBindings через. Файлы манифеста
См. Ниже файлы yaml для ресурсов Role и RoleBinding.
$ cat developer.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
namespace: testpsp
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- create
- apiGroups:
- extensions
- apps
resources:
- deployments
- replicasets
verbs:
- '*'
$ cat developer-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: developer-binding
namespace: testpsp
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: developer
subjects:
- kind: ServiceAccount
name: testuser
Как вы можете видеть в вышеупомянутом файле манифеста роли, я дал разрешение CREATE наPod
ресурс для testuser
Сервисный аккаунт. Но все же я получаю сообщение об ошибке.
ошибка
Ошибка с сервера (Запрещено): ошибка при создании "hello-pod.yaml": модули запрещены: пользователь "testuser" не может создавать ресурсы "pods" в группе API "" в пространстве имен "testpsp"
Вот файл Pod yaml. Я что-нибудь упустил?
$ cat hello-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: hello-pod
namespace: testpsp
spec:
serviceAccountName: testuser
containers:
- name: hello-kubernetes
image: paulbouwer/hello-kubernetes:1.5
ports:
- containerPort: 8080
Вот команда, которую я запускаю для создания модуля.
$ kubectl --as=testuser -n testpsp create -f hello-pod.yaml
1 ответ
При устранении этой проблемы я заметил, что вместо прямого упоминания имени ServiceAccount в флаге "as" в команде kubectl нам нужно использовать следующий формат
system:serviceaccount:<namespace_name>:<serviceaccount_name>
В моем случае это будет выглядеть так - system: serviceaccount: testpsp: testuser
После этого все заработало нормально.