#kubernetes #updates #rbac #kubernetes-rbac
#kubernetes #Обновления #rbac #kubernetes-rbac
Вопрос:
Я ни за что на свете не могу найти подробную таблицу того, что делают все глаголы Kubernetes RBAC. Единственный ресурс, который, как я вижу, рекомендуют люди, — это этот, который крайне неадекватен.
Итак, я решил это экспериментально.
Большинство из них пока довольно просты, за исключением UPDATE
. Похоже, это не может сделать ничего, что я ожидал бы от него.
Разрешения, которые я дал своему псевдониму: [ GET
, UPDATE
] на [ deployments
] в default
пространстве имен.
Вещи, которые я пробовал:
kubectl set image deployment/hello-node echoserver=digitalocean/flask-helloworld --as user
kubectl edit deploy hello-node --as user
kubectl apply -f hello-node.yaml --as eks-user
Все это завершилось ошибкой: deployments.apps "hello-node" is forbidden: User "user" cannot patch resource "deployments" in API group "apps" in the namespace "default"
Затем я попробовал некоторые команды развертывания, такие как:
k rollout undo deploy hello-node --as user
Но они потерпели неудачу, потому что у меня не было доступа к репликам.
TLDR: В чем смысл update
глагола RBAC в Kubernetes?
Если на то пошло, у кого-нибудь есть более подробный список всех глаголов RBAC?
Ответ №1:
Следуя этому, я перешел к документации Kubernetes REST API, в которой есть длинный список всех вызовов HTTP API, которые вы можете выполнить на сервере REST.
Я подумал, что это поможет, потому что доступна одна (1) таблица, описывающая, что могут делать разные глаголы, путем сравнения их с HTTP-глаголами. Итак, план был:
- Посмотрите, к какому HTTP-глаголу
update
приравнивается разрешение. - Перейдите к ссылке и найдите пример использования этого HTTP-глагола при развертывании.
- Протестируйте
kubectl
эквивалент.
Итак.
Какой HTTP-глагол равен update
разрешению?
PUT
.
Пример использования PUT
для развертывания?
Заменить масштаб: заменить масштаб указанного развертывания
HTTP-запрос
PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale
Какая эквивалентная kubectl
команда?
Ну, мы масштабируем развертывание, поэтому я собираюсь сказать:
kubectl scale deployment hello-node --replicas=2
Могу ли я выполнить эту команду?
Я расширил свои разрешения до deployment/scale
first, а затем запустил его.
Error from server (Forbidden): deployments.apps "hello-node" is forbidden: User "user" cannot patch resource "deployments/scale" in API group "apps" in the namespace "default"
Что ж. Похоже, для этого также требуются patch
разрешения.
Несмотря на то, что используемый HTTP-глагол PUT
соответствует документам API и PUT
эквивалентен update
одному (1) источнику любой информации об этих RBAC-глаголах.
В любом случае.
Мой вывод: похоже, update
это действительно бесполезно, по крайней мере, для развертываний.
Поначалу настройка RBAC казалась многообещающей, но, честно говоря, она начинает терять свой блеск, поскольку я обнаруживаю все больше и больше крайних случаев и недокументированных загадок. Разрешения доступа кажутся наихудшей вещью, о которой нужно быть расплывчатым, или ваша безопасность в конечном итоге зависит скорее от неясности, чем от уверенности.
Комментарии:
1. Просто мысль: похоже
scale
, что операция изменяет только один атрибут aDeployment
(# реплик), а не заменяет весь объект (все атрибуты). Итак, на мой взгляд, это больше похоже на aPATCH
, чем aPUT
. Итак, в этом конкретном случае Kubernetes, похоже, делает логичную вещь. В целом, я нахожу работу с Kubernetes чрезвычайно сложной и далеко не такой стабильной, как хотелось бы. С помощью множества проб и ошибок вы обычно можете стабилизировать свое приложение. Но это всегда требует много времени и усилий. Поэтому я сочувствую вашим выводам.2. Спасибо за ссылку для авторизации.
kubectl auth can-i
Команда выглядит полезной для проверки вашихClusterRole
ClusterRoleBinding
определений и .
Ответ №2:
Вы можете получить дамп «разрешенных / поддерживаемых» глаголов, используя этот плагин krew rbac-tool
# Generate a ClusterRole with all the available permissions for core and apps api groups
$ kubectl rbac-tool show --for-groups=,apps
Хотя оно не сообщит вам точную семантику каждого глагола, оно даст вам представление о вселенной разрешений RBAC, которую имеет ваш кластер.