Роль Kubernetes должна предоставлять доступ ко всем ресурсам, но она игнорирует некоторые ресурсы

#kubernetes #kubectl

#kubernetes #kubectl

Вопрос:

Роль namespace-limited должна иметь полный доступ ко всем ресурсам (из указанных групп API) внутри пространства имен. Мой манифест роли выглядит следующим образом:

 kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-limited
  namespace: restricted-xample
rules:
- apiGroups:
  - core
  - apps
  - batch
  - networking.k8s.io
  resources: ["*"] # asterisk to grant access to all resources of the specified api groups
  verbs: ["*"]
  

Я связал роль с ServiceAccount, используя привязку ролей, но, к сожалению, этот ServiceAccount не имеет доступа к Pod , Service , Secret , ConfigMap и Endpoint ресурсам. Все эти ресурсы являются частью core группы API. Однако все другие распространенные рабочие нагрузки работают. Почему это?

Ответ №1:

Основная группа, также называемая устаревшей группой, находится на пути REST /api/v1 и использует apiVersion: v1

Вам нужно использовать "" для основной группы API.

 apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: restricted-xample
  name: namespace-limited
rules:
- apiGroups: ["", "apps", "batch", "networking.k8s.io"] # "" indicates the core API group
  resources: ["*"]
  verbs: ["*"]
  

Чтобы проверить разрешение учетной записи службы, используйте следующие команды

 kubectl auth can-i get pods --as=system:serviceaccount:restricted-xample:default -n restricted-xample 
kubectl auth can-i get secrets --as=system:serviceaccount:restricted-xample:default -n restricted-xample 
kubectl auth can-i get configmaps --as=system:serviceaccount:restricted-xample:default -n restricted-xample
kubectl auth can-i get endpoints --as=system:serviceaccount:restricted-xample:default -n restricted-xample 
  

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

1. О да, я тоже только что понял это, но почему это не работает, если я явно указываю основную группу?

2. Потому что это устаревший и первый API, и код по-прежнему следует за ним, чтобы не нарушать API

Ответ №2:

Просто выяснил, что это работает, когда я опускаю ключевое слово core, как в этом примере. Работает следующий манифест роли:

 kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-limited
  namespace: restricted-xample
rules:
- apiGroups: ["", "apps", "batch", "networking.k8s.io"]
  resources: ["*"]
  verbs: ["*"]
  

Но почему это не работает, если я указываю core группу API, для меня загадка.