gitops-drift-agent
GitOps Drift Remediation Agent
Промышленный автономный агент, который подключается к кластерам 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 |
| Нет | current-context | Контекст Kubernetes |
| Нет | — | URL репозитория GitOps для режима PR |
| Нет |
| Целевая ветка для PR |
| Нет | — | Токен Git-провайдера (GitHub/GitLab) |
| Нет |
| Путь к конфигурации политик восстановления |
| Нет |
| Путь к файлу журнала аудита |
| Нет |
| Уровень журналирования (info/warn/error) |
| Нет |
| Глобальный режим dry-run |
| Нет |
| HTTP-порт MCP-сервера |
| Нет |
| Фильтр пространств имён через запятую |
Использование
Команды 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:serverMCP-инструменты
Инструмент | Описание |
| Обнаружение дрейфа для ресурса или пространства имён |
| Список активных политик восстановления |
| Оценка политики для заданного дрейфа |
| Применение стратегии восстановления |
| Получение журнала аудита по ресурсу или пространству имён |
| Откат применённого восстановления |
Конфигурация 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 и операций файловой системы.
Вопросы безопасности
Принцип наименьших привилегий: агенту требуются только разрешения
get,list,watchиpatchна целевые ресурсы — никогдаcreateилиdeleteDry-run по умолчанию: все уровни политик по умолчанию работают в режиме dry-run, пока не будут явно включены
Немутируемость аудита: журналы аудита доступны только для добавления; ротация журналов выполняется внешними средствами
Маскирование секретов: значения секретных ресурсов всегда маскируются в журналах и PR
Изоляция конфигурации: агент никогда не изменяет файл kubeconfig
Аудит изменений политик: каждое изменение политики регистрируется с полной трассировкой
Проверка подлинности артефактов: все артефакты восстановления подписываются и проверяются перед применением
Участие в разработке
См. CONTRIBUTING.md. Все изменения должны включать:
Тесты для новых функций или исправлений
Обновлённую документацию
Записи в журнале изменений
Соблюдение стиля кода проекта
Лицензия
Apache 2.0 — см. LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
One MCP endpoint for your company's tools, with per-person sign-in, policy and audit.
Authenticated MCP server for ClearPolicy policy and compliance workflows.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides 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.151MIT
- AlicenseNot gradedqualityCmaintenanceMCP server to lint and validate Kubernetes-related manifests(Helm, FluxCD, ArgoCD, Kustomize, etc.)59 PyPIMIT
- AlicenseCqualityBmaintenanceA 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.18MIT
- AlicenseNot gradedqualityCmaintenanceProvides MCP tools for fetching GitHub PR diffs, searching codebases, running unit tests, and linting code, enabling automated code review and CI/CD workflows.MIT