Добавление или удаление возможностей Linux в Kubernetes SecurityContext

Dobavlenie Ili Udalenie Vozmoznostej Linux V Kubernetes Securitycontext



Может быть сложно управлять степенью привилегий, предоставляемых каждому поду и контейнеру в контейнере Kubernetes. Мы можем использовать возможности Kubernetes SecurityContext для добавления или удаления возможностей Linux из модуля и контейнера для повышения безопасности контейнера. В этой статье основное внимание уделяется использованию securityContext для реализации простого примера добавления и удаления возможностей. В примере приведена конфигурация файла yaml для удаления всех возможностей и добавления только одной возможности в контейнер. В этой статье команды proc и capsh используются для отображения возможностей контейнера.

Шаг 1: Запустите сервер Minikube







Сначала запустите сервер minikube, чтобы вы могли запустить свое приложение и использовать инструкции kubectl. Вы можете развернуть свои узлы, модули и даже кластер с помощью сервера minikube в среде Kubernetes. Для поддержания миникуба в активном режиме необходимо использовать следующую команду:



> запустить миникуб



При этом сервер minikube включается, и среда Kubernetes готова к использованию.





Шаг 2: Создайте YAML-файл Kubernetes



На втором этапе создайте файл YAML для развертывания модуля.

Следуйте инструкциям, чтобы создать файл yaml с помощью nano:

  • Перейдите к пути к каталогу, в котором вы хотите создать файл или изменить существующий файл.
  • Введите команду nano, а затем имя файла.

Запустите следующую команду nano. Он создает файл конфигурации YAML с именем «nano podsample.yaml».

> нано podsample.yaml

Давайте перейдем к следующему шагу, который поможет вам узнать, как настроить файл podsample.yaml.

Шаг 3: Настройте файл YAML

Мы добавляем инструмент capsh на предыдущем шаге, чтобы увидеть возможности нашего контейнера.

Обратите внимание, что ни один из этих параметров не настроен для раздела securityContext для этого контейнера. Таким образом, все они настроены на системные значения по умолчанию. Учтите тот факт, что этот контейнер работает как пользователь по умолчанию, указанный в Dockerfile, из которого он создан, если для него не определен пользователь в Kubernetes. Для многих контейнеров этим пользователем по умолчанию является root.

Шаг 4: Создать модуль

На этом этапе давайте создадим podsample.yaml со следующей присоединенной командой:

> применить кубектл -f podsample.yaml

Шаг 5: Проверить возможности

На предыдущем шаге создается и запускается модуль.

Теперь, когда у нас есть оболочка внутри, мы можем использовать capsh для проверки его возможностей с помощью следующей команды:

> $ кубектл исполнитель - -stdin - -tty колпачки - - пепел

Используя команду capsh, можно увидеть емкости контейнера по умолчанию, которые перечислены ниже:

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

Шаг 6: Бросьте Одинокий Возможности Д в Kubernetes SecurityContext

На этом этапе мы отказываемся от единственной возможности контейнера.

Давайте настроим файл yaml, используя следующую команду:

> нано dropod.yaml

После этого перейдите к настройке файла droppod.yaml, используя следующую команду:

> применить кубектл -f droppod.yaml

Шаг 7 : Настройка для добавления одной возможности в файл YAML

На этом шаге откройте файл yaml (dropped.yaml), созданный на шаге 6. Затем настройте контейнер таким образом, чтобы он больше не имел доступа к возможности CAP_MKNOD, что лишает возможности создавать новые узлы файловой системы.

Сконфигурированный файл выглядит следующим образом:

Шаг 8 : Проверить возможности

Файл yaml настроен на удаление возможности CAP_MKNOD.

На этом этапе выполните и запустите файл dropcaps.yaml, чтобы проверить возможности контейнера, используя следующую команду:

> $ кубектл исполнитель - -stdin - -tty буквицы - - пепел

Емкости можно проверить, запустив файл dropcaps:

> # капш--print

Мы можем заметить, что этот модуль отказался от возможности CAP_MKNOD по сравнению с первым модулем.

Шаг 9 : Отключить все возможности в Kubernetes SecurityContext

Поскольку Kubernetes может отказаться от одной возможности, он также может отказаться от всех возможностей через securityContext. На этом этапе отключите все возможности контейнера, подразумевая данную команду:

> нано образецнокап.yaml

После этого настройте файл samplenocap.yaml с помощью следующей команды:

> кубектл создать -f образецнокап.yaml

Теперь давайте перейдем к следующему шагу, чтобы удалить все емкости в наших настройках securityContext.

Шаг 10. Настройте все возможности в файле YAML

На этом шаге откройте файл yaml, созданный на шаге 9. Затем настройте внутри container.securityContext и отключите все возможности контейнера.

Сконфигурированный файл выглядит следующим образом:

Шаг одиннадцать : Проверить возможности

Запустите nocaps в capsh, чтобы увидеть информацию о возможностях. На этом шаге используйте следующую команду и отобразите все возможности контейнера:

> кубектл исполнитель - -stdin - -tty нокапс - - пепел

Емкости можно проверить на следующем рисунке, запустив yaml-файл samplenocaps в capsh:

> # капш--print

Предыдущий вывод показывает, что current='' и bounding set='' теперь пусты. Возможности удалены успешно.

Шаг 1 2 : Установите Баш

На этом шаге установите Bash через apk, так как некоторые системные функции не будут работать, если у нас вообще нет никаких возможностей. Несмотря на то, что наш контейнер работает с правами root, установка пакета Bash завершается ошибкой.

> # apk добавить bash

Шаг 1 3 : Проверьте информацию о возможностях

Есть несколько способов просмотреть возможности нашего контейнера, например, с помощью команд capsh и proc. На этом этапе мы отображаем емкости контейнера с помощью команды proc, а proc отображает емкости в виде растрового изображения. Хотя он не так удобочитаем, как результат от capsh, каждый определенный здесь бит обозначает определенную возможность.

> # компакт-диск /proc/1/

Здесь мы видим, что этот конкретный контейнер не имеет включенных возможностей; все эти значения равны нулю.

Шаг 1 4 : Добавление одной возможности в Kubernetes SecurityContext

На предыдущих шагах мы удалили одну возможность CAP_MKNOD и удалили все возможности. Но на этом шаге мы можем добавить возможности обратно.

Выполните следующую команду, чтобы создать файл yAML:

> нано образецдобавить.yaml

После этого настройте файл sampleadd.yaml.

> кубектл создать -f образецдобавить.yaml

Теперь давайте попробуем файл sampleadd.yaml и добавим одну емкость в наши настройки securityContext.

Шаг 1 5 : Настройте единственную возможность в файле YAML

Теперь давайте настроим файл, добавив возможность из spec.container.securityContext в файл возможностей.add ['MKNOD'].

Возможность отображается в файле YAML.

Шаг 16 : Проверить возможности

На этом шаге запустите addcaps, чтобы проверить возможности, используя следующую команду:

> кубектл исполнитель - -stdin - -tty надписи - - в качестве

Добавленную емкость можно увидеть в следующем заданном выводе:

текущий = cap_mknod+ep

Ограничивающий набор = cap_mknod

> # капш--print

Заключение

Вы впервые узнали из реализованного примера о возможностях контейнера по умолчанию, которые назначаются во время выполнения и отображаются с помощью команды capsh. Затем вы научились сбрасывать одну возможность в контейнер с именем CAP_MKNOD. Затем вы также узнали, как удалить все возможности контейнера с помощью конфигурации //drop: –all. Затем мы использовали два способа отображения возможностей контейнеров — с помощью команд capsh и proc.