Cercetătorii în securitate au găsit peste 135.000 de instanțe OpenClaw complet expuse pe internet. Multe dintre ele erau vulnerabile la execuția de cod la distanță. Criza de securitate OpenClaw este reală: CVE-uri critice, skill-uri malițioase și o problemă fundamentală în modul în care majoritatea implementărilor gestionează autentificarea. Rularea OpenClaw pe un VPS cu docker run este simplă. Rularea în siguranță este o cu totul altă problemă.

Kubernetes rezolvă această problemă. Obțineți izolare de rețea, limite de resurse, reporniri automate și setări de securitate care ar necesita ore pentru configurare manuală. Iar cu Operatorul Kubernetes OpenClaw, obțineți totul dintr-un singur fișier YAML.

Acest ghid vă conduce de la zero la un agent OpenClaw gata de producție pe Kubernetes. Fiecare bloc YAML este gata de copiat și lipit.

De ce un operator

Rularea OpenClaw pe Kubernetes înseamnă mai mult decât un Deployment și un Service. Aveți nevoie de izolare de rețea, gestionarea Secretelor, stocare persistentă, monitorizarea sănătății, rollout-uri de configurare și, opțional, automatizarea browserului. Configurarea corectă a tuturor acestora manual este laborioasă și predispusă la erori.

Un operator Kubernetes codifică aceste cerințe într-un singur Custom Resource. Declarați ce doriți, iar operatorul îl reconciliază continuu cu obiectele Kubernetes corecte. Aceasta vă oferă:

  • Securitate implicită. Fiecare agent rulează ca UID 1000, toate capabilitățile Linux eliminate, Seccomp activat, sistem de fișiere root doar-citire și o NetworkPolicy deny-by-default care permite doar egress DNS și HTTPS. Fără hardening manual.
  • Actualizări automate cu rollback. Operatorul interoghează registrul OCI pentru versiuni noi, face backup la workspace, lansează actualizarea și face rollback automat dacă noul pod nu trece health check-urile.
  • Rollout-uri de configurare. Modificați spec.config.raw și operatorul detectează că hash-ul conținutului s-a schimbat, declanșând o actualizare progresivă. La fel pentru rotația secretelor.
  • Backup și restaurare. Backup automat al workspace-ului pe stocare compatibilă S3 la ștergerea instanței. Restaurare într-o instanță nouă din orice snapshot.
  • Autentificare gateway. Generează automat un token gateway per instanță. Fără împerechere manuală, fără mDNS (care oricum nu funcționează în Kubernetes).
  • Detectarea derivei. La fiecare 5 minute, operatorul verifică dacă fiecare resursă gestionată corespunde stării dorite. Dacă cineva editează manual o NetworkPolicy sau șterge un PDB, aceasta este reconciliată înapoi.

Cerințe preliminare

Aveți nevoie de:

  • Un cluster Kubernetes (1.28+). Orice distribuție conformă funcționează: EKS, GKE, AKS, k3s sau un cluster Kind local pentru teste.
  • kubectl configurat pentru clusterul dumneavoastră.
  • helm v3 instalat.
  • O cheie API de la furnizorul AI (Anthropic, OpenAI sau orice endpoint compatibil OpenAI).

Pasul 1: Instalarea operatorului

Operatorul este livrat ca un chart Helm OCI. O singură comandă îl instalează:

helm install openclaw-operator \
  oci://ghcr.io/openclaw-rocks/charts/openclaw-operator \
  --namespace openclaw-operator-system \
  --create-namespace

Verificați că rulează:

kubectl get pods -n openclaw-operator-system

Ar trebui să vedeți pod-ul operatorului în starea Running. Operatorul instalează de asemenea un webhook de validare care previne configurările nesigure (cum ar fi rularea ca root).

Pasul 2: Crearea Secretului cu cheia API

Stocați cheia API a furnizorului AI într-un Secret Kubernetes. Operatorul o va injecta în containerul agentului:

kubectl create namespace openclaw

kubectl create secret generic openclaw-api-keys \
  --namespace openclaw \
  --from-literal=ANTHROPIC_API_KEY=sk-ant-your-key-here

