Приветствую, товарищи-тинкеры!
В чем моя проблема?
В двух словах, пользователь toto не может "получить" cronjob хотя разрешения кажутся нормальными. Точнее:
$> kubectl get cronjob/test -n my_namespace
Error from server (Forbidden): cronjobs.batch "test" is forbidden: User "toto" cannot get resource "cronjobs" in API group "batch" in the namespace "my_namespace"
$> kubectl auth can-i get cronjob/test -n my_namespace
no
даже жестко:
$> kubectl auth can-i get cronjobs -n my_namespace
yes
$> kubectl auth can-i --list -n my_namespace
Resources Non-Resource URLs Resource Names Verbs
...
cronjobs.batch [] [] [get list watch list watch get]
...
$> kubectl get cronjobs -n my_namespace
NAME SCHEDULE ... AGE
test */5 * * * * 2d21h
Обратите также внимание, что команда отлично работает, когда выполняется пользователем уровня администратора (из системы группы: мастера), или если Я добавляю toto в систему групп: master.
Что я пробовал?
Я добавил полные разрешения для всех ресурсов во всех пространствах имен , к группе toto принадлежит (назовем это my_group ). Тот факт, что он не работал даже тогда, заставляет меня думать, что моя проблема может быть вызвана не разрешениями, а другим механизмом k8s.
Дополнительная информация
По запросу Вот некоторые дополнительные сведения:
$> kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T23:41:55Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.9-eks-c0eccc", GitCommit:"c0eccca51d7500bb03b2f163dd8d534ffeb2f7a2", GitTreeState:"clean", BuildDate:"2019-12-22T23:14:11Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}
Кластер размещен на AWS с использованием службы EKS, поэтому:
- контексты позволяют пользователям динамически проходить проверку подлинности с использованием двоичного файла
aws-iam-authenticator
- , как упоминает EKS c, мы добавляем пользователей в группы в
aws-auth
ConfigMap - , затем мы определяем некоторые кластерные кластеры + ролевые привязки, предназначенные для этих вышеупомянутых групп.
Что для этих двух последних точек, переводится в следующие файлы yaml:
---
apiVersion: v1
kind: ConfigMap
metadata:
name: aws-auth
namespace: kube-system
data:
...
mapUsers: |
...
- userarn: arn:aws:iam::xxxxxxxxxxxx:user/toto
username: toto
groups:
- system:basic-user
- my_group
...
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: my_role
rules:
...
- apiGroups: ["batch"]
resources: ["cronjobs"]
resourceNames: [""]
verbs: ["list", "watch", "get"]
...
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: my_rolebinding
namespace: my_namespace
subjects:
- kind: Group
name: my_group
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: my_role
apiGroup: rbac.authorization.k8s.io