Правила RBAC Kubernetes для PersistentVolume - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь создать Роль / правила RBAC для службы, которая нуждается в постоянном томе и по-прежнему завершается с ошибкой запрещено .

Вот мой конфиг роли:

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: ["*"]

А это мой вырубленный PersistentVolume манифест:

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

Когда я пытаюсь применить его, я получаю запрещенную ошибку.

$ 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

В последней строке конкретно указано: resource "persistentvolumes" in API group "" - это то, что я разрешил в правилах !

Я могу создать PV с учетными данными admin из того же файла yaml, и я могу создавать любые другие ресурсы (модули, службы и т. Д.) С разрешениями logdrop . Просто PersistentVolume по какой-то причине не работает. Есть идеи почему?

Я использую Kubernetes 1.15.0.

Обновление:

Это моя роль привязки в соответствии с просьбой:

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

Это не ClusterRoleBinding, так как я намерен предоставить пользователю доступ только к одному пространству имен (logdrop), а не ко всем пространствам имен в кластере.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Я вижу потенциальную проблему здесь.

Постоянные объемы cluster scoped resources.Предполагается, что они будут предоставлены администратором без какого-либо пространства имен.Однако

PersistentVolumeClaims могут создаваться пользователями в определенном пространстве имен, поскольку они namespaced resources.

. Поэтому при использовании учетных данных admin он работает, но с logdrop возвращаетсяошибка.

Пожалуйста, дайте мне знать, если это имеет смысл.

0 голосов
/ 01 июля 2019

Новая роль должна быть предоставлена ​​пользователю или группе пользователей с ролевым связыванием , например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...