Все в одном наборе инструментов для запуска вкладки, общей валидации, анализа статического кода, сканирования безопасности, тестов на конфигурацию, аудита, сборки Kustomize и конфигурации сухого запуска для структурированных манифестов Kubernetes YAML. Предназначен для запуска в процессе CI (непрерывная интеграция) как часть проверки и тестирования, особенно полезно для кластеров Kubernetes, которые управляются через Gitops.
Я не смог найти ни одного изображения Docker, в котором содержались все основные инструменты проверки (из которых есть несколько!), Чтобы проверить файлы манифеста Kubernetes YAML как часть процесса CI/CD, прежде чем быть автоматически развернутым в Kubernetes. Это репо не предназначено для того, чтобы охватывать, как использовать эти отдельные инструменты, хотя он содержит некоторые основные примеры использования. Приведенные ниже ссылки должны привести к документации для более подробной информации об использовании каждого инструмента. Мы нашли полезным использовать несколько инструментов во время нашего процесса проверки CI и сканирования, потому что некоторые инструменты проверяют определенные аспекты, которые не могут другие.
Возьмите последнее изображение из пакетов Github или от Docker Hub.
Вы можете запустить изображение непосредственно в Docker или посмотреть ниже для примеров использования CI/CD.
docker run --rm -it docker.pkg.github.com/highwayoflife/kubernetes-validation-tools/image:latest /bin/bashdocker run --rm -it deck15/kubeval-tools:latest /bin/bash| Инструмент | Версия | Цель | Описание |
|---|---|---|---|
| Kubectl | 1.23.5 | Кли | Kubernetes Cli. Можно использовать с --dry-run=client для проверки манифестов |
| Шлем | 3.8.1 | Кли | Helm помогает вам управлять приложениями Kubernetes - определить, установить и обновить приложения Kubernetes в качестве диаграмм Helm. Запустить в качестве инструмента проверки, можно запустить в качестве helm lint или helm template . |
| Yamllint | 1.26.3 | Линтер | Основной линтер для файлов yaml |
| Кубеваль | 0,16,1 | Валидация | Инструмент для проверки манифестов Kubernetes YAML. Не работает с CRDS. |
| Кустомиз | 4.5.3 | Компиляция | Бесплатный способ настройки конфигураций приложений. Полезно для проверки конфигураций Kustomize. |
| Конфигурация | 1.6.0 | Валидация | Проверьте файлы конфигурации, используя пользовательские правила, указанные в YAML. |
| Conftest | 0,30,0 | Тесты | Утилита, чтобы помочь вам записать тесты на структурированные данные конфигурации. |
| Kube Score | 1.14.0 | Безопасность | Инструмент, который выполняет анализ статического кода определений объектов Kubernetes. |
| Polaris | 5.1.0 | Валидация | Идентифицирует ошибки конфигурации развертывания Kubernetes |
| Kube Linter | 0,2,6 | Безопасность | Линтер и статический инструмент анализа, который проверяет манифесты Kubernetes |
| KubeConform | 0.4.13 | Валидация | Kubernetes Manifests Validation, такой как Kubeval с поддержкой CRD |
| Kubeaudit | 0,16,0 | Безопасность | Аудиторские кластеры или манифестные файлы для проблем безопасности |
| Datree | 1.0.15 | Политика | Убедитесь, что манифесты Kubernetes и Helm -диаграммы действительны и следуют вашей политике. |
| Kubesec | 2.11.4 | Безопасность | Анализ рисков безопасности для ресурсов Kubernetes |
В идеале контейнер с валидацией kubernetes-validation следует использовать в процессе сборки CI для проверки, сканирования и конфигураций Lint Kubernetes и манифестов или диаграмм рулевых. Оптимально запустить эти инструменты в рамках рабочего процесса непрерывной интеграции Gitops.
Используйте спецификатор контейнера, чтобы запустить шаг внутри контейнера. Обязательно укажите runs-on в качестве соответствующей среды хоста для вашего контейнера (Ubuntu-Latest для контейнеров Linux, Windows-Latest для контейнеров Windows). Например:
jobs :
container :
runs-on : ubuntu-latest
container : deck15/kubeval-tools:latest
steps :
- run : |
kubeconform -summary manifests.yaml
name: Run in container Этот пример полезен, если Дженкинс работает в кластере Kubernetes: Jenkinsfile
pipeline {
agent {
kubernetes {
cloud ' build-pipeline '
defaultContainer ' validate '
inheritFrom ' jnlp '
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: validate
image: deck15/kubeval-tools:latest
command:
- cat
tty: true
"""
} // kubernetes
} // agent
stages {
steps {
container( ' validate ' ) {
sh ' kubeconform -summary manifests.yaml '
}
}
}
}pipeline {
agent {
docker { image ' deck15/kubeval-tools:latest ' }
} // agent
.. .
}.drone.yml kind : pipeline
type : docker
name : default
steps :
- name : validate
image : deck15/kubeval-tools:latest
commands :
- kubeconform -summary manifests.yaml .circleci/config.yml version : 2.0
jobs :
build :
docker :
- image : deck15/kubeval-tools:latest .gitlab-ci.yamlВы можете определить изображение, которое используется для всех заданий, и список услуг, которые вы хотите использовать во время выполнения:
default :
image : deck15/kubeval-tools:latest
validate :
script :
- kubeconform -summary manifests.yaml Kubeaudit - это инструмент командной строки и пакет Go для аудита кластеров Kubernetes для различных проблем безопасности, таких как:
Kubeaudit гарантирует, что вы развертываете безопасные контейнеры!
Kubeval - это инструмент для проверки файла конфигурации Kubernetes YAML или JSON. Это происходит с использованием схем, сгенерированных из спецификации Kubernetes OpenAPI, и, следовательно, может проверять схемы для нескольких версий Kubernetes.
KubeConform - это инструмент проверки валидации Kubernetes. Создайте его в свой CI, чтобы проверить конфигурацию Kubernetes!
Он вдохновлен, содержит код и предназначен для того, чтобы оставаться близко к Кубевале, но со следующими улучшениями:
Проверка одного, допустимого файла
kubeconform fixtures/valid.yaml
echo $?
0Проверка единого недопустимого файла, настройка вывода в JSON и распечатка резюме
kubeconform -summary -output json fixtures/invalid.yaml
{
" resources " : [
{
" filename " : " fixtures/invalid.yaml " ,
" kind " : " ReplicationController " ,
" version " : " v1 " ,
" status " : " INVALID " ,
" msg " : " Additional property templates is not allowed - Invalid type. Expected: [integer,null], given: string "
}
],
" summary " : {
" valid " : 0,
" invalid " : 1,
" errors " : 0,
" skipped " : 0
}
}
echo $?
1Прохождение манифестов через Stdin
cat fixtures/valid.yaml | kubeconform -summary
Summary: 1 resource found parsing stdin - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0Проверка папки, увеличивая количество параллельных работников
kubeconform -summary -n 16 fixtures
fixtures/crd_schema.yaml - CustomResourceDefinition trainingjobs.sagemaker.aws.amazon.com failed validation: could not find schema for CustomResourceDefinition
fixtures/invalid.yaml - ReplicationController bob is invalid: Invalid type. Expected: [integer,null], given: string
[...]
Summary: 65 resources found in 34 files - Valid: 55, Invalid: 2, Errors: 8 Skipped: 0Conftest - это утилита, которая поможет вам записать тесты на структурированные данные конфигурации. Например, вы можете написать тесты для ваших конфигураций Kubernetes или определений трубов Tekton, кода Terraform, конфигурации без серверов или любых других структурированных данных.
Conftest полагается на язык Рега от открытого политического агента для написания утверждений.
Yamllint - это Линтер для файлов YAML.
Yamllint не только проверяет обоснованность синтаксиса, но и для странностей, таких как повторение ключевых и косметические проблемы, такие как длина линий, пространства для зацепления, отступы и т. Д.
Kustomize позволяет настроить необработанные, без шаблонов YAML-файлов для нескольких целей, оставляя оригинальный YAML нетронутым и пригодным для использования, как есть.
Kustomize Targets Kubernetes; Он понимает и может исправлять объекты API стиля Kubernetes. Это похоже на то, что то, что он делает, объявляется в файле, и это похоже на SED, поскольку он испускает отредактированный текст. Kustomize Travers, манифест Kubernetes для добавления, удаления или обновления параметров конфигурации без подрыта.
Kustomize особенно полезен для использования с такими инструментами, как argocd, fluxcd или spinnaker, чтобы обеспечить общие манифесты (ресурсы) в нескольких кластерах или средах без дублирования кода. Kustomize позволяет переопределить, слияния и другие функции конфигурации.
Kubectl - это версия швейцарского армейского ножа Kubernetes и может сделать много вещей. Одна из этих вещей заключается в том, чтобы выполнить проверку сухого управления в файле YAML.
$ kubectl create --dry-run --validate -f invalid.yamlХелм команды для использования в CI, чтобы пронзительно или проверить диаграммы Helm.
Изучите диаграмму по возможным вопросам.
ПРИМЕЧАНИЕ:
helm lintсам по себе недостаточен для адекватной проверки диаграммы Helm. Рекомендуется использоватьhelm templatehelm lintи Helm в сочетании с одним из других инструментов проверки. (См. Пример ниже)
Эта команда проходит путь к диаграмме и проходит серию тестов, чтобы убедиться, что диаграмма хорошо сформирована.
Если Linter встречается с вещами, которые приведут к сбору диаграммы, он излучит сообщения [ERROR] . Если он сталкивается с проблемами, которые разбиваются с соглашением или рекомендацией, он излучит [WARNING] сообщения.
helm lint PATH [flags]helm template ./path/to/chart | kubeconform -strict -ignore-missing-schemasConfig-Lint-это инструмент командной строки для проверки файлов конфигурации с использованием правил, указанных в YAML. Файлы конфигурации могут быть одним из нескольких форматов: Terraform, JSON, YAML, при поддержке Kubernetes. Существуют встроенные правила для Terraform, и пользовательские файлы могут использоваться для других форматов.
config-lint -rules example-files/rules/kubernetes.yml example-files/configKube-Score, инструмент, который выполняет анализ статического кода ваших определений объектов Kubernetes. Вывод - это список рекомендаций о том, что вы можете улучшить, чтобы сделать ваше приложение более безопасным и устойчивым.
Компания Kube может работать в вашей среде CI/CD и выходит из кода выхода 1, если была найдена критическая ошибка. Уровень триггера может быть изменен на предупреждение с аргументом-Exit-One-на Warning.
Вход в Kube Score должен быть всеми приложениями, которые вы развертываете в одном и том же пространстве имен для наилучшего результата.
helm template my-app | kube-score score -kustomize build . | kube-score score -kube-score score my-app/ * .yaml
kube-score score my-app/deployment.yaml my-app/service.yamlPolaris, Polaris проводит различные проверки, чтобы гарантировать, что капсулы и контроллеры Kubernetes настроены с использованием лучших практик. Polaris включен в качестве инструмента CLI для тестирования локальных файлов YAML, например, как часть процесса CI/CD.
Polaris можно запустить в нескольких разных режимах:
Вы можете запустить аудиты в командной строке и увидеть вывод как JSON, YAML или необработанный счет:
polaris audit --format yaml > report.yaml
polaris audit --format score
# 92Аудиты могут работать против локального каталога или файла YAML, а не кластера:
polaris audit --audit-path ./deploy/
# or to use STDIN
cat pod.yaml | polaris audit --audit-path -Вы также можете запустить аудит на одном ресурсе вместо всего кластера:
polaris audit --resource " nginx-ingress/Deployment.apps/v1/default-backend " Вы можете интегрировать Polaris в CI/CD для репозиториев, содержащих инфраструктуру как код. Например, чтобы провалиться, если Polaris обнаружит какие-либо проблемы на уровне опасности, или если оценка упадет ниже 90%:
polaris audit --audit-path ./deploy/
--set-exit-code-on-danger
--set-exit-code-below-score 90Для получения дополнительных вариантов использования для CLI см. Документ об использовании
Kube Linter - это статический инструмент анализа, который проверяет файлы kubernetes yaml и диаграммы Helm, чтобы гарантировать, что представленные в них приложения придерживаются лучших практик. Кубелинтер принимает файлы YAML в качестве входных данных и запускает серию проверок на них. Если он находит какие-либо проблемы, он сообщает им и возвращает ненулевой код выхода.
Datree - это инструмент CLI, который можно использовать локально или в вашем CI/CD, чтобы гарантировать, что Kubernetes проявляют манифесты, а Helm -диаграммы следуют за лучшими практиками, а также политикой вашей организации. Он поставляется с 30 проверенными в битве правил на выбор, вместе со встроенной поддержкой проверки схемы YAML и Kubernetes.
datree test my-app/ * .yaml
datree test my-app/deployment.yamlhelm datree test < CHART_DIRECTORY > Kubesec - это инструмент сканирования безопасности для капсул Kubernetes, развертывания, Daemonsets и Statefulsets.
kubesec scan manifest.yamlKubesec возвращает MSON -массив и может сканировать несколько документов YAML в одном входном файле.
[
{
"object" : " Pod/security-context-demo.default " ,
"valid" : true ,
"message" : " Failed with a score of -30 points " ,
"score" : -30 ,
"scoring" : {
"critical" : [
{
"selector" : " containers[] .securityContext .capabilities .add == SYS_ADMIN " ,
"reason" : " CAP_SYS_ADMIN is the most privileged capability and should always be avoided " ,
"points" : -30
}
],
"advise" : [
{
"selector" : " containers[] .securityContext .runAsNonRoot == true " ,
"reason" : " Force the running image to run as a non-root user to ensure least privilege " ,
"points" : 1
},
{
// ...
}
]
}
}
]PRS приветствуется! Ознакомьтесь с руководящими принципами для получения дополнительной информации.