Как анализировать манифесты 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 лучше всего использовать как повседневную утилиту, которая повышает безопасность отдельных развертываний.