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 :
uname -a
): 3.10.0-327.36.3.el7.x86_64Was 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):
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 .
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 .