Pentru OpenAI sau alți furnizori, folosiți numele de variabilă de mediu corespunzător (OPENAI_API_KEY, OPENROUTER_API_KEY etc.). Puteți include mai mulți furnizori în același Secret.

Sfat: Pentru producție, luați în considerare utilizarea External Secrets Operator pentru sincronizarea cheilor din AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager sau Azure Key Vault. Documentația operatorului conține exemple detaliate.

Pasul 3: Implementarea primului agent

Creați un fișier numit my-agent.yaml:

apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
  name: my-agent
  namespace: openclaw
spec:
  envFrom:
    - secretRef:
        name: openclaw-api-keys
  config:
    raw:
      agents:
        defaults:
          model:
            primary: "anthropic/claude-sonnet-4-20250514"
  storage:
    persistence:
      enabled: true
      size: 10Gi

Aplicați-l:

kubectl apply -f my-agent.yaml

Această singură resursă creează un StatefulSet, un Service, un ServiceAccount, un Role, un RoleBinding, o ConfigMap, un PVC, un PDB, o NetworkPolicy și un Secret pentru tokenul gateway. Operatorul reconciliază totul.

Pasul 4: Verificarea funcționării

Urmăriți pornirea instanței:

kubectl get openclawinstances -n openclaw -w
NAME       PHASE        READY   AGE
my-agent   Provisioning False   10s
my-agent   Running      True    45s

Odată ce faza arată Running și Ready este True, agentul este activ. Verificați logurile:

kubectl logs -n openclaw statefulset/my-agent -f

Pentru a interacționa cu agentul, faceți port-forward la gateway:

kubectl port-forward -n openclaw svc/my-agent 18789:18789

Apoi deschideți http://localhost:18789 în browser.

Pasul 5: Conectarea unui canal

OpenClaw suportă Telegram, Discord, WhatsApp, Signal și alte canale de mesagerie. Fiecare canal este configurat prin variabile de mediu. Adăugați tokenul relevant la Secretul dumneavoastră:

kubectl create secret generic openclaw-channel-keys \
  --namespace openclaw \
  --from-literal=TELEGRAM_BOT_TOKEN=your-bot-token-here

Apoi referențiați-l în instanță:

spec:
  envFrom:
    - secretRef:
        name: openclaw-api-keys
    - secretRef:
        name: openclaw-channel-keys

OpenClaw detectează automat tokenul și activează canalul. Nu este necesară configurare suplimentară.


Aceasta acoperă elementele de bază. Agentul rulează, este securizat și accesibil. Restul acestui ghid acoperă funcționalități opționale pe care le puteți activa când sunteți gata.

Automatizarea browserului

OpenClaw poate naviga pe web, face capturi de ecran și interacționa cu paginile. Operatorul transformă aceasta într-o adăugare de o singură linie. Rulează un sidecar Chromium securizat în același pod, conectat prin localhost:

spec:
  chromium:
    enabled: true
    resources:
      requests:
        cpu: 500m
        memory: 1Gi
      limits:
        cpu: 1000m
        memory: 2Gi

Operatorul injectează automat o variabilă de mediu CHROMIUM_URL în containerul principal. Sidecar-ul rulează ca UID 1001 cu un sistem de fișiere root doar-citire și propriul context de securitate.

Skill-uri și dependențe de runtime

Skill-urile OpenClaw de pe ClawHub pot fi instalate declarativ. Operatorul rulează un init container care descarcă fiecare skill înainte de pornirea agentului:

spec:
  skills:
    - "@anthropic/mcp-server-fetch"
    - "@anthropic/mcp-server-filesystem"

Dacă skill-urile sau serverele MCP necesită pnpm sau Python, activați init container-ele încorporate pentru dependențe de runtime:

spec:
  runtimeDeps:
    pnpm: true    # Installs pnpm via corepack
    python: true  # Installs Python 3.12 + uv

Init container-ele instalează aceste instrumente pe PVC-ul de date, astfel încât persistă între reporniri fără a umfla imaginea containerului.

Actualizări automate

OpenClaw lansează versiuni noi frecvent. Operatorul le poate urmări automat, face backup înainte de actualizare și reveni dacă ceva nu merge bine:

