К основному контенту

☸️ Как контролировать пользователей Kubernetes

Управлять кластером Kubernetes с одним пользователем просто.

Когда вы выходите за пределы одного пользователя, вам нужно начать использовать управление доступом на основе ролей (RBAC).

В прошлом я несколько раз углублялся в эту тему, рассказывая о том, как создать пользовательскую изолированную среду Kubernetes в Docker Enterprise

Но как только вы выйдете за пределы пары пользователей и/или команд и нескольких пространств имен для них, вам быстро станет трудно отследить, кто может что делать и где.

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

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

Поробуйте плагин с открытым исходным кодом who-can kubectl от Aqua Security.

Он дает вам возможность показать, кто (субъекты) может делать, что (действия), c чем (ресурсы) и где (пространства имен).

Установите менеджер плагинов Krew

Для плагина who-can для kubectl требуется менеджер плагинов krew.

Если у вас еще не установлен krew, инструкции по его установке можно найти в его репозитории GitHub, https://github.com/kubernetes-sigs/krew/.

Чтобы убедиться, что он установлен правильно, вы можете получить список доступных плагинов от kubectl.

$ kubectl plugin listThe following kubectl-compatible plugins are available:/home/ken.rider/.krew/bin/kubectl-krew

Установите плагин Who-Can

Если у вас есть менеджер плагинов krew для kubectl, установить плагин who-can довольно легко.

$ kubectl krew install who-can

Настройка RBAC для нашего кластера

У меня есть кластер Kubernetes, который я собрал в Azure с помощью Docker Enterprise.

Существует 3 (не по умолчанию) пространства имен для разработки, тестирования и производства.

У меня также есть команды для разработки, тестирования, эксплуатации и безопасности, которые я создал как администратор кластера.

Я определил набор RoleBindings для каждого из них.

$ kubectl apply -f development-namespace.yamlnamespace/development createdrolebinding.rbac.authorization.k8s.io/dev-team:development-edit createdrolebinding.rbac.authorization.k8s.io/test-team:development-view createdrolebinding.rbac.authorization.k8s.io/ops-team:development-admin createdrolebinding.rbac.authorization.k8s.io/sec-team:development-view created$ kubectl apply -f test-namespace.yamlnamespace/test createdrolebinding.rbac.authorization.k8s.io/dev-team:test-view createdrolebinding.rbac.authorization.k8s.io/test-team:test-edit createdrolebinding.rbac.authorization.k8s.io/ops-team:test-admin createdrolebinding.rbac.authorization.k8s.io/sec-team:test-view created$ kubectl apply -f production-namespace.yamlnamespace/production createdrolebinding.rbac.authorization.k8s.io/dev-team:production-view createdrolebinding.rbac.authorization.k8s.io/test-team:production-view createdrolebinding.rbac.authorization.k8s.io/ops-team:production-admin createdrolebinding.rbac.authorization.k8s.io/sec-team:production-view created

Использование who-can

После того, как вы установили who-can, вы увидите, что его использование будет очень простым.

$ kubectl kubectl who-can VERB (TYPE | TYPE/NAME | NONRESOURCEURL) [flags]

Типичный набор действий, которые могут вас заинтересовать, это get  list  watch  create  update  patch delete.

Есть еще несколько других действий для определенных типов ресурсов, но, как правило, вы будете наиболее заинтересованы в get create  delete.

Типичный набор типов ресурсов, которые могут вас заинтересовать, включают pods  deployments  services  persistentvolumeclaims  configmaps  secrets

Кроме того, с постоянно расширяющимся использованием CustomResourceDefinitions, список типов ресурсов не является бесконечным.

Пример использование Who-Can

Давайте сначала спросим: «Кто может увидеть поды в пространстве имен development?»

