Versión de Kubernetes (use kubectl version
): Versión del cliente: version.Info {Major: "1", Minor: "5", GitVersion: "v1.5.1", GitCommit: "82450d03cb057bab0950214ef122b67c83fb11df", GitTreeState: "clean" , BuildDate: "2016-12-14T00: 57: 05Z", GoVersion: "go1.7.4", Compilador: "gc", Plataforma: "darwin / amd64"}
Versión del servidor: version.Info {Major: "1", Minor: "5+", GitVersion: "v1.5.1-3 + 10e41f22e4421c", GitCommit: "10e41f22e4421c9a14e9e6782c6375c199a07a86", GitTreeState: "clean" 2016-12 -15T10: 06: 44Z ", GoVersion:" go1.7.4 ", Compilador:" gc ", Plataforma:" linux / amd64 "}
Medio ambiente :
uname -a
): 3.10.0-327.36.3.el7.x86_64Qué sucedió : Hemos habilitado la autenticación RBAC. Tenemos dos enlaces de roles diferentes:
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
y
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
Entonces tenemos dos usuarios diferentes: clusteradmin, que tiene acceso a todo en el clúster de kube y defaultadmin, que debería tener acceso a todos los recursos en el espacio de nombres predeterminado. La ejecución de comandos PV con clusteradmin funciona bien, cuando se usa defaultadmin en el espacio de nombres predeterminado, da error:
kubectl obtener pv
Error del servidor (prohibido): el servidor no permite el acceso al recurso solicitado (obtener volúmenes persistentes)
Error del servidor (prohibido): error al crear "db-pv.yaml": el servidor no permite el acceso al recurso solicitado (publicar volúmenes persistentes)
Lo que esperaba que sucediera : defaultadmin debería tener acceso a los recursos PV en el espacio de nombres definido (en mi caso predeterminado), porque cluster-admin clusterrole dice lo siguiente:
- apiGroups:
- '*'
attributeRestrictions: null
resources:
- '*'
verbs:
- '*'
- attributeRestrictions: null
nonResourceURLs:
- '*'
verbs:
- '*'
Lo importante aquí son los recursos *, pero parece que PV no es parte del comodín.
Cómo reproducirlo (de la forma más mínima y precisa posible):
Tengo un problema similar, donde tengo algunos espacios de nombres, incluidos dev
y default
. Como "usuario dev" puedo crear un montón de recursos en el espacio dev
nombres dev
nombres
Error from server (Forbidden): error when creating "db-pv.yaml": the server does not allow access to the requested resource (post persistentvolumes)
Puedo crear el PV como usuario administrador en el espacio default
nombres
Los PV no están conectados a un espacio de nombres
Los PV son objetos con ámbito de clúster. No existen en un espacio de nombres. Para obtener permiso para usar la API de PV con RBAC, necesita un enlace ClusterRole en el alcance del clúster con un ClusterRoleBinding .
Comentario más útil
Los PV son objetos con ámbito de clúster. No existen en un espacio de nombres. Para obtener permiso para usar la API de PV con RBAC, necesita un enlace ClusterRole en el alcance del clúster con un ClusterRoleBinding .