J'essaie de créer RBAC Rôle/Rules Pour un service nécessitant un volume persistant et échoue toujours avec Interdit erreur.
Voici mon rôle config:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: logdrop-user-full-access
namespace: logdrop
rules:
- apiGroups: ["", "extensions", "apps", "autoscaling"]
resources: ["*"]
verbs: ["*"]
- apiGroups: ["batch"]
resources:
- jobs
- cronjobs
verbs: ["*"]
Et ceci est ma coupe persistancevolume Manifeste:
apiVersion: v1
kind: PersistentVolume
metadata:
name: logdrop-pv
namespace: logdrop
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
claimRef:
namespace: logdrop
name: logdrop-pvc
hostPath:
path: /efs/logdrop/logdrop-pv
Quand j'essaie d'appliquer cela, je reçois une erreur interdite.
$ kubectl --kubeconfig ~/logdrop/kubeconfig-logdrop.yml apply -f pv-test.yml
Error from server (Forbidden): error when retrieving current configuration of:
Resource: "/v1, Resource=persistentvolumes", GroupVersionKind: "/v1, Kind=PersistentVolume"
Name: "logdrop-pv", Namespace: ""
Object: &{map["apiVersion":"v1" "kind":"PersistentVolume" "metadata":map["annotations":map["kubectl.kubernetes.io/last-applied-configuration":""] "name":"logdrop-pv"] "spec":map["accessModes":["ReadWriteMany"] "capacity":map["storage":"10Gi"] "claimRef":map["name":"logdrop-pvc" "namespace":"logdrop"] "hostPath":map["path":"/efs/logdrop/logdrop-pv"] "persistentVolumeReclaimPolicy":"Retain"]]}
from server for: "pv-test.yml": persistentvolumes "logdrop-pv" is forbidden: User "system:serviceaccount:logdrop:logdrop-user" cannot get resource "persistentvolumes" in API group "" at the cluster scope
Sur la dernière ligne, il dit spécifiquement resource "persistentvolumes" in API group ""
- C'est ce que j'ai autorisé dans les règles !
Je peux créer le PV avec admin des informations d'identification du même fichier YAML et je peux créer d'autres ressources (pods, services, etc.) avec le LOGDROP Autorisations. Juste le persistancevolume ne fonctionne pas pour une raison quelconque. Une idée pourquoi?
J'utilise Kubettes 1.15.0.
Mettre à jour:
Ceci est mon rôle de liaison à la demande:
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: logdrop-user-view
namespace: logdrop
subjects:
- kind: ServiceAccount
name: logdrop-user
namespace: logdrop
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: logdrop-user-full-access
Ce n'est pas un clusterrolleding car mon intention est de donner à l'utilisateur l'accès uniquement à un espace de noms (logdrop
), pas à tous les espaces de noms sur le cluster.
Je vois un problème potentiel ici.
Les persévérances sont cluster scoped resources
. Ils devraient être provisionnés par l'administrateur sans espace de noms.
Les utilisateurs peuvent toutefois créer des persévérantsVolumeclams dans un espace de noms particulier car ils sont un namespaced resources
.
C'est pourquoi lorsque vous utilisez des informations d'identification admin
ça marche mais avec logdrop
il renvoie une erreur.
S'il vous plaît laissez-moi savoir si cela a du sens.
Le nouveau rôle doit être accordé à un utilisateur ou à un groupe d'utilisateurs, avec un MOTILLINDING , E.G.:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: logdrop-rolebinding
namespace: logdrop
subjects:
- kind: User
name: logdrop-user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: logdrop-user-full-access
apiGroup: rbac.authorization.k8s.io