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

Как использовать Datree, чтобы избежать неправильных конфигураций Kubernetes


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

Datree — это основанный на правилах инструмент, который автоматически находит проблемы в ваших манифестах. Вы можете использовать его для выявления нарушений политик, не покидая терминала, что обеспечивает последовательный подход к настройке Kubernetes.

В этой статье вы узнаете, как использовать интерфейс командной строки Datree для выполнения сканирования манифеста по требованию. Это бесплатный инструмент с открытым исходным кодом, но он поддерживается онлайн-панелью управления, которая позволяет вам централизованно управлять политиками, общими для всей вашей команды. Это бесплатно для отдельных лиц, взаимодействующих с двумя узлами, в то время как групповые планы начинаются с 95 долларов США в месяц с базовым допуском к пяти узлам.

Установка интерфейса командной строки Datree

Сначала загрузите и настройте интерфейс командной строки Datree с помощью сценария установки. Это работает на Linux и Mac:

$ curl https://get.datree.io | /bin/bash

Альтернативные инструкции по установке доступны в документации, если вы используете Windows или хотите запустить Datree как контейнер Docker.

Проверьте правильность установки CLI, выполнив команду datree без каких-либо аргументов:

$ datree
Datree is a static code analysis tool for kubernetes files. Full code can be found at https://github.com/datreeio/datree
...

Теперь вы можете приступить к сканированию манифестов на наличие ошибок.

Выполнение проверки политики

Скопируйте следующий YAML и сохраните его как datree-demo.yaml в своем рабочем каталоге:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-deployment
  namespace: demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo-app
  template:
    metadata:
      namespace: demo-deployment
      labels:
        app: demo-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          readinessProbe:
            tcpSocket:
              port: 8080
          resources:
            requests:
              memory: "256Mi"
              cpu: "100m"
            limits:
              cpu: "500m"
          ports:
            - containerPort: 80

Этот YAML определяет допустимый объект развертывания Kubernetes. Kubectl применит его к вашему кластеру, не сообщая об ошибках:

$ kubectl apply -f datree-demo.yaml
deployment/demo-deployment created

Однако с этой конфигурацией могут быть проблемы. Запуск интерфейса командной строки Datree откроет их. Используйте команду datree test для завершения анализа вашего манифеста:

$ datree test datree-demo.yaml
>> File: datree-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: demo-deployment (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: demo-deployment (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: demo-deployment (kind: Deployment)
💡  Missing property object `limits.memory` - value should be within the accepted boundaries recommended by the organization

(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                | 3   |
| Total rules passed                | 18  |
+-----------------------------------+-----+

Datree обнаружила три нарушения политики, которые могут повлиять на ваш кластер.

Интерпретация результатов сканирования

Сканирование Datree рассматривает три аспекта каждого манифеста:

  • Проверка YAML. Первая проверка подтверждает правильность вашего YAML. Дальнейшие проверки не выполняются, если в файле YAML есть синтаксические ошибки.
  • Проверка схемы Kubernetes – проверяет, содержит ли манифест допустимый объект Kubernetes. Распространенными причинами этих ошибок являются недопустимые значения полей и неправильная вложенность объектов.
  • Проверки политик. Здесь Datree проверяет допустимую схему объекта Kubernetes на наличие распространенных неправильных конфигураций. Политики выявляют потенциальные проблемы и отсутствующие оптимизации, чтобы вы могли повысить отказоустойчивость кластера Kubernetes.

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

Исправление ошибок примера манифеста

Сканирование примера манифеста выявило три ошибки: поле контейнера image не использует закрепленный тег, отсутствует livenessProbe и нет ограничения по памяти.

Первую проблему можно решить, используя явную версию образа, такую как nginx:1.23. Последний тег опасен, потому что вы можете непреднамеренно получить критические изменения, такие как 1.23 на 2.1.

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

Добавьте новое поле livenessProbe над полем readinessProbe:

livenessProbe:
  tcpSocket:
    port: 8080

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

Пересмотренный YAML должен выглядеть так:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-deployment
  namespace: demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo-app
  template:
    metadata:
      namespace: demo-deployment
      labels:
        app: demo-app
    spec:
      containers:
        - name: nginx
          image: nginx:1.23  
          livenessProbe:
            tcpSocket:
              port: 8080
          readinessProbe:
            tcpSocket:
              port: 8080
          resources:
            requests:
              memory: "256Mi"
              cpu: "100m"
            limits:
              memory: "512Mi"
              cpu: "500m"
          ports:
            - containerPort: 80

Повторите команду datree test, чтобы убедиться, что ваше развертывание теперь проходит проверку политики:

$ datree test datree-demo.yaml
(Summary)

- Passing YAML validation: 1/1

- Passing Kubernetes (1.20.0) schema validation: 1/1

- Passing policy check: 1/1

Настройка правил

Используемый до сих пор пример основан на встроенном наборе политик Datree по умолчанию. Они охватывают множество лучших практик Kubernetes, таких как настройка зондов, использование ограничений ресурсов и отказ от устаревших API.

Вы можете настроить политики, связав интерфейс командной строки Datree с вашей онлайн-панелью. Здесь вы можете отключить политики, которые вам не нужны, и активировать новые настраиваемые правила для реализации процедур вашей организации.

Самый простой способ войти в Datree — перейти по ссылке, показанной в конце выходных данных интерфейса командной строки Datree:

| See all rules in policy           | https://app.datree.io/login?t=bbY... |

CLI автоматически создает уникальный токен для вашей учетной записи. Щелкните ссылку, а затем войдите в Datree с помощью GitHub или Google.

Вы попадете на панель управления политиками, где показаны все политики, активные для вашей учетной записи. Нажмите кнопки-переключатели в столбце «Статус», чтобы включить или удалить политики. Ваши изменения будут немедленно применены к новым сканированиям. Интерфейс командной строки автоматически загружает список политик перед запуском каждого теста.

Панель инструментов также предоставляет историю выполненных вами сканирований. Щелкните вкладку «История» на левой боковой панели, чтобы получить предыдущие результаты сканирования.

Сканирование с определенной политикой

Datree в настоящее время имеет 60 встроенных правил, которые обеспечивают индивидуальные тесты. Правила объединяются в группы, называемые политиками. Политика по умолчанию используется автоматически. Он включает 21 из 60 правил. Datree также поставляется с предварительно настроенными политиками для конфигураций Argo и NSA Kubernetes.

Вы можете создать свою собственную политику с помощью синей кнопки «Создать политику» на онлайн-панели управления. Дайте вашей политике имя и включите одно или несколько правил.

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

$ datree test --policy NSA datree-demo.yaml

Datree также позволяет вам реализовывать пользовательские тесты, добавляя совершенно новые правила. Хотя создание правил выходит за рамки этого руководства по началу работы, вы можете указать, что развертывания должны иметь определенные метки, минимальное количество реплик и использовать образы из утвержденного реестра. Правила определяются как JSON или YAML с использованием логики схемы JSON.

Сканирование нескольких файлов

Команда datree test принимает путь к файлу или универсальный шаблон. Вы можете сканировать каталог манифестов, используя следующий синтаксис:

datree test demo-dir/*.yaml

Любые недопустимые файлы, соответствующие вашему глобусу, будут отображаться как не прошедшие проверку проверки Datree YAML.

Аутентификация других экземпляров CLI

Интерфейс командной строки Datree подключается к вашей учетной записи с помощью токена аутентификации. Новый токен создается автоматически при установке CLI. Он создает новую учетную запись при первом использовании.

Вам нужно будет вручную указать существующий токен аутентификации, если вы устанавливаете Datree на другом компьютере. Вы можете получить значение из поля token в файле ~/.datree/config.yaml. Либо перейдите на онлайн-панель, щелкните изображение своего профиля в правом верхнем углу, выберите «Настройки» в меню и перейдите на вкладку «Управление токенами».

Вернувшись в новый экземпляр CLI, используйте следующую команду, чтобы добавить свой токен:

$ datree config set token <TOKEN_VALUE>

CLI теперь будет использовать политики, настроенные в вашей учетной записи. Сканы также начнут отображаться на экране истории.

Использование Datree без доступа к учетной записи

Вы можете отключить функции подключения к учетной записи Datree CLI, если вас устраивает набор правил по умолчанию и вы не хотите, чтобы сканирование связывалось с серверами Datree:

$ datree config set offline local

Это также удаляет поддержку проверки схемы Kubernetes.

Вы можете отключить отображение отдельных сканирований на странице истории вашей учетной записи, установив флаг --no-record в интерфейсе командной строки.

$ datree test datree-demo.yaml --no-record

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

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

Datree также доступен в качестве веб-перехватчика доступа Kubernetes, который будет активно блокировать несоответствующие ресурсы. Веб-перехватчики допуска отвечают за принятие решения о том, можно ли добавлять новые объекты в кластер; Datree отклонит любые объекты, которые не пройдут проверку вашей политики. Настройка веб-перехватчика обеспечивает абсолютную уверенность в том, что неправильно настроенные ресурсы не могут быть использованы, даже если пользователь вручную применит манифест с помощью Kubectl.




Все права защищены. © Linux-Console.net • 2019-2024