web-dev-qa-db-fra.com

Kubettes RBAC Règles pour persistancevolume

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.

9
KeepLearning

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.

2
OhHiMark

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
0
codemonkey