Глаголы 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
(для получения версий ресурсов отслеживаемых ресурсов).
Дополнительные примеры в этот ответ .