$ kubectl who-can get pods -n developmentROLEBINDING NAMESPACESUBJECTTYPE SA-NAMESPACEdev-team:development-edit developmentdev-team Groupops-team:development-admindevelopmentops-team Groupsec-team:development-view developmentsec-team Grouptest-team:development-viewdevelopmenttest-teamGroupCLUSTERROLEBINDINGSUBJECT TYPESA-NAMESPACEcluster-admin system:mastersGroupcompose compose ServiceAccountkube-systemcompose-auth-view compose ServiceAccountkube-systemsystem:controller:clusterrole-aggregation-controllerclusterrole-aggregation-controllerServiceAccountkube-systemsystem:controller:deployment-controller deployment-controller ServiceAccountkube-systemsystem:controller:endpoint-controller endpoint-controller ServiceAccountkube-systemsystem:controller:generic-garbage-collector generic-garbage-collector ServiceAccountkube-systemsystem:controller:namespace-controllernamespace-controllerServiceAccountkube-systemsystem:controller:persistent-volume-binderpersistent-volume-binderServiceAccountkube-systemsystem:controller:pvc-protection-controller pvc-protection-controller ServiceAccountkube-systemsystem:controller:statefulset-controllerstatefulset-controllerServiceAccountkube-systemsystem:kube-scheduler system:kube-scheduler UsertillertillerServiceAccountkube-systemucp-kube-system:cni-plugin:cluster-admincni-pluginServiceAccountkube-systemucp-kube-system:kube-dns:cluster-adminkube-dnsServiceAccountkube-systemucp-kube-system:ucp-metrics:cluster-admin ucp-metrics ServiceAccountkube-system

Теперь давайте спросим: «Кто может создавать поды в пространстве имен development?».

Здесь мы увидим, что только наши группы development и operations могут создавать там поды.

И список учетных записей системных служб короче:

$ kubectl who-can create pods -n developmentROLEBINDING NAMESPACESUBJECT TYPE SA-NAMESPACEdev-team:development-edit developmentdev-teamGroupops-team:development-admindevelopmentops-teamGroupCLUSTERROLEBINDINGSUBJECT TYPESA-NAMESPACEcluster-admin system:mastersGroupsystem:controller:clusterrole-aggregation-controllerclusterrole-aggregation-controllerServiceAccountkube-systemsystem:controller:daemon-set-controller daemon-set-controller ServiceAccountkube-systemsystem:controller:job-controllerjob-controllerServiceAccountkube-systemsystem:controller:persistent-volume-binderpersistent-volume-binderServiceAccountkube-systemsystem:controller:replicaset-controller replicaset-controller ServiceAccountkube-systemsystem:controller:replication-controllerreplication-controllerServiceAccountkube-systemsystem:controller:statefulset-controllerstatefulset-controllerServiceAccountkube-systemtillertillerServiceAccountkube-systemucp-kube-system:cni-plugin:cluster-admincni-pluginServiceAccountkube-systemucp-kube-system:kube-dns:cluster-adminkube-dnsServiceAccountkube-systemucp-kube-system:ucp-metrics:cluster-admin ucp-metrics ServiceAccountkube-system
Затем мы спросим «кто может обновить что-либо в пространстве имен development?».
$ kubectl who-can update '*' -n developmentNo subjects found with permissions to update * assigned through RoleBindingsCLUSTERROLEBINDINGSUBJECT TYPESA-NAMESPACEcluster-admin system:mastersGroupsystem:controller:clusterrole-aggregation-controllerclusterrole-aggregation-controllerServiceAccountkube-systemsystem:controller:generic-garbage-collector generic-garbage-collector ServiceAccountkube-systemtillertillerServiceAccountkube-systemucp-kube-system:cni-plugin:cluster-admincni-pluginServiceAccountkube-systemucp-kube-system:kube-dns:cluster-adminkube-dnsServiceAccountkube-systemucp-kube-system:ucp-metrics:cluster-admin ucp-metrics ServiceAccountkube-system
Наконец, «кто может удалять сервисы в пространстве имен productions?». И мы видим, что только группа operations может это.
$ kubectl who-can delete services -n productionROLEBINDINGNAMESPACE SUBJECT TYPE SA-NAMESPACEops-team:production-adminproductionops-teamGroupCLUSTERROLEBINDINGSUBJECT TYPESA-NAMESPACEcluster-admin system:mastersGroupsystem:controller:clusterrole-aggregation-controllerclusterrole-aggregation-controllerServiceAccountkube-systemsystem:controller:generic-garbage-collector generic-garbage-collector ServiceAccountkube-systemsystem:controller:namespace-controllernamespace-controllerServiceAccountkube-systemsystem:controller:persistent-volume-binderpersistent-volume-binderServiceAccountkube-systemtillertillerServiceAccountkube-systemucp-kube-system:cni-plugin:cluster-admincni-pluginServiceAccountkube-systemucp-kube-system:kube-dns:cluster-adminkube-dnsServiceAccountkube-systemucp-kube-system:ucp-metrics:cluster-admin ucp-metrics ServiceAccountkube-system

Резюме

Плагин who-can kubectl от Aqua Security — действительно полезная утилита для вашего набора инструментов Kubernetes.

Настройка контроллера доступа на основе ролей для вашего кластера Kubernetes чрезвычайно важна, но также различна для каждого пользователя.

 

Комментарии


Дистанционная компьтерная помощь, удаленная компьютерная помощь онлайн.

Популярные сообщения из этого блога

Лучшие плагины для OBS Studio

Open Broadcast Software или OBS - это свободное программное обеспечение с открытым исходным кодом для стриминга аудио и видео данных в сеть интернет. Программа полностью кроссплатформенная и может работать в Windows, Linux или MacOS. Это отличная альтернатива для таких программ, как Wirecast и XSplit. OBS использует для вещания стандартный протокол обмена сообщениями в реальном времени, а поэтому может транслировать данные в любой сервис, поддерживающий это, например, Yotube. Несмотря на широкие возможности OBS, программа поддерживает еще и множество плагинов. В этой статье мы рассмотрим лучшие плагины для OBS Studio, которые вы можете использовать. Содержание статьи: Лучшие плагины OBS Studio 1. Browser Source Plugin 2. Video Source Plugin 3. Simple Scene Switcher 4. DirectShow Audio Source 5. CLR Browser Source 6. OBS Remote 7. AMD Advanced Media Framework Encoder 8. Text Source Plugin Выводы Лучшие плагины OBS Studio Чтобы найти плагины OBS Studio для Video пользователям пр…

Лучшие аналоги Paint для Linux

Когда я работал в Windows, я часто использовал стандартную программу редактора изображений Windows - Paint. Не всегда нужен очень и многофункциональный инструмент вроде Photoshop или Gimp. Иногда, чтобы подправить ту или иную картинку, дорисовать на ней несколько фигур или вставить текст достаточно простого, легкого в освоении графического редактора вроде Paint. В Linux таких программ довольно много. В этой инструкции мы рассмотрим лучшие аналоги Paint для Linux. В этот список не будут включены такие программы, как Gimp и Krita, ведь это полнофункциональные графические редакторы, векторные редакторы, такие как Inkscape мы тоже рассматривать не будем. А теперь перейдем к списку. Содержание статьи: KolourPaint MyPaint Gnome Paint XPaint Pinta mtPaint GPaint Rassam-paint Выводы KolourPaint На первом месте в списке аналогов Piant для Linux будет KoloutPaint. Это стандартный графический редактор для окружения рабочего стола KDE. Он поддерживает множество форматов изображений PNG, J…

Подключение OneDrive в Linux

OneDrive (Ранее известный как SkyDrive) это популярное облачное хранилище файлов от Майкрософт. Сейчас OneDrive бесплатно предоставляет 7 гигабайт пространства новым пользователям. Как вы знаете OneDrive хорошо интегрирован с другими продуктами компании  Microsoft. В OneDrive Также есть официальный клиент который автоматически загружает ваши видео и фотографии с камеры в облако. Но к сожалению этот клиент недоступен для операционных систем семейства Linux. Но не все так плохо. Сообщество открытого программного обеспечения уже нашло решение. Это opedrive-d от Boilermaker. Запустившись как демон программа автоматически синхронизирует локальную папку с облаком OneDrive. Содержание статьи: Установка Onedrive-d в Linux Настройка Синхронизация локальной папки с OneDrive Установка Onedrive-d в Linux Несмотря на то что onedrive-d разрабатывается для Ubuntu/Debian, CentOs/Fedora/RHEL поддерживается тоже хорошо. Для установки достаточно набрать несколько команд: $ git clone https://gith…