Kubernetes: Persistente RBAC-Volumes funktionieren nicht mit Namespaces

Erstellt am 19. Dez. 2016  ·  3Kommentare  ·  Quelle: kubernetes/kubernetes

FEHLERBERICHT

Kubernetes-Version (verwenden Sie kubectl version ): Client-Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.1", GitCommit:"82450d03cb057bab0950214ef122b67c83fb11df", GitTreeState:"clean" , BuildDate:"2016-12-14T00:57:05Z", GoVersion:"go1.7.4", Compiler:"gc", Plattform:"darwin/amd64"}
Serverversion: version.Info{Major:"1", Minor:"5+", GitVersion:"v1.5.1-3+10e41f22e4421c", GitCommit:"10e41f22e4421c9a14e9e6782c6375c199a07a86", GitTreeState:"clean", BuildDate:"2016-12 -15T10:06:44Z", GoVersion:"go1.7.4", Compiler:"gc", Plattform:"linux/amd64"}

Umgebung :

  • Cloud-Anbieter oder Hardware-Konfiguration : openstack
  • Betriebssystem (zB aus /etc/os-release): centos7
  • Kernel (zB uname -a ): 3.10.0-327.36.3.el7.x86_64

Was ist passiert : Wir haben die RBAC-Authentifizierung aktiviert. Wir haben zwei verschiedene Rollenbindungen:

apiVersion: rbac.authorization.k8s.io/v1alpha1
kind: ClusterRoleBinding
metadata:
  name: cluster-admin-custom
subjects:
- kind: ServiceAccount
  name: default
  namespace: kube-system
- kind: User
  name: kubelet
  namespace: kube-system
- kind: User
  name: clusteradmin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin

und

apiVersion: rbac.authorization.k8s.io/v1alpha1
kind: RoleBinding
metadata:
  name: default-admin
  namespace: default
subjects:
- kind: ServiceAccount
  name: default
- kind: User
  name: defaultadmin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin

Wir haben also zwei verschiedene Benutzer: clusteradmin, die Zugriff auf alles im Kube-Cluster haben, und defaultadmin, der Zugriff auf alle Ressourcen im Standard-Namespace haben sollte. Das Ausführen von PV-Befehlen mit clusteradmin funktioniert einwandfrei, bei Verwendung von defaultadmin im Standard-Namespace gibt es einen Fehler:

kubectl bekomme pv
Fehler vom Server (Forbidden): Der Server erlaubt keinen Zugriff auf die angeforderte Ressource (persistentvolumes abrufen)

Fehler vom Server (Forbidden): Fehler beim Erstellen von "db-pv.yaml": Der Server erlaubt keinen Zugriff auf die angeforderte Ressource (post persistentvolumes)

Was Sie erwartet hatten : defaultadmin sollte Zugriff auf PV-Ressourcen im definierten (in meinem Fall standardmäßigen) Namespace haben, da cluster-admin clusterrole Folgendes sagt:

- apiGroups:
  - '*'
  attributeRestrictions: null
  resources:
  - '*'
  verbs:
  - '*'
- attributeRestrictions: null
  nonResourceURLs:
  - '*'
  verbs:
  - '*'

Das Wichtigste hier sind Ressourcen *, aber es fühlt sich an, als ob PV kein Teil der Wildcard ist.

So reproduzieren Sie es (so minimal und genau wie möglich):

  • RBAC aktivieren
  • Erstellen Sie zwei Benutzer, clusteradmin und defaultadmin
  • Clusterrolebinding und Rolebinding hinzufügen, die bereits in diesem Bug-Ticket erwähnt wurden
  • PV-Befehle im Standard-Namespace mit beiden Benutzern ausführen

Hilfreichster Kommentar

PVs sind Cluster-Scoped-Objekte. Sie existieren nicht in einem Namensraum. Um die Berechtigung zur Verwendung der PV-API mit RBAC zu erhalten, benötigen Sie eine ClusterRole, die im Clusterbereich mit einer ClusterRoleBinding gebunden ist .

Alle 3 Kommentare

Ich habe ein ähnliches Problem, bei dem ich einige Namespaces habe, darunter dev und default . Als "Dev-Benutzer" kann ich eine Reihe von Ressourcen im dev Namespace erstellen, einschließlich einer PVC, aber das Erstellen des PV als "Dev-Benutzer" im dev Namespace führt zum gleichen Ergebnis Fehler wie oben:

Error from server (Forbidden): error when creating "db-pv.yaml": the server does not allow access to the requested resource (post persistentvolumes)

Ich kann das PV als Admin-Benutzer im default Namespace erstellen, und dann ist alles in Ordnung.

PVs sind nicht mit einem Namensraum verbunden

PVs sind Cluster-Scoped-Objekte. Sie existieren nicht in einem Namensraum. Um die Berechtigung zur Verwendung der PV-API mit RBAC zu erhalten, benötigen Sie eine ClusterRole, die im Clusterbereich mit einer ClusterRoleBinding gebunden ist .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen