получить против списка в Куберне RBAC - PullRequest
0 голосов
/ 30 сентября 2019

В чем разница между глаголами get и list RBAC?

Все, что я мог найти в документации, это: «получить (для отдельных ресурсов), список (для коллекций, включая полное содержимое объекта)», которых, как мне кажется, крайне не хватает. Является ли list надмножеством get, что означает, что если у вас есть разрешения list, вы можете получить всю информацию из get и более? Пока мы на этом, а как насчет watch? Предоставляет ли он только разрешения на чтение потока изменений, но не полный объект?

Ответы [ 2 ]

3 голосов
/ 30 сентября 2019

На практике вы можете получить всю информацию, которую вы обычно получаете из get звонков, через list звонки. Однако наличие разрешения на list ресурс не означает, что get вызовы будут работать. Вам все еще нужно использовать list вызовы и извлекать информацию таким образом.

watch - это специальный глагол, который дает вам разрешение на просмотр обновлений ресурсов в режиме реального времени. Наличие watch доступа без list или get не очень полезно, поскольку вы не сможете просматривать ресурс после его обновления. Через kubectl я не смог наблюдать за ресурсом, не имея доступа к этому ресурсу * 1013. *

Чтобы поиграть с этими ролями, я бы рекомендовал возиться с ролями в кластере Kubernetes на Katacoda .

Первоначальная настройка для создания ролей и предоставления их (поддельным) пользователям:

kubectl create role deployment-getter --verb=get --resource=deployment
kubectl create role deployment-lister --verb=list --resource=deployment
kubectl create role deployment-watcher --verb=watch --resource=deployment

kubectl create rolebinding only-get --role=deployment-getter --user=only-get
kubectl create rolebinding only-list --role=deployment-lister--user=only-list
kubectl create rolebinding only-watch --role=deployment-watcher--user=only-list

kubectl run nginx --image=nginx # Make a resource to look at

Затем вы можете запускать kubectl команды как одну изспециальные пользователи , чтобы посмотреть, как выглядят ограниченные разрешения RBAC.

Например, следующие команды показывают, что мы можем перечислять ресурсы только с глаголом list.

kubectl get deployment --as list-only # Prints out nginx deployment
kubectl get deployment --as get-only # RBAC error
kubectl get deployment --as watch-only # RBAC error

И этот пример показывает, что мы можем получать ресурсы только с помощью глагола get (но вы также можете получить аналогичную информацию, перечислив ресурсы).

kubectl get deployment nginx --as get-only -o yaml
# apiVersion: extensions/v1beta1
# kind: Deployment
# ...
kubectl get deployment nginx --as list-only -o yaml # RBAC error
kubectl get deployment --as list-only -o yaml
# apiVersion: v1
# kind: List
# items:
# - apiVersion: extensions/v1beta1
#   kind: Deployment
#   ...
2 голосов
/ 30 сентября 2019

Глаголы get, list и watch RBAC предоставляют разрешения для различных операций API Kubernetes.

Вы можете увидеть соответствующие операции API для каждого объекта в справочнике Kubernetes API. , например, здесь для развертывания .

Вот несколько примеров:

get

Если у вас есть разрешения get для ресурса Deployment, вы можете выполнить следующий запрос API:

GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}

Возвращает манифест определенного развертывания.

list

Если у вас есть разрешение list, вам разрешено выполнять следующие запросы API:

GET /apis/apps/v1/namespaces/{namespace}/deployments
GET /apis/apps/v1/deployments

Они оба возвращают список манифестов развертываний. Первый из всех развертываний в определенном пространстве имен, а второй из всех развертываний во всех пространствах имен.

watch

Если у вас есть разрешение watchвам разрешено выполнять эти запросы API:

GET /apis/apps/v1/deployments?watch=true
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments?watch=true
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments/{name}  [DEPRECATED]
GET /apis/apps/v1/watch/namespaces/{namespace}/deployments  [DEPRECATED]
GET /apis/apps/v1/watch/deployments  [DEPRECATED]

Они открывают потоковое соединение, которое возвращает вам полный манифест развертывания при каждом его изменении (или при создании нового).

Обратите внимание, что последние три конечных точки API устарели, и вы должны использовать конечные точки для операции list с параметром watch=true. Тем не менее, это все равно запускает операцию watch API, а не list.

Примечание 1

Команды, такие как kubectl get, kubectl list и т. Д. Простовыполняет эти запросы API под капотом. Для экспериментов вы можете выполнить эти запросы API напрямую.

Например, сначала выполните:

kubectl proxy

А затем:

curl localhost:8001/apis/apps/v1/deployments?watch=true

Или вы также можете использоватьэто (не требует kubectl proxy):

kubectl get --raw="/apis/apps/v1/deployments?watch=true"

Примечание 2

В общем, разрешение не подразумевает друг друга. Например, если у вас есть права доступа list, это не значит, что вы можете делать get или watch запросов, а если у вас есть права доступа watch, это не значит, что вы можете get или list запросов.

Примечание 3

Если у вас есть только watch разрешения (но не get и list), вы не можете смотреть сkubectl (kubectl get deployment -w), поскольку kubectl делает запрос get и list соответственно перед запросом watch (для получения версий ресурсов отслеживаемых ресурсов).

Дополнительные примеры в этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...