Kubernetes Operator
Декларативное управление политиками безопасности FlowLink в Kubernetes кластере.
standalone binary kube-rs + CRD + AdmissionWebhook
Архитектура
FlowLinkShieldPolicy (CRD) → ShieldOperator → reconciliation loop
↓
AdmissionWebhook (mutating + validating)
├── ValidatingWebhook → deny violations
└── MutatingWebhook → inject ShieldSidecar
↓
ShieldSidecar (container)
connects to FlowLink RelayCRD: FlowLinkShieldPolicy
apiVersion: shield.flowlink.ai/v1alpha1
kind: FlowLinkShieldPolicy
metadata:
name: production-shield
namespace: default
spec:
mode: enforce # monitor | enforce
enabled: true
rules:
- name: block-destructive
action: deny
patterns:
- "rm -rf *"
- "DROP TABLE"
- "chmod 777"
- name: require-approval
action: approval
patterns:
- "kubectl delete"
- "helm uninstall"
sidecar_image: "flowlink/flowlink-shield:latest"
relay_url: "https://flowlink.flow-masters.ru"
watch_namespaces: ["default", "production"]Деплой
# 1. Apply CRD kubectl apply -f config/crd.yaml # 2. Create policy kubectl apply -f config/policy.yaml # 3. Build operator cargo build --release -p flowlink-k8s # 4. Run operator (connects to relay) ./flowlink-k8s --relay-url https://flowlink.flow-masters.ru/api/v1 # Or via Helm (coming soon) helm install flowlink-operator ./charts/flowlink-operator \ --set relay.url=https://flowlink.flow-masters.ru
Компоненты
ShieldOperator
Reconciliation loop: watches FlowLinkShieldPolicy CRDs, сравнивает spec vs status, синхронизирует состояние.
AdmissionWebhook
Validating (deny violations) + Mutating (inject sidecar). Работает на уровне API server — блокирует до создания Pod.
ShieldSidecar
Injected container с flowlink-shield. Подключается к relay, применяет политики к контейнеру.
Relay Reporting
Operator отправляет reconciliation events в relay audit endpoint. Полная видимость из FlowLink Dashboard.
Статус
⚠️ Draft — не тестирован в production кластере
Код реальный (5K строк Rust, 76 тестов), использует kube 0.93 + k8s-openapi. Требует E2E тестирования в реальном кластере перед production использованием.