Cum să implementați OpenClaw pe Kubernetes
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.
kubectlconfigurat pentru clusterul dumneavoastră.helmv3 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:
- Creează un backup al PVC-ului workspace pe stocare compatibilă S3
- Actualizează tag-ul imaginii pe StatefulSet
- Așteaptă până la
healthCheckTimeoutca pod-ul să treacă verificările de disponibilitate - 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:
- Adaugă un container sidecar Ollama la pod
- Rulează un init container care pre-descarcă modelele listate înainte de pornirea agentului
- Injectează
OLLAMA_HOST=http://localhost:11434în containerul principal - 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șiTS_HOSTNAME - Fuzionează
gateway.tailscale.modeșigateway.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
- Explorați referința API completă pentru fiecare câmp al CRD
- Citiți ghidurile de implementare pentru EKS, GKE, AKS și Kind
- Configurați lanțuri de fallback pentru modele pe mai mulți furnizori AI
- Configurați External Secrets pentru Vault, AWS, GCP sau Azure
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.