Si të vendosni OpenClaw në Kubernetes
Studiuesit e sigurisë kanë gjetur mbi 135,000 instanca OpenClaw plotësisht të pambrojtura në internet. Shumë prej tyre ishin të cenushme ndaj ekzekutimit të kodit nga distanca. Kriza e sigurisë së OpenClaw është reale: CVE kritike, skills keqdashëse dhe një problem thelbësor me mënyrën se si shumica e vendosjeve trajtojnë autentifikimin. Ekzekutimi i OpenClaw në një VPS me docker run është i lehtë. Ekzekutimi i tij në mënyrë të sigurt është një problem tjetër.
Kubernetes e zgjidh këtë problem. Merr izolim rrjeti, limite burimesh, rinisje automatike dhe parazgjedhje sigurie që do të duheshin orë të tëra për t’u konfiguruar me dorë. Dhe me OpenClaw Kubernetes Operator, i merr të gjitha nga një skedar i vetëm YAML.
Ky udhëzues të çon nga zeroja te një agjent OpenClaw gati për prodhim në Kubernetes. Çdo bllok YAML është gati për t’u kopjuar dhe ngjitur.
Pse një operator
Ekzekutimi i OpenClaw në Kubernetes është më shumë se një Deployment dhe një Service. Ke nevojë për izolim rrjeti, menaxhim sekretesh, ruajtje të vazhdueshme, monitorim shëndeti, shpërndarje konfigurimesh dhe opsionalisht automatizim shfletuesi. Lidhja e saktë e të gjitha këtyre me dorë është e lodhshme dhe e prirur ndaj gabimeve.
Një Kubernetes operator i kodon këto shqetësime në një burim të vetëm të personalizuar. Ti deklaron çfarë dëshiron, dhe operatori e barazon vazhdimisht me grupin e duhur të objekteve Kubernetes. Kjo të jep:
- Siguri si parazgjedhje. Çdo agjent ekzekutohet si UID 1000, të gjitha Linux capabilities janë hequr, seccomp është aktivizuar, sistem skedarësh root vetëm për lexim, dhe një NetworkPolicy mohim-si-parazgjedhje që lejon vetëm DNS dhe HTTPS egress. Pa nevojë për fortifikim manual.
- Përditësime automatike me rikthim. Operatori kontrollon regjistrin OCI për versione të reja, rezervon workspace, shpërndan përditësimin dhe automatikisht e kthen mbrapsht nëse podi i ri nuk kalon kontrollet e shëndetit.
- Shpërndarje konfigurimesh. Ndrysho
spec.config.rawdhe operatori zbulon se hash-i i përmbajtjes ka ndryshuar, nxit një rolling update. E njëjta gjë për rotacionin e sekreteve. - Rezervim dhe rikthim. Rezervim automatik i workspace në ruajtje të përputhshme me S3 gjatë fshirjes së instancës. Rikthim në një instancë të re nga çdo foto.
- Autentifikim gateway. Gjeneron automatikisht një token gateway për instancë. Pa çiftëzim manual, pa mDNS (i cili nuk funksionon në Kubernetes sidoqoftë).
- Zbulim devijimesh. Çdo 5 minuta, operatori kontrollon që çdo burim i menaxhuar përputhet me gjendjen e dëshiruar. Nëse dikush redakton manualisht një NetworkPolicy ose fshin një PDB, ai rikthehet.
Parakushtet
Ke nevojë për:
- Një klaster Kubernetes (1.28+). Çdo shpërndarje konform funksionon: EKS, GKE, AKS, k3s ose një klaster lokal Kind për testim.
kubectli konfiguruar për të komunikuar me klasterin tënd.helmv3 i instaluar.- Një çelës API për ofruesin tënd AI (Anthropic, OpenAI ose çdo pikë fundore e përputhshme me OpenAI).
Hapi 1: Instalo operatorin
Operatori vjen si një OCI Helm chart. Një komandë e instalon:
helm install openclaw-operator \
oci://ghcr.io/openclaw-rocks/charts/openclaw-operator \
--namespace openclaw-operator-system \
--create-namespace
Verifiko që po ekzekutohet:
kubectl get pods -n openclaw-operator-system
Duhet të shohësh podin e operatorit në gjendjen Running. Operatori gjithashtu instalon një validating webhook që parandalon konfigurime jo të sigurta (si ekzekutimi si root).
Hapi 2: Krijo sekretin e çelësit API
Ruaj çelësin API të ofruesit tënd AI në një Kubernetes Secret. Operatori do ta injektojë në kontejnerin e agjentit:
kubectl create namespace openclaw
kubectl create secret generic openclaw-api-keys \
--namespace openclaw \
--from-literal=ANTHROPIC_API_KEY=sk-ant-your-key-here
Për OpenAI ose ofrues të tjerë, përdor emrin përkatës të variablit të mjedisit (OPENAI_API_KEY, OPENROUTER_API_KEY etj.). Mund të përfshish shumë ofrues në të njëjtin Secret.
Këshillë: Për prodhim, merr parasysh përdorimin e External Secrets Operator për të sinkronizuar çelësat nga AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager ose Azure Key Vault. Dokumentacioni i operatorit ka shembuj të detajuar.
Hapi 3: Vendos agjentin e parë
Krijo një skedar të quajtur 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
Apliko atë:
kubectl apply -f my-agent.yaml
Ky burim i vetëm krijon një StatefulSet, Service, ServiceAccount, Role, RoleBinding, ConfigMap, PVC, PDB, NetworkPolicy dhe një Secret token gateway. Operatori i barazon të gjitha.
Hapi 4: Verifiko që po ekzekutohet
Vëzhgo instancën duke u ngritur:
kubectl get openclawinstances -n openclaw -w
NAME PHASE READY AGE
my-agent Provisioning False 10s
my-agent Running True 45s
Pasi faza tregon Running dhe Ready është True, agjenti yt është aktiv. Kontrollo regjistrat:
kubectl logs -n openclaw statefulset/my-agent -f
Për të ndërvepruar me agjentin, përcjell portin e gateway:
kubectl port-forward -n openclaw svc/my-agent 18789:18789
Pastaj hap http://localhost:18789 në shfletues.
Hapi 5: Lidh një kanal
OpenClaw mbështet Telegram, Discord, WhatsApp, Signal dhe kanale të tjera mesazhesh. Çdo kanal konfigurohet përmes variablave të mjedisit. Shto tokenin përkatës në Secret:
kubectl create secret generic openclaw-channel-keys \
--namespace openclaw \
--from-literal=TELEGRAM_BOT_TOKEN=your-bot-token-here
Pastaj referoje në instancën tënde:
spec:
envFrom:
- secretRef:
name: openclaw-api-keys
- secretRef:
name: openclaw-channel-keys
OpenClaw e zbulon tokenin automatikisht dhe aktivizon kanalin. Pa nevojë për konfigurim shtesë.
Kjo mbulon bazat. Agjenti yt po ekzekutohet, është i siguruar dhe i arritshëm. Pjesa tjetër e këtij udhëzuesi mbulon veçoritë opsionale që mund t’i aktivizosh kur të jesh gati.
Automatizimi i shfletuesit
OpenClaw mund të shfletojë uebin, të marrë pamje ekrani dhe të ndërveprojë me faqe. Operatori e bën këtë një shtesë me një rresht. Ai ekzekuton një Chromium sidecar të fortifikuar në të njëjtin pod, të lidhur përmes localhost:
spec:
chromium:
enabled: true
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1000m
memory: 2Gi
Operatori automatikisht injekton një variabël mjedisi CHROMIUM_URL në kontejnerin kryesor. Sidecar ekzekutohet si UID 1001 me sistem skedarësh root vetëm për lexim dhe kontekstin e vet të sigurisë.
Skills dhe varësi ekzekutimi
Skills OpenClaw nga ClawHub mund të instalohen në mënyrë deklarative. Operatori ekzekuton një init container që sjell çdo skill para se agjenti të niset:
spec:
skills:
- "@anthropic/mcp-server-fetch"
- "@anthropic/mcp-server-filesystem"
Nëse skills ose serverët MCP kanë nevojë për pnpm ose Python, aktizo init kontejnerët e integruar të varësive të ekzekutimit:
spec:
runtimeDeps:
pnpm: true # Installs pnpm via corepack
python: true # Installs Python 3.12 + uv
Init kontejnerët i instalojnë këto mjete në PVC të dhënash, kështu që mbijetojnë rinisjet pa fryrë imazhin e kontejnerit.
Përditësimet automatike
OpenClaw lëshon versione të reja shpesh. Operatori mund t’i ndjekë automatikisht, të rezervojë para përditësimit dhe të rikthejë nëse diçka shkon keq:
spec:
autoUpdate:
enabled: true
checkInterval: "12h"
backupBeforeUpdate: true
rollbackOnFailure: true
healthCheckTimeout: "10m"
Kur shfaqet një version i ri në regjistër, operatori:
- Krijon një rezervim të workspace PVC në ruajtje të përputhshme me S3
- Përditëson etiketën e imazhit në StatefulSet
- Pret deri në
healthCheckTimeoutqë podi të kalojë kontrollet e gatishmërisë - Nëse podi nuk arrin gjendjen gati, rikthhen etiketën e mëparshme të imazhit dhe rezervimin
Pas 3 rikthimeve të dështuara rradhazi, operatori ndal përditësimin automatik dhe vendos një kusht në mënyrë që të mund ta hetosh.
Shënim: Përditësimi automatik është një no-op për imazhe të fiksuara me digest (
spec.image.digest). Nëse e fikson me digest, i kontrollon përditësimet manualisht.
Fortifikimi për prodhim
Operatori vjen i sigurt si parazgjedhje. Ja kontrollet shtesë për vendosje prodhimi.
Monitorim me Prometheus
Aktizo ServiceMonitor për të mbledhur metrikat e operatorit dhe instancave:
spec:
observability:
metrics:
enabled: true
serviceMonitor:
enabled: true
interval: "30s"
Operatori ekspozon openclaw_reconcile_total, openclaw_reconcile_duration_seconds, openclaw_instance_phase dhe numërues përditësimi automatik.
Planifiko në nyje të dedikuara
Nëse ekzekuton një klaster të përzier, përdor nodeSelector dhe tolerations për të fiksuar agjentët në nyje të dedikuara:
spec:
availability:
nodeSelector:
openclaw.rocks/nodepool: openclaw
tolerations:
- key: openclaw.rocks/dedicated
value: openclaw
effect: NoSchedule
Shto rregulla egress të personalizuara
NetworkPolicy e parazgjedhur lejon vetëm DNS (port 53) dhe HTTPS (port 443). Nëse agjenti yt ka nevojë të arrijë shërbime të tjera (një bazë të dhënash, një radhë mesazhesh, një API të brendshme), shto rregulla egress:
spec:
security:
networkPolicy:
additionalEgress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 5432
protocol: TCP
Identiteti i ofruesit cloud
Për AWS IRSA ose GCP Workload Identity, anoto ServiceAccount e menaxhuar:
spec:
security:
rbac:
serviceAccountAnnotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::123456789:role/openclaw"
Proksi korporative dhe CA private
Nëse klasteri yt përdor një proksi ndërpritës TLS, injekto një paketë CA:
spec:
security:
caBundle:
configMapName: corporate-ca-bundle
key: ca-bundle.crt
Operatori e monton paketën CA në të gjithë kontejnerët dhe vendos NODE_EXTRA_CA_CERTS automatikisht.
GitOps
CRD OpenClawInstance është një skedar i thjeshtë YAML. Kjo do të thotë se futet drejtpërdrejt në një rrjedhë pune GitOps. Ruaj manifestet e agjentëve në një depo git dhe lër ArgoCD ose Flux t’i sinkronizojë me klasterin tënd.
Një strukturë tipike depoje:
gitops/
└── agents/
├── kustomization.yaml
├── namespace.yaml
├── agent-a.yaml
└── agent-b.yaml
Çdo ndryshim kalon përmes një pull request. Ekipi yt shqyrton diferencën. Bashko në main, dhe ArgoCD e aplikon. Pa kubectl apply nga laptopët, pa devijim konfigurimi, gjurmë e plotë auditimi.
Hash-imi i konfigurimit të operatorit e bën këtë veçanërisht të rrjedhshme. Kur ArgoCD sinkronizon një spec.config.raw të ndryshuar, operatori zbulon hash-in e ndryshuar të përmbajtjes dhe nxit automatikisht një rolling update. E njëjta gjë për rotacionin e sekreteve: operatori vëzhgon Secrets e referencuara dhe rinisë podet kur ato ndryshojnë.
Rezervim dhe rikthim
Operatori mbështet rezervime të përputhshme me S3. Kur fshin një instancë, operatori automatikisht krijon një rezervim të workspace PVC para shkatërrimit.
Për të rikthyer një agjent nga një rezervim në një instancë të re:
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
Operatori shkarkon foton, e shpaketon në PVC dhe nis agjentin me të gjitha të dhënat e mëparshme të workspace, skills dhe historikun e bisedave të paprekura.
Inferëncë lokale me Ollama
Nëse dëshiron që agjentët të përdorin modele lokale (për privatësi, vonesë ose kosto), operatori ka mbështetje Ollama të klasit të parë. Pa nevojë të konfigurosh një sidecar me dorë: spec.ollama trajton kontejnerin, tërheqjen paraprake të modeleve, ruajtjen dhe alokimin e 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
Kur aktivizohet, operatori:
- Shton një kontejner sidecar Ollama në pod
- Ekzekuton një init container që tërheq modelet e listuara para se agjenti të niset
- Injekton
OLLAMA_HOST=http://localhost:11434në kontejnerin kryesor - Alokon GPU-në e kërkuar NVIDIA përmes limiteve të burimeve
nvidia.com/gpu
Si parazgjedhje, modelet ruhen në një volum emptyDir me limit madhësie të konfigurueshëm. Për ruajtje të vazhdueshme modelesh mes rinisjesh (kështu që modelet nuk ritëriqen çdo herë), përdor një PVC ekzistues:
spec:
ollama:
enabled: true
models: ["llama3.2"]
storage:
existingClaim: ollama-models-pvc
Integrimi Tailscale
Ekspozo agjentin tënd në tailnet pa Ingress, load balancer ose IP publike. Fusha spec.tailscale e operatorit trajton injektimin e çelësit auth, pasurimin e konfigurimit dhe rregullat e NetworkPolicy:
spec:
tailscale:
enabled: true
mode: serve # or "funnel" for public internet access
authKeySecretRef:
name: tailscale-authkey
hostname: my-agent
Krijo sekretin e çelësit auth me një çelës efemer, të ripërdorshëm nga konsola e administratorit Tailscale:
kubectl create secret generic tailscale-authkey \
--namespace openclaw \
--from-literal=authkey=tskey-auth-...
Në modalitetin serve (parazgjedhja), vetëm anëtarët e tailnet tënd mund të arrijnë agjentin. Në modalitetin funnel, Tailscale e ekspozon në internetin publik me HTTPS automatik.
Operatori automatikisht:
- Injekton variablat e mjedisit
TS_AUTHKEYdheTS_HOSTNAME - Bashkon
gateway.tailscale.modedhegateway.tailscale.resetOnExitnë konfigurimin OpenClaw - Shton rregulla egress STUN dhe WireGuard në NetworkPolicy
Për hyrje SSO pa fjalëkalim për anëtarët e tailnet, aktizo authSSO:
spec:
tailscale:
enabled: true
mode: serve
authKeySecretRef:
name: tailscale-authkey
authSSO: true
Kjo vendos gateway.auth.allowTailscale=true në konfigurimin OpenClaw, kështu që anëtarët e tailnet mund të qasen agjentin pa një token të veçantë gateway.
Sidecar-ë dhe init kontejnerë të personalizuar
Për raste përdorimi përtej mbështetjes së integruar Ollama dhe Tailscale, operatori pranon sidecar-ë dhe init kontejnerë arbitrarë. Ekzekuto një Cloud SQL Proxy për qasje në bazën e të dhënave, një përcjellës regjistrash ose çdo ndihmës tjetër krahas agjentit:
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 kontejnerët e personalizuar ekzekutohen pas linjës së vet init të operatorit (mbjellje konfigurimi, pnpm, Python, skills):
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
Modaliteti i bashkimit të konfigurimit
Si parazgjedhje, operatori mbishkruan skedarin e konfigurimit në çdo rinisje podi. Nëse agjenti yt modifikon konfigurimin e vet gjatë ekzekutimit (përmes skills ose vetëmodifikimit), vendos mergeMode: merge për të bashkuar thellë konfigurimin e operatorit me konfigurimin ekzistues të PVC:
spec:
config:
mergeMode: merge
raw:
agents:
defaults:
model:
primary: "anthropic/claude-sonnet-4-20250514"
Në modalitetin bashkim, çelësat e specifikuar nga operatori fitojnë, por çelësat që agjenti shtoi vetë mbijetojnë rinisjet.
Shembulli i plotë
Ja një manifest gati për prodhim që kombinon gjithçka nga ky udhëzues:
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
Aplikoje, dhe ke një agjent AI të fortifikuar, me përditësim automatik, të aftë për shfletim me inferëncë lokale, qasje tailnet, monitorim, rezervime dhe izolim rrjeti. Një kubectl apply i vetëm.
Çfarë merr menjëherë
Pa prekur asnjë cilësim sigurie, çdo agjent i vendosur nga operatori vjen me:
- Ekzekutim jo-root (UID 1000)
- Sistem skedarësh root vetëm për lexim
- Të gjitha Linux capabilities të hequra
- Profil Seccomp RuntimeDefault
- NetworkPolicy mohim-si-parazgjedhje (vetëm DNS + HTTPS egress)
- ServiceAccount për instancë pa montim automatik tokeni
- PodDisruptionBudget
- Sonda liveness, readiness dhe startup
- Token autentifikimi gateway i gjeneruar automatikisht
- Barazim devijimesh çdo 5 minuta
Një validating webhook bllokon përpjekjet për të ekzekutuar si root dhe paralajmëron për NetworkPolicies të çaktivizuara, TLS që mungon në Ingress dhe çelësa ofruesish AI të pazbuluar.
Hapat e ardhshëm
- Shfleto referencën e plotë API për çdo fushë CRD
- Lexo udhëzuesit e vendosjes për EKS, GKE, AKS dhe Kind
- Konfiguro zinxhirë model fallback mes shumë ofruesve AI
- Konfiguro External Secrets për Vault, AWS, GCP ose Azure
Nëse has probleme ose ke komente, hap një issue në GitHub. PR janë gjithashtu të mirëpritura.
Nëse nuk dëshiron ta menaxhosh Kubernetes vetë, OpenClaw.rocks kujdeset për të gjitha këto për ty. Zgjidh një plan, lidh një kanal dhe agjenti yt është aktiv brenda sekondash.