Идея написания этой статьи родилась у автора после знакомства с двумя сущностями: этим и этим репозиторием. 😎
- Итак, никто не хочет бросать какашки в горшок.
- Что делает Datree особенным
- 🎯 Безопасно ли это с точки зрения утечки данных?
- 🎯 Что проверять?
- 🎯 Политика как код
- 🎯 Централизованная политика
- 🎯 Гибкость правил
- 🎯 Пользовательские правила
- Установка и общее использование
- Плагин kubectl
- плагин helm
- Интеграция CI
- Вместо заключения
Итак, никто не хочет бросать какашки в горшок.
В рамках подхода GitOps, который все чаще используется сегодня, в большинстве случаев вам необходимо обновить диаграммы Helm (Deployment, Service или Pod) или YAML манифесты для Kubernetes, а затем либо сразу применить изменения к Production, Staging или Test окружениям, в зависимости от ситуации.
Беспокоитесь о том, будет ли новая модификация YAML манифеста Kubernetes, которую вы развертываете в производственной среде? Будет ли она действительно работать во время релиза или развертывания?
Ну, немного нервная ситуация, проиллюстрированная (автор только что вспомнил об этом) около шести лет назад.
Независимо от того, насколько вы квалифицированный или опытный инженер, это будет пугающим опытом, если вы не уверены в своих изменениях.
Итак, есть ли способ проверить ваши YAML-манифесты и диаграммы Helm до их использования в производстве? К счастью, ответ «да». Инструмент под названием Datree можно использовать для проверки манифеста Kubernetes перед внесением изменений!
Что делает Datree особенным
Если Kubescape — это утилита, которая повышает безопасность Kubernetes путем сканирования кластеров и обнаружения уже развернутых YAML-файлов, которые не соответствуют стандартам безопасности или имеют уязвимости (о которых инженер мог и не знать), то Datree был создан 💡 для предотвращения попадания неправильных конфигураций Kubernetes в продакшн с помощью автоматических проверок политики Datree для вашего конвейера.
Datree, инструмент CLI с открытым исходным кодом 5.8k⭐, позволяет инженерам писать более стабильные конфигурации, чтобы они действительно могли спать по ночам. Он позволяет интегрировать его в любой поток CI и запускать его, когда вы захотите, например, каждый раз, когда команда вносит изменения или отправляет запрос на исправление.
🎯 Безопасно ли это с точки зрения утечки данных?
Заявления создателей могут быть интерпретированы таким образом, что оценка политики Datree является чисто локальной.
🖼️ Более крупное изображение находится здесь. Также вы можете открыть картинку в новой вкладке браузера для увеличения.
Поскольку CLI выполняет проверку политик на вашей системе, ваши файлы и их содержимое не передаются в их бэкэнд. На бэкэнд, который используется для отображения истории проверок политик на вашей приборной панели, инструмент отправляет только метаданные.
Что не менее важно: для выполнения проверок Datree не нужно подключаться к кластеру. У него также есть автономный режим.
🎯 Что проверять?
Datree проверяет следующие три утверждения:
- Является ли файл хорошо составленным YAML-файлом?
- Схема для Kubernetes: является ли этот файл действительным файлом Kubernetes?
- Соответствует ли файл вашей политике Kubernetes?
🎯 Политика как код
Политика как код, подобно инфраструктуре как код, представляет собой концепцию использования декларативного кода для замены действий, требующих использования пользовательского интерфейса. Проверенные передовые методы разработки программного обеспечения, такие как контроль версий, совместная работа и автоматизация, могут быть применены путем кодирования политик в коде.
🎯 Централизованная политика
Эта идея относится к управлению выполнением распределенных политик из одной точки. Это дает владельцу политики простой контроль над правилами, которые Datree оценивает во время каждого запуска, не добавляя дополнительной работы. Вы можете управлять централизованной политикой, войдя в приборную панель.
🎯 Гибкость правил
Чтобы соответствовать вашим предпочтениям, вы можете включить или выключить любое из 50+ встроенных правил на приборной панели. Когда правило включено или выключено, все проверки политики, выполняемые по этому правилу, автоматически обновляются (через маркер учетной записи). Это избавляет владельца политики от необходимости вручную обновлять каждое устройство (кластерный узел), связанное с политикой.
Вы можете выбрать из десятков проверенных правил, которые касаются различных ресурсов Kubernetes и сценариев использования, связанных с: контейнерами, заданиями cron, рабочими нагрузками (запущенными приложениями), сетью, безопасностью, устареванием API, развертыванием ArgoCD, CVE, описанными АНБ, и другими синтаксическими нюансами Kubernetes.
🎯 Пользовательские правила
Вы можете написать любые тесты, которые вам нравятся, и запустить их против ваших настроек Kubernetes для проверки нарушений правил в дополнение к встроенным правилам инструмента. Встроенный механизм правил поддерживает декларативный синтаксис YAML и JSON, поскольку основан на JSON Schema.
Установка и общее использование
Все, что вам нужно сделать, это выполнить приведенную ниже команду:
curl https://get.datree.io | /bin/bash
После установки вы можете легко использовать Datree для проверки безопасности манифестов Kubernetes.
Синтаксис выглядит следующим образом:
datree test [k8s-manifest-file]
Когда проверка запущена, она проходит через 3 основных этапа:
- проверка YAML;
- проверка графиков Kubernetes;
- проверка политик Kubernetes.
Например, при проверке демонстрационного манифеста команда будет выглядеть следующим образом:
datree test ~/.datree/k8s-demo.yaml
Давайте посмотрим на результат:
$ datree test ~/.datree/k8s-demo.yaml
>> File: .datree/k8s-demo.yaml
[V] YAML validation
[V] Kubernetes schema validation
[X] Policy check
❌ Ensure each container image has a pinned (tag) version [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
💡 Incorrect value for key `image` - specify an image version to avoid unpleasant "version surprises" in the future
❌ Ensure each container has a configured liveness probe [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
💡 Missing property object `livenessProbe` - add a properly configured livenessProbe to catch possible deadlocks
❌ Ensure each container has a configured memory limit [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
💡 Missing property object `limits.memory` - value should be within the accepted boundaries recommended by the organization
❌ Ensure workload has valid label values [1 occurrence]
- metadata.name: rss-site (kind: Deployment)
💡 Incorrect value for key(s) under `labels` - the vales syntax is not valid so the Kubernetes engine will not accept it
(Summary)
- Passing YAML validation: 1/1
- Passing Kubernetes (1.20.0) schema validation: 1/1
- Passing policy check: 0/1
+-----------------------------------+-----------------------+
| Enabled rules in policy "Default" | 21 |
| Configs tested against policy | 1 |
| Total rules evaluated | 21 |
| Total rules skipped | 0 |
| Total rules failed | 4 |
| Total rules passed | 17 |
| See all rules in policy | https://app.datree.io |
+-----------------------------------+-----------------------+
На выходе вы можете увидеть подробную информацию о нарушениях, присутствующих в манифесте. Это дает инженерам необходимые указания для их устранения.
Каждая проверка политики Datree выполняется с использованием политики по умолчанию, которая включает 50+ встроенных правил.
Чтобы настроить политику, необходимо вернуться в терминал и зарегистрироваться, нажав на ссылку, указанную в конце вывода.
Плагин kubectl
Этот плагин kubectl
расширяет возможности Datree CLI, позволяя сканировать ресурсы в вашем кластере на предмет неправильной конфигурации.
Плагин Kubectl может быть установлен с помощью команды:
kubectl krew install datree
Что вы должны увидеть:
$ kubectl krew install datree
Updated the local copy of plugin index.
Installing plugin: datree
Installed plugin: datree
| Use this plugin:
| kubectl datree
| Documentation:
| https://github.com/datreeio/kubectl-datree
| Caveats:
|
| | Before using this plugin, the Datree CLI needs to be installed.
| | See https://hub.datree.io/ for quick and easy installation.
| /
/
Давайте попробуем проверить пространство имен нашего кластера (в котором развернут данный релиз Bitnami).
В настоящее время версия схемы K8s, которая проверяется по умолчанию при запуске проверки политики, составляет 1.2
. Чтобы проверить наличие устаревших API перед развертыванием манифеста K8s, измените версию K8s по умолчанию в вашей панели инструментов на версию вашего сервера culster.
Кластерная площадка автора — k3s/k3d, поэтому версия API следующая
$ k3d version
k3s version v1.22.7-k3s1 (default)
Другой (и более распространенный) подход:
$ kubectl version --short
Server Version: v1.22.7+k3s1
🥁 Давайте теперь выполним процедуру сканирования с помощью Datree.
$ kubectl datree test -s "1.22.7" -- service my-release-drupal
(Summary)
- Passing YAML validation: 1/1
- Passing Kubernetes (1.22.7) schema validation: 1/1
- Passing policy check: 1/1
+-----------------------------------+-----------------------+
| Enabled rules in policy "Default" | 21 |
| Configs tested against policy | 1 |
| Total rules evaluated | 21 |
| Total rules skipped | 0 |
| Total rules failed | 0 |
| Total rules passed | 21 |
| See all rules in policy | https://app.datree.io |
+-----------------------------------+-----------------------+
The following cluster resources in namespace 'default' were checked:
service/my-release-drupal
Вы можете увидеть очень похожий отчет на приборной панели Datree SaaS:
Если ни одно правило не нарушено, то вы получаете зеленую отметку! Отличная работа.
плагин helm
Этот плагин используется для проверки графиков на соответствие политике Datree. Указанный плагин можно установить с помощью команды:
helm plugin install https://github.com/datreeio/helm-datree
Чтобы запустить проверку политики Datree на графиках Helm, выполните команду со следующим синтаксисом.
helm datree test [CHART_DIRECTORY]
Если вам нужно передать аргументы в шаблон, добавьте перед ними --
, как показано ниже:
helm datree test [CHART_DIRECTORY] -- --values values.yaml --set name=prod
Интеграция CI
Чтобы интегрировать Datree в CI/CD, вы можете следовать приведенному ниже примеру. Вам необходимо выполнить следующие шаги:
- Получить токен своей учетной записи (его можно найти в Настройках приборной панели).
- Установите
DATREE_TOKEN
как секретную переменную/переменную окружения. - Добавьте Datree в ваш поток CI с помощью токена, как показано на рисунке (т.е. для GitHub).
🖼️ Более крупное изображение находится здесь. Вот пример вовлекающего действия:
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
env:
DATREE_TOKEN: ${{ secrets.DATREE_TOKEN }}
jobs:
k8sPolicyCheck:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Run Datree Policy Check
uses: datreeio/action-datree@main
with:
path: '**/*.yaml'
cliArguments: '--only-k8s-files'
Вместо заключения
Эта небольшая статья об использовании Datree для выполнения проверки безопасности диаграмм Helm и манифестов Kubernetes завершена. Автор надеется, что читатели согласятся с тем, что Datree можно использовать для предотвращения проблем с конфигурацией в Kubernetes, которые могут привести к отказу производственного кластера.
Желаю вам чистых YAML и зеленых отметок, друзья! ✅
Автор выражает искреннюю благодарность Noaa 🐦@BarkiNoaa Barki, Eyar 🐦@eyarzilb Zilberman, Anais 🐦@urlichsanais Urlich и Scott 🐦@chiefmartec Brinker.