spec:
  autoUpdate:
    enabled: true
    checkInterval: "12h"
    backupBeforeUpdate: true
    rollbackOnFailure: true
    healthCheckTimeout: "10m"

Când o versiune nouă apare în registru, operatorul:

  1. Creează un backup al PVC-ului workspace pe stocare compatibilă S3
  2. Actualizează tag-ul imaginii pe StatefulSet
  3. Așteaptă până la healthCheckTimeout ca pod-ul să treacă verificările de disponibilitate
  4. Dacă pod-ul nu devine ready, restaurează tag-ul imaginii anterioare și backup-ul

După 3 rollback-uri eșuate consecutive, operatorul pune în pauză actualizările automate și setează o condiție pentru investigare.

Notă: Actualizarea automată nu are efect pentru imaginile fixate pe digest (spec.image.digest). Dacă fixați pe digest, controlați actualizările manual.

Securizare pentru producție

Operatorul vine securizat implicit. Iată controalele suplimentare pentru implementările de producție.

Monitorizare cu Prometheus

Activați ServiceMonitor pentru colectarea metricilor operatorului și instanțelor:

spec:
  observability:
    metrics:
      enabled: true
      serviceMonitor:
        enabled: true
        interval: "30s"

Operatorul expune openclaw_reconcile_total, openclaw_reconcile_duration_seconds, openclaw_instance_phase și contoare de actualizări automate.

Planificare pe noduri dedicate

Dacă rulați un cluster mixt, folosiți nodeSelector și tolerations pentru a fixa agenții pe noduri dedicate:

spec:
  availability:
    nodeSelector:
      openclaw.rocks/nodepool: openclaw
    tolerations:
      - key: openclaw.rocks/dedicated
        value: openclaw
        effect: NoSchedule

Adăugarea de reguli egress personalizate

NetworkPolicy-ul implicit permite doar DNS (portul 53) și HTTPS (portul 443). Dacă agentul trebuie să acceseze alte servicii (o bază de date, o coadă de mesaje, un API intern), adăugați reguli egress:

spec:
  security:
    networkPolicy:
      additionalEgress:
        - to:
            - ipBlock:
                cidr: 10.0.0.0/8
          ports:
            - port: 5432
              protocol: TCP

Identitatea furnizorului cloud

Pentru AWS IRSA sau GCP Workload Identity, adnotați ServiceAccount-ul gestionat:

spec:
  security:
    rbac:
      serviceAccountAnnotations:
        eks.amazonaws.com/role-arn: "arn:aws:iam::123456789:role/openclaw"

Proxy-uri corporative și CA-uri private

Dacă clusterul folosește un proxy care interceptează TLS, injectați un pachet CA:

spec:
  security:
    caBundle:
      configMapName: corporate-ca-bundle
      key: ca-bundle.crt

Operatorul montează pachetul CA în toate containerele și setează NODE_EXTRA_CA_CERTS automat.

GitOps

CRD-ul OpenClawInstance este un simplu fișier YAML. Aceasta înseamnă că se integrează direct într-un workflow GitOps. Stocați manifestele agenților într-un depozit git și lăsați ArgoCD sau Flux să le sincronizeze cu clusterul.

O structură tipică de depozit:

gitops/
└── agents/
    ├── kustomization.yaml
    ├── namespace.yaml
    ├── agent-a.yaml
    └── agent-b.yaml

Fiecare modificare trece printr-un pull request. Echipa examinează diff-ul. Merge pe main, și ArgoCD îl aplică. Fără kubectl apply de pe laptopuri, fără derivă de configurare, audit trail complet.

Hashing-ul de configurare al operatorului face acest lucru deosebit de fluid. Când ArgoCD sincronizează o spec.config.raw modificată, operatorul detectează că hash-ul conținutului s-a schimbat și declanșează automat o actualizare progresivă. La fel pentru rotația secretelor: operatorul monitorizează Secretele referențiate și repornește pod-urile când se schimbă.

Backup și restaurare

Operatorul suportă backup-uri compatibile S3. Când ștergeți o instanță, operatorul creează automat un backup al PVC-ului workspace înainte de ștergere.

