разрешить доступ ко всем ресурсам кластера kubernetes, кроме get-узлов

#kubernetes #kubectl #rbac

#kubernetes #kubectl #rbac

Вопрос:

Команда, у меня есть приведенная ниже кластерная роль в kubernetes, которая разрешает доступ ко всему, но я не хочу ограничивать команды уровня узла и разрешать все остальные.

Что нужно изменить ниже? В принципе, пользователь должен иметь возможность запускать

 kubectl get all --all-namespaces
  

но не информация об узлах НЕ должна отображаться

 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: cluster-admin-test
rules:
  - apiGroups:
      - '*'
    resources:
      - '*'
    verbs:
      - '*'
  - nonResourceURLs:
      - '*'
    verbs:
      - '*'
  

Ответ №1:

Правила являются чисто аддитивными, что означает, что вы не можете ограничивать правила.

Таким образом, вам нужно будет перечислить все доступные ресурсы, кроме «узлов» с соответствующими операциями

Например:

 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: cluster-admin
rules: 
- apiGroups: [""] 
  resources: ["pods","services","namespaces","deployments","jobs"] 
  verbs: ["get", "watch", "list"]
  

Кроме того, настоятельно не рекомендуется менять роль администратора кластера.
Стоит создать новую роль и назначить ей пользователей.

Комментарии:

1. то есть это снова разрешает любой доступ, кроме доступа к операциям на уровне узлов? подобный пользователь не сможет выполнить `kubectl удалить узел`

2. @fmaabd это позволит получить доступ только к тем ресурсам, которые были явно упомянуты в ваших правилах роли кластера, т.Е.[«модули», «службы», «пространства имен», «развертывания», «задания»]