Поиск по сайту:

Как анализировать манифесты Kubernetes с помощью Kube-Score


Kube-Score — это инструмент статического анализа Kubernetes, который анализирует ваши ресурсы для выявления проблем с безопасностью и надежностью. Запуск Kube-Score перед применением манифестов к кластеру может помочь выявить болевые точки до того, как они превратятся в настоящие проблемы.

Начиная

Kube-Score предлагается в нескольких форматах установки. Готовые двоичные файлы доступны для Windows, macOS и Linux на GitHub. В качестве альтернативы вы можете использовать диспетчер пакетов Brew в macOS (brew install kube-score/tap/kube-score) или добавить Kube-Score в виде подключаемого модуля kubectl (оценка установки kubectl krew).

Запустите Kube-Score с помощью команды kube-score в своем терминале. Он принимает путь к файлу манифеста Kubernetes YAML. Подстановочные знаки поддерживаются для сканирования нескольких совпадающих файлов и целых каталогов.

Kube-Score также работает с манифестами, полученными из стандартного ввода. Это позволяет запускать инструмент в работающем кластере Kubernetes. Используйте kubectl, чтобы получить доступ к манифесту ресурса и направить его в команду. Вот рекомендуемый способ анализа всего вашего кластера:

kubectl api-resources --verbs=list --namespaced -o name 
    | xargs -n1 -I{} bash -c "kubectl get {} --all-namespaces -oyaml && echo ---" 
    | kube-score score -

Этот механизм также облегчает использование с диаграммами Helm. Используйте команду helm template, чтобы отобразить диаграмму в виде обычного манифеста Kubernetes. Передайте этот вывод в kube-score:

helm template example-manifest | kube-score score -

Раскрашенные результаты тестов передаются прямо на ваш терминал. Каждая неудачная проверка включает описание теста и предложения возможных решений. Просмотрите выходные данные, чтобы определить способы улучшения ваших манифестов.

Тесты будут помечены как WARNING или CRITICAL. Критический сбой обычно требует немедленного исправления. Предупреждения могут не нуждаться в разрешении, в зависимости от вашей конкретной ситуации.

Удобочитаемый вывод можно отключить с помощью флага --output-format. Установите для этого параметра значение json или ci, чтобы получить машиночитаемый контент, который легко анализируется другими инструментами. Формат ci предназначен для облегчения использования системами CI/CD, тогда как json дает вам JSON-представление обычного вывода консоли. Kube-Score всегда завершает работу с кодом состояния 1 при обнаружении ошибок.

Если вы хотите поэкспериментировать с Kube-Score, вы можете воспользоваться живым анализатором на сайте проекта. Это позволяет вам написать манифест и наблюдать за результатами сканирования в режиме реального времени. Это удобно, когда вы быстро экспериментируете с Kube-Score или своими манифестами.

Что проверяет Kube-Score?

Kube-Score выполняет более 20 различных проверок, охватывающих широкий спектр вопросов безопасности и надежности. К ним относятся тесты на надлежащие ограничения ресурсов контейнера, правильное использование входных и выходных маршрутов и настройка зондов готовности контейнера для проверки работоспособности.

Вот некоторые из встроенных правил:

  • Запретить использование тега latest для изображений.
  • Убедитесь, что для каждого модуля установлена политика извлечения изображений Всегда, чтобы секреты извлечения проверялись при каждой попытке.
  • Проверьте, что модули имеют допустимые конфигурации зондов и сетевые политики.
  • Проверьте правильность всех ярлыков на всех ресурсах.
  • Проверьте наличие запретительных антипривязок подов, которые не позволяют другим подам быть запланированными для одного и того же рабочего узла.
  • Проверьте, все ли сервисы нацелены на действительный модуль.
  • Убедитесь, что контейнеры используют корневую файловую систему только для чтения без привилегированного режима.

Вы должны обратиться к Kube-Score README за исчерпывающим списком доступных проверок. Во многих случаях набора по умолчанию будет достаточно, чтобы вы могли видеть наиболее распространенные проблемы с манифестами.

Дополнительные правила

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

Необязательные тесты включаются путем передачи флага --enable-Optional-Test команде kube-score. Для добавления к сканированию требуется идентификатор теста. Несколько необязательных тестов активируются повторением флага.

kube-score --enable-optional-test container-security-context-user-group-id

Эта команда запускает Kube-Score с дополнительным тестом для явных идентификаторов пользователей и групп. Проверка завершается неудачно, если Pod запускается без установленных вручную идентификаторов пользователя/группы 1000 или выше.

Аналогичным образом вы можете отключить тесты с помощью флага --ignore-test. Это требует идентификатора теста для удаления из сканирования. Кроме того, флаги --ignore-container-cpu-limit и --ignore-container-memory-limit подавляют обычное требование Kube-Score о том, что каждый контейнер имеет настроенные вручную Ограничения процессора и памяти.

Управление версиями Kubernetes

Kube-Score в настоящее время предполагает, что вы используете Kubernetes v1.18. Если вы используете другую версию, укажите ее с помощью флага --kubernetes-version. Это информирует Kube-Score о том, какие проверки действительно относятся к вашей среде развертывания. Если не указать правильную версию, это может привести к ложным срабатываниям или отрицательным результатам, что даст вам неточное представление об устойчивости вашего кластера.

Kube-Score ожидает, что ваши отдельные ресурсы будут использовать стабильные API Kubernetes. Любые ресурсы, ссылающиеся на бета-версии API, которые были заменены стабильной версией, не пройдут проверку.

Краткое содержание

Kube-Score обеспечивает простой статический анализ манифестов ресурсов Kubernetes. Это позволяет вам узнать о потенциальных проблемах, прежде чем вы попытаетесь выполнить развертывание в своем кластере. Запуск Kube-Score как части конвейера непрерывной интеграции дает вам уверенность в том, что ваши ресурсы настроены правильно и ваш кластер будет работать надежно.

Для достижения наилучших результатов используйте Kube-Score для всех своих ресурсов. Это наиболее эффективно, когда его входные данные включают все ресурсы в одном и том же пространстве имен. В противном случае вы можете обнаружить, что некоторые проблемы упускаются из виду, если они появляются из-за конфликта с другим манифестом.

Помните, что Kube-Score не является исчерпывающим анализом вашего кластера. Это вспомогательный инструмент, а не полный контрольный список, гарантирующий герметичность кластера. Вы по-прежнему должны проводить независимую проверку своей среды, чтобы обеспечить высокий уровень безопасности и максимальную производительность. Kube-Score лучше всего использовать как повседневную утилиту, которая повышает безопасность отдельных развертываний.