Skip to main content
Glama

GitOps Drift Remediation Agent

License: Apache 2.0 Node.js Version TypeScript

Промышленный автономный агент, который подключается к кластерам Kubernetes и репозиториям GitOps, выявляет несанкционированный дрейф состояния, формирует безопасные стратегии восстановления и выполняет автоматические API-патчи или Pull Request'ы.


Содержание


Related MCP server: kube-lint-mcp

Обзор

GitOps Drift Remediation Agent — это автономная платформа, управляемая политиками, которая непрерывно сравнивает фактическое состояние ресурсов Kubernetes с декларируемым в GitOps источником истины. При обнаружении дрейфа агент оценивает применимые политики восстановления, вычисляет минимальные операции JSON Patch и либо применяет их напрямую через Kubernetes API, либо открывает Pull Request'ы в GitOps-репозиторий — всё с полным журналом аудита.

Ключевые принципы

  • Минимальный радиус поражения: патчи вычисляются как наименьший возможный diff, никогда не заменяя ресурсы целиком

  • Приоритет политик: каждое действие по восстановлению контролируется настраиваемыми версионируемыми политиками с уровнями риска

  • Неизменяемый журнал аудита: каждое решение, обнаружение и изменение фиксируется с криптографическим контекстом

  • Нативный GitOps: сам агент управляется через GitOps и отправляет PR обратно в репозиторий

  • Готовность к MCP: все возможности доступны как MCP-инструменты для интеграции с LLM-агентами


Архитектура

┌─────────────────────────────────────────────────────────────────────┐
│                    GitOps Drift Remediation Agent                   │
│                                                                     │
│  ┌─────────────┐    ┌──────────────┐    ┌────────────────────────┐ │
│  │  AST Differ │───▶│ Policy Engine│───▶│    Patch Engine        │ │
│  │             │    │              │    │                        │ │
│  │ • Deep diff │    │ • Risk tiers │    │ • JSON Patch RFC 6902  │ │
│  │ • Field     │    │ • Allow/deny │    │ • K8s API apply        │ │
│  │   tracking  │    │ • Dry-run    │    │ • PR generation        │ │
│  │ • Severity  │    │ • Approvals  │    │ • Rollback support     │ │
│  └─────────────┘    └──────────────┘    └────────────────────────┘ │
│         │                  │                       │                │
│         └──────────────────┴───────────────────────┘                │
│                            │                                        │
│                   ┌────────▼────────┐                               │
│                   │  Audit Logger   │                               │
│                   │                 │                               │
│                   │ • Structured    │                               │
│                   │   JSON logs     │                               │
│                   │ • Event chain   │                               │
│                   │ • Pino backend  │                               │
│                   └─────────────────┘                               │
│                                                                     │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │                      MCP Server                              │  │
│  │  detect_drift │ list_policies │ remediate │ get_audit_trail  │  │
│  └──────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────┘
         │                                          │
         ▼                                          ▼
  ┌─────────────┐                          ┌───────────────┐
  │  Kubernetes │                          │  GitOps Repo  │
  │  Cluster(s) │                          │  (Git/GitHub) │
  └─────────────┘                          └───────────────┘

Возможности

Функция

Описание

Обнаружение дрейфа

Глубокое AST-сравнение фактического и декларируемого состояния ресурсов Kubernetes

Классификация рисков

Автоматическая оценка критичности (критический / высокий / средний / низкий) для каждого пути поля

Механизм политик

Декларативные версионируемые политики с правилами allow/deny, режимом dry-run и шлюзами утверждения

Механизм патчей

Вычисление JSON Patch по RFC 6902 с поддержкой server-side apply в K8s

GitOps PR

Автоматическая генерация Pull Request'ов с diff-ом дрейфа и обоснованием восстановления

Журнал аудита

Неизменяемые структурированные журналы аудита с полными цепочками решений

MCP-сервер

Все возможности агента доступны как MCP-инструменты для оркестрации ИИ-агентами

CLI

Полнофункциональный CLI для интерактивной и автоматизированной работы


Установка

Предварительные требования

  • Node.js >= 20.0.0

  • kubectl с настроенным доступом к целевому кластеру

  • Учётные данные Git для GitOps-репозитория (для режима PR)

Установка из исходного кода

git clone https://github.com/your-org/gitops-drift-remediation-agent.git
cd gitops-drift-remediation-agent
npm install
npm run build
npm link   # optional: makes `drift-agent` available globally

Конфигурация

Вся конфигурация передаётся через переменные окружения или файл конфигурации.

Переменные окружения

Переменная

Обязательная

По умолчанию

Описание

KUBECONFIG

Нет

~/.kube/config

Путь к файлу kubeconfig

KUBECONTEXT

Нет

current-context

Контекст Kubernetes

GITOPS_REPO_URL

Нет

—

URL репозитория GitOps для режима PR

GITOPS_BRANCH

Нет

main

Целевая ветка для PR

GITOPS_TOKEN

Нет

—

Токен Git-провайдера (GitHub/GitLab)

POLICY_CONFIG_PATH

Нет

./policies.yaml

Путь к конфигурации политик восстановления

AUDIT_LOG_PATH

Нет

./audit.log

Путь к файлу журнала аудита

AUDIT_LOG_LEVEL

Нет

info

Уровень журналирования (info/warn/error)

DRY_RUN

Нет

false

Глобальный режим dry-run

MCP_PORT

Нет

3000

HTTP-порт MCP-сервера

NAMESPACE_FILTER

Нет

*

Фильтр пространств имён через запятую


Использование

Команды CLI

# Detect drift across all namespaces
drift-agent detect --namespace production --output json

# Detect and auto-remediate with policy gate
drift-agent remediate --namespace production --policy strict --dry-run

# List active policies
drift-agent policy list

# Show audit trail for a resource
drift-agent audit --resource deployments/my-app --namespace production

# Start MCP server
drift-agent mcp-server --port 3000

Программный API

import { AstDiffer } from './src/detector/ast-differ';
import { RemediationPolicy } from './src/policy/remediation-policy';
import { PatchEngine } from './src/remediator/patch-engine';

const differ = new AstDiffer();
const drifts = await differ.detectDrift(liveResource, desiredResource);

const policy = new RemediationPolicy(policyConfig);
const decision = await policy.evaluate(drifts, resourceContext);

if (decision.approved) {
  const engine = new PatchEngine(k8sClient);
  await engine.applyRemediation(decision.patches, resourceRef);
}

MCP-сервер

Агент предоставляет MCP (Model Context Protocol) сервер, который открывает все возможности агента в виде инструментов для LLM-агентов.

Запуск сервера

drift-agent mcp-server --port 3000
# or
npm run mcp:server

MCP-инструменты

Инструмент

Описание

detect_drift

Обнаружение дрейфа для ресурса или пространства имён

list_policies

Список активных политик восстановления

evaluate_policy

Оценка политики для заданного дрейфа

apply_remediation

Применение стратегии восстановления

get_audit_trail

Получение журнала аудита по ресурсу или пространству имён

rollback_remediation

Откат применённого восстановления

Конфигурация MCP-клиента

{
  "mcpServers": {
    "gitops-drift-agent": {
      "url": "http://localhost:3000/mcp",
      "transport": "http"
    }
  }
}

Механизм политик

Политики определяются декларативно и управляют всем жизненным циклом восстановления.

Структура политики

apiVersion: drift.gitops.io/v1
kind: RemediationPolicy
metadata:
  name: production-strict
spec:
  riskTier: high
  autoRemediate: false
  requireApproval: true
  dryRunFirst: true
  rules:
    - field: "spec.replicas"
      action: restore
      severity: high
    - field: "spec.template.spec.containers[*].image"
      action: block
      severity: critical
  excludeFields:
    - "metadata.annotations['kubectl.kubernetes.io/last-applied-configuration']"
    - "metadata.resourceVersion"
    - "metadata.uid"

Аудит и телеметрия

Каждое действие агента записывается в структурированном виде:

{
  "timestamp": "2024-06-01T12:00:00.000Z",
  "eventId": "evt_01J0ABC123",
  "eventType": "DRIFT_DETECTED",
  "severity": "high",
  "resource": {
    "kind": "Deployment",
    "name": "my-app",
    "namespace": "production",
    "apiVersion": "apps/v1"
  },
  "drift": {
    "field": "spec.replicas",
    "desired": 3,
    "live": 1,
    "changeType": "edited"
  },
  "policy": {
    "name": "production-strict",
    "decision": "remediate",
    "riskTier": "high"
  },
  "actor": {
    "agentVersion": "1.0.0",
    "kubeContext": "prod-cluster"
  }
}

Разработка

# Install dependencies
npm install

# Run in development mode (ts-node)
npm run dev -- detect --namespace default

# Type check only
npm run typecheck

# Lint
npm run lint

# Format
npm run format

# Build
npm run build

Тестирование

# Run all tests
npm test

# Run with coverage
npm run test:coverage

# Run in watch mode
npm run test:watch

Тесты организованы в каталоге tests/ и используют Jest с ts-jest. Предоставлены моки для клиента Kubernetes и операций файловой системы.


Вопросы безопасности

  1. Принцип наименьших привилегий: агенту требуются только разрешения get, list, watch и patch на целевые ресурсы — никогда create или delete

  2. Dry-run по умолчанию: все уровни политик по умолчанию работают в режиме dry-run, пока не будут явно включены

  3. Немутируемость аудита: журналы аудита доступны только для добавления; ротация журналов выполняется внешними средствами

  4. Маскирование секретов: значения секретных ресурсов всегда маскируются в журналах и PR

  5. Изоляция конфигурации: агент никогда не изменяет файл kubeconfig

  6. Аудит изменений политик: каждое изменение политики регистрируется с полной трассировкой

  7. Проверка подлинности артефактов: все артефакты восстановления подписываются и проверяются перед применением


Участие в разработке

См. CONTRIBUTING.md. Все изменения должны включать:

  • Тесты для новых функций или исправлений

  • Обновлённую документацию

  • Записи в журнале изменений

  • Соблюдение стиля кода проекта


Лицензия

Apache 2.0 — см. LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides MCP multi-cluster Kubernetes management and operations. It can be integrated as an SDK into your own project and includes nearly 50 built-in tools covering common DevOps and development scenarios. Supports both standard and CRD resources.
    151
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    A policy-aware MCP server for GitHub and GitHub Actions that enables safe AI-assisted infrastructure workflows—inspecting repositories, preparing branches and pull requests, and constrained remote mutations behind explicit preview-bound approval tokens.
    18
    MIT