
KubeLinter — это инструмент статического анализа, который проверяет YAML-файлы Kubernetes и чарты Helm, чтобы гарантировать, что представленные в них приложения соответствуют лучшим практикам.
Статический анализ для Kubernetes
KubeLinter анализирует YAML-файлы Kubernetes, диаграммы Helm и манифесты Kustomize и проверяет их на соответствие различным лучшим практикам с акцентом на производственную готовность и безопасность.
KubeLinter запускает разумные проверки по умолчанию, предназначенные для предоставления полезной информации о ваших YAML-файлах Kubernetes, диаграммах Helm и манифестах Kustomize. Это помогает командам проверять часто и на ранних этапах на предмет ошибок конфигурации безопасности и лучших практик DevOps. Некоторые распространенные примеры включают запуск контейнеров от имени непривилегированного пользователя, обеспечение минимальных привилегий и хранение конфиденциальной информации только в секретах.
KubeLinter настраивается, поэтому вы можете включать и отключать проверки, а также создавать собственные проверки в зависимости от политик, которым вы хотите следовать в своей организации.
Когда проверка lint завершается ошибкой, KubeLinter сообщает рекомендации по устранению возможных проблем и возвращает ненулевой код выхода.
Посетите https://docs.kubelinter.io для получения подробной документации по установке, использованию и настройке KubeLinter.
Бинарные файлы Kube-linter можно найти здесь: https://github.com/stackrox/kube-linter/releases/latest
Чтобы установить с помощью Go, выполните следующую команду:
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest
В противном случае загрузите последний бинарный файл из Releases и добавьте его в свой PATH.
Чтобы установить с помощью Homebrew или LinuxBrew, выполните следующую команду:
brew install kube-linter
nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
Установка KubeLinter из исходного кода так же проста, как выполнение следующих шагов:
Сначала клонируйте репозиторий KubeLinter.
git clone [email protected]:stackrox/kube-linter.git
Затем скомпилируйте исходный код. Это создаст бинарные файлы kube-linter для каждой платформы и поместит их в папку .gobin.
make build
Наконец, вы готовы начать использовать KubeLinter. Проверьте версию, чтобы убедиться, что KubeLinter успешно установлен.
.gobin/kube-linter version
Существует несколько уровней тестирования. Каждый уровень должен быть пройден.
модульные тесты go:
make test
сквозные интеграционные тесты:
make e2e-test
и, наконец, сквозные интеграционные тесты с использованием bats-core:
make e2e-bats
Образы KubeLinter подписаны с помощью cosign. Мы рекомендуем проверять образ перед его использованием.
После установки cosign вы можете использовать открытый ключ KubeLinter для проверки образа KubeLinter с помощью:
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAME
KubeLinter также предоставляет подписи cosign без ключа.
Вы можете проверить образ KubeLinter с помощью:
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME
Запуск KubeLinter для проверки ваших YAML-файлов в самой простой форме требует всего двух шагов.
Найдите YAML-файл, который вы хотите проверить на соответствие лучшим практикам безопасности и производственной готовности:
Выполните следующую команду:
kube-linter lint /path/to/your/yaml.yaml
Рассмотрим следующий пример файла спецификации пода pod.yaml. Этот файл содержит две проблемы производственной готовности и одну проблему безопасности:
Проблема безопасности:
Производственная готовность:
Лимиты памяти контейнера не установлены, что может позволить ему потреблять чрезмерный объем памяти.
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
volumes:
- name: sec-ctx-vol
emptyDir: {}
containers:
- name: sec-ctx-demo
image: busybox
resources:
requests:
memory: "64Mi"
cpu: "250m"
command: [ "sh", "-c", "sleep 1h" ]
volumeMounts:
- name: sec-ctx-vol
mountPath: /data/demo
securityContext:
allowPrivilegeEscalation: false
Скопируйте приведенный выше YAML в pod.yaml и проверьте этот файл, выполнив следующую команду:
kube-linter lint pod.yaml
KubeLinter запускает свои проверки по умолчанию и сообщает рекомендации. Ниже приведен вывод нашей предыдущей команды.
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) The container "sec-ctx-demo" is using an invalid container image, "busybox". Please use images that are not blocked by the `BlockList` criteria : [".*:(latest)$" "^[^:]*$" "(.*/[^:]+)$"] (check: latest-tag, remediation: Use a container image with a specific tag other than latest.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" does not have a read-only root file system (check: no-read-only-root-fs, remediation: Set readOnlyRootFilesystem to true in the container securityContext.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" has memory limit 0 (check: unset-memory-requirements, remediation: Set memory limits for your container based on its requirements. Refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits for details.)
Error: found 3 lint errors
KubeLinter поддерживает генерацию нескольких форматов вывода за один запуск. Это полезно для одновременного создания отчетов, читаемых человеком и машиной:
kube-linter lint \
--format sarif --output kube-linter.sarif \
--format json --output kube-linter.json \
--config .kube-linter.yaml \
pod.yaml
Эта команда:
kube-linter.sarifkube-linter.jsonПримечание: Несколько форматов требуют явных флагов --output. Для вывода одного формата в stdout используйте только один флаг --format без --output.
Для получения более подробной информации об использовании нескольких форматов вывода см. документацию.
Чтобы узнать больше об использовании и настройке KubeLinter, посетите страницу документации.
Ниже приведены обучающие материалы по KubeLinter, написанные пользователями. Если у вас есть материал, который вы хотели бы добавить в этот список, отправьте PR!
KubeLinter распространяется под лицензией Apache License 2.0.
Если вы хотите взаимодействовать с сообществом KubeLinter, включая сопровождающих и других пользователей, вы можете присоединиться к рабочему пространству Slack здесь.
В будущем возможны критические изменения в использовании команд, флагов и форматов файлов конфигурации. Тем не менее, мы призываем вас использовать KubeLinter для тестирования YAML-файлов вашего окружения, посмотреть, что сломается, и внести свой вклад.
Напоминаем, что все участие в сообществе KubeLinter регулируется нашим кодексом поведения.
KubeLinter создан с ❤️ компанией StackRox и теперь поддерживается Red Hat.