Pentru a restaura un agent dintr-un backup într-o instanță nouă:

apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
  name: my-agent-restored
  namespace: openclaw
spec:
  restoreFrom: "s3://bucket/path/to/backup.tar.gz"
  envFrom:
    - secretRef:
        name: openclaw-api-keys
  storage:
    persistence:
      enabled: true
      size: 10Gi

Operatorul descarcă snapshot-ul, îl decomprimă în PVC și pornește agentul cu toate datele anterioare ale workspace-ului, skill-urile și istoricul conversațiilor intacte.

Inferență locală cu Ollama

Dacă doriți ca agenții să folosească modele locale (pentru confidențialitate, latență sau cost), operatorul oferă suport Ollama de primă clasă. Nu este nevoie să configurați un sidecar manual: spec.ollama gestionează containerul, pre-descărcarea modelelor, stocarea și alocarea GPU:

spec:
  ollama:
    enabled: true
    models:
      - "llama3.2"
      - "nomic-embed-text"
    gpu: 1
    resources:
      requests:
        cpu: "2"
        memory: 4Gi
      limits:
        cpu: "4"
        memory: 8Gi
    storage:
      sizeLimit: 30Gi

Când este activat, operatorul:

  1. Adaugă un container sidecar Ollama la pod
  2. Rulează un init container care pre-descarcă modelele listate înainte de pornirea agentului
  3. Injectează OLLAMA_HOST=http://localhost:11434 în containerul principal
  4. Alocă GPU-ul NVIDIA solicitat prin limitele de resurse nvidia.com/gpu

Implicit, modelele sunt stocate într-un volum emptyDir cu o limită de dimensiune configurabilă. Pentru stocare persistentă a modelelor între reporniri (astfel încât modelele să nu fie descărcate din nou de fiecare dată), folosiți un PVC existent:

spec:
  ollama:
    enabled: true
    models: ["llama3.2"]
    storage:
      existingClaim: ollama-models-pvc

Integrare Tailscale

Expuneți agentul în tailnet-ul dumneavoastră fără Ingress, load balancere sau IP-uri publice. Câmpul spec.tailscale al operatorului gestionează injectarea cheii de autentificare, îmbogățirea configurării și regulile NetworkPolicy:

spec:
  tailscale:
    enabled: true
    mode: serve       # or "funnel" for public internet access
    authKeySecretRef:
      name: tailscale-authkey
    hostname: my-agent

Creați Secretul cheii de autentificare cu o cheie efemeră, reutilizabilă din consola de administrare Tailscale:

kubectl create secret generic tailscale-authkey \
  --namespace openclaw \
  --from-literal=authkey=tskey-auth-...

În modul serve (implicit), doar membrii tailnet-ului pot accesa agentul. În modul funnel, Tailscale îl expune pe internetul public cu HTTPS automat.

Operatorul efectuează automat următoarele acțiuni:

  • Injectează variabilele de mediu TS_AUTHKEY și TS_HOSTNAME
  • Fuzionează gateway.tailscale.mode și gateway.tailscale.resetOnExit în configurația OpenClaw
  • Adaugă reguli de egress STUN și WireGuard la NetworkPolicy

Pentru autentificare SSO fără parolă pentru membrii tailnet-ului, activați authSSO:

spec:
  tailscale:
    enabled: true
    mode: serve
    authKeySecretRef:
      name: tailscale-authkey
    authSSO: true

Aceasta setează gateway.auth.allowTailscale=true în configurația OpenClaw, permițând membrilor tailnet-ului să acceseze agentul fără un token gateway separat.

Sidecar-uri și init container-e personalizate

Pentru cazuri de utilizare dincolo de suportul încorporat Ollama și Tailscale, operatorul acceptă sidecar-uri și init container-e arbitrare. Rulați un Cloud SQL Proxy pentru acces la baza de date, un forwarder de loguri sau orice alt helper alături de agent:

spec:
  sidecars:
    - name: cloudsql-proxy
      image: gcr.io/cloud-sql-connectors/cloud-sql-proxy:2
      args: ["--structured-logs", "project:region:instance"]
      resources:
        requests:
          cpu: 100m
          memory: 128Mi

Init container-ele personalizate rulează după pipeline-ul de inițializare al operatorului (seed-area configurării, pnpm, Python, skill-uri):

spec:
  initContainers:
    - name: fetch-data
      image: curlimages/curl:8.5.0
      command: ["sh", "-c", "curl -o /data/dataset.json https://..."]
      volumeMounts:
        - name: data
          mountPath: /data

Modul de fuzionare a configurării

Implicit, operatorul suprascrie fișierul de configurare la fiecare repornire a pod-ului. Dacă agentul își modifică propria configurare la runtime (prin skill-uri sau auto-modificare), setați mergeMode: merge pentru fuzionarea profundă a configurării operatorului cu configurarea PVC existentă:

spec:
  config:
    mergeMode: merge
    raw:
      agents:
        defaults:
          model:
            primary: "anthropic/claude-sonnet-4-20250514"

În modul fuzionare, cheile specificate de operator au prioritate, dar cheile adăugate de agent pe cont propriu supraviețuiesc repornirilor.

Exemplul complet

Iată un manifest gata de producție care combină totul din acest ghid:

apiVersion: openclaw.rocks/v1alpha1
kind: OpenClawInstance
metadata:
  name: production-agent
  namespace: openclaw
spec:
  envFrom:
    - secretRef:
        name: openclaw-api-keys

  config:
    mergeMode: merge
    raw:
      agents:
        defaults:
          model:
            primary: "anthropic/claude-sonnet-4-20250514"

  skills:
    - "@anthropic/mcp-server-fetch"

  runtimeDeps:
    pnpm: true

  chromium:
    enabled: true
    resources:
      requests:
        cpu: 500m
        memory: 1Gi
      limits:
        cpu: 1000m
        memory: 2Gi

  ollama:
    enabled: true
    models: ["llama3.2"]
    gpu: 1
    resources:
      requests:
        cpu: "2"
        memory: 4Gi

  tailscale:
    enabled: true
    mode: serve
    authKeySecretRef:
      name: tailscale-authkey
    authSSO: true

  resources:
    requests:
      cpu: 500m
      memory: 1Gi
    limits:
      cpu: 2000m
      memory: 4Gi

  storage:
    persistence:
      enabled: true
      size: 10Gi

  autoUpdate:
    enabled: true
    checkInterval: "24h"
    backupBeforeUpdate: true
    rollbackOnFailure: true

  observability:
    metrics:
      enabled: true
      serviceMonitor:
        enabled: true

  # Remove or adjust these if you don't use dedicated nodes
  availability:
    nodeSelector:
      openclaw.rocks/nodepool: openclaw
    tolerations:
      - key: openclaw.rocks/dedicated
        value: openclaw
        effect: NoSchedule

Aplicați-l, și aveți un agent AI securizat, cu actualizări automate, capabil de navigare, cu inferență locală, acces tailnet, monitorizare, backup și izolare de rețea. Un singur kubectl apply.

Ce primiți din start

Fără a atinge vreo setare de securitate, fiecare agent implementat de operator vine cu:

  • Execuție non-root (UID 1000)
  • Sistem de fișiere root doar-citire
  • Toate capabilitățile Linux eliminate
  • Profil Seccomp RuntimeDefault
  • NetworkPolicy deny-by-default (doar egress DNS + HTTPS)
  • ServiceAccount per instanță fără montare automată de token
  • PodDisruptionBudget
  • Probe de liveness, readiness și startup
  • Token de autentificare gateway generat automat
  • Reconciliere a derivei la fiecare 5 minute

Un webhook de validare blochează încercările de rulare ca root și avertizează despre NetworkPolicy-uri dezactivate, lipsa TLS pe Ingress și chei de furnizor AI nedetectate.

Pașii următori

Dacă întâmpinați probleme sau aveți feedback, deschideți un issue pe GitHub. PR-urile sunt de asemenea binevenite.

Dacă nu doriți să operați Kubernetes personal, OpenClaw.rocks se ocupă de toate pentru dumneavoastră. Alegeți un plan, conectați un canal, și agentul este activ în câteva secunde.