Sådan implementerer du OpenClaw på Kubernetes
Sikkerhedsforskere har fundet over 135.000 OpenClaw-instanser, der står helt ubeskyttede på internettet. Mange af dem var sårbare over for fjernkodeudførelse. OpenClaw-sikkerhedskrisen er reel: kritiske CVE’er, ondsindede færdigheder og et grundlæggende problem med, hvordan de fleste implementeringer håndterer godkendelse. At køre OpenClaw på en VPS med docker run er nemt. At køre det sikkert er et andet problem.
Kubernetes løser det problem. Du får netværksisolering, ressourcebegrænsninger, automatiserede genstarter og sikkerhedsstandarder, der ville tage timer at konfigurere i hånden. Og med OpenClaw Kubernetes Operator får du det hele fra en enkelt YAML-fil.
Denne guide tager dig fra nul til en produktionsklar OpenClaw-agent på Kubernetes. Hver YAML-blok er klar til at kopiere og indsætte.
Hvorfor en operator
At køre OpenClaw på Kubernetes er mere end en Deployment og en Service. Du har brug for netværksisolering, hemmeligheds-håndtering, persistent lagring, sundhedsovervågning, konfigurationsudrulning og valgfrit browserautomatisering. At forbinde alt det korrekt i hånden er kedeligt og fejlbehæftet.
En Kubernetes-operator koder disse bekymringer ind i en enkelt tilpasset ressource. Du erklærer, hvad du vil have, og operatoren afstemmer det kontinuerligt til det rigtige sæt af Kubernetes-objekter. Det giver dig:
- Sikkerhed som standard. Hver agent kører som UID 1000, alle Linux-kapabiliteter droppet, seccomp aktiveret, skrivebeskyttet rodfilsystem og en standard-nægt NetworkPolicy, der kun tillader DNS og HTTPS udgående. Ingen manuel hærdning nødvendig.
- Auto-opdateringer med tilbagerulning. Operatoren poller OCI-registret for nye versioner, sikkerhedskopierer arbejdsområdet, ruller opdateringen ud og ruller automatisk tilbage, hvis den nye pod fejler sundhedstjek.
- Konfigurationsudrulning. Ændr din
spec.config.raw, og operatoren registrerer, at indholdshash er ændret, udløser en rullende opdatering. Samme for hemmeligheds-rotation. - Sikkerhedskopiering og gendannelse. Automatisk sikkerhedskopi af arbejdsområde til S3-kompatibel lagring ved sletning af instans. Gendan til en ny instans fra ethvert øjebliksbillede.
- Gateway-godkendelse. Auto-genererer et gateway-token per instans. Ingen manuel parring, ingen mDNS (som alligevel ikke virker i Kubernetes).
- Afvigelsesdetektion. Hvert 5. minut kontrollerer operatoren, at hver administreret ressource matcher den ønskede tilstand. Hvis nogen manuelt redigerer en NetworkPolicy eller sletter en PDB, afstemmes den tilbage.
Forudsætninger
Du har brug for:
- Et Kubernetes-cluster (1.28+). Enhver kompatibel distribution virker: EKS, GKE, AKS, k3s eller et lokalt Kind-cluster til test.
kubectlkonfigureret til at tale med dit cluster.helmv3 installeret.- En API-nøgle til din AI-udbyder (Anthropic, OpenAI eller enhver OpenAI-kompatibel endpoint).
Trin 1: Installér operatoren
Operatoren leveres som et OCI Helm chart. Én kommando installerer den:
helm install openclaw-operator \
oci://ghcr.io/openclaw-rocks/charts/openclaw-operator \
--namespace openclaw-operator-system \
--create-namespace
Verificér, at den kører:
kubectl get pods -n openclaw-operator-system
Du bør se operator-podden i tilstanden Running. Operatoren installerer også en validerings-webhook, der forhindrer usikre konfigurationer (som at køre som root).
Trin 2: Opret din API-nøgle hemmelighed
Gem din AI-udbyders API-nøgle i en Kubernetes Secret. Operatoren injicerer den i agent-containeren:
kubectl create namespace openclaw
kubectl create secret generic openclaw-api-keys \
--namespace openclaw \
--from-literal=ANTHROPIC_API_KEY=sk-ant-your-key-here
Til OpenAI eller andre udbydere, brug det passende miljøvariabelnavn (OPENAI_API_KEY, OPENROUTER_API_KEY osv.). Du kan inkludere flere udbydere i den samme Secret.
Tip: Til produktion, overvej at bruge External Secrets Operator til at synkronisere nøgler fra AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager eller Azure Key Vault. Operatorens dokumentation har detaljerede eksempler.
Trin 3: Implementér din første agent
Opret en fil kaldet 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
Anvend den:
kubectl apply -f my-agent.yaml
Den ene ressource opretter en StatefulSet, Service, ServiceAccount, Role, RoleBinding, ConfigMap, PVC, PDB, NetworkPolicy og en gateway-token Secret. Operatoren afstemmer det hele.
Trin 4: Verificér, at den kører
Observer instansens opstart:
kubectl get openclawinstances -n openclaw -w
NAME PHASE READY AGE
my-agent Provisioning False 10s
my-agent Running True 45s
Når fasen viser Running og Ready er True, er din agent live. Tjek logfilerne:
kubectl logs -n openclaw statefulset/my-agent -f
For at interagere med din agent, port-forward gatewayen:
kubectl port-forward -n openclaw svc/my-agent 18789:18789
Åbn derefter http://localhost:18789 i din browser.
Trin 5: Forbind en kanal
OpenClaw understøtter Telegram, Discord, WhatsApp, Signal og andre beskedkanaler. Hver kanal konfigureres gennem miljøvariabler. Tilføj det relevante token til din Secret:
kubectl create secret generic openclaw-channel-keys \
--namespace openclaw \
--from-literal=TELEGRAM_BOT_TOKEN=your-bot-token-here
Referer derefter til den i din instans:
spec:
envFrom:
- secretRef:
name: openclaw-api-keys
- secretRef:
name: openclaw-channel-keys
OpenClaw auto-detekterer tokenet og aktiverer kanalen. Ingen yderligere konfiguration nødvendig.
Det dækker det grundlæggende. Din agent kører, er sikret og tilgængelig. Resten af denne guide dækker valgfrie funktioner, du kan aktivere, når du er klar.
Browserautomatisering
OpenClaw kan browse på nettet, tage skærmbilleder og interagere med sider. Operatoren gør dette til en tilføjelse på én linje. Den kører en hærdet Chromium-sidevogn i den samme pod, forbundet via localhost:
spec:
chromium:
enabled: true
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1000m
memory: 2Gi
Operatoren injicerer automatisk en CHROMIUM_URL-miljøvariabel i hovedcontaineren. Sidevognscontaineren kører som UID 1001 med et skrivebeskyttet rodfilsystem og sin egen sikkerhedskontekst.
Færdigheder og runtime-afhængigheder
OpenClaw-færdigheder fra ClawHub kan installeres deklarativt. Operatoren kører en init-container, der henter hver færdighed, før agenten starter:
spec:
skills:
- "@anthropic/mcp-server-fetch"
- "@anthropic/mcp-server-filesystem"
Hvis dine færdigheder eller MCP-servere har brug for pnpm eller Python, aktivér de indbyggede runtime-afhængigheds init-containere:
spec:
runtimeDeps:
pnpm: true # Installs pnpm via corepack
python: true # Installs Python 3.12 + uv
Init-containerne installerer disse værktøjer på data-PVC’en, så de persisterer på tværs af genstarter uden at gøre container-imaget større.
Auto-opdateringer
OpenClaw udgiver nye versioner hyppigt. Operatoren kan spore disse automatisk, sikkerhedskopiere før opdatering og rulle tilbage, hvis noget går galt:
spec:
autoUpdate:
enabled: true
checkInterval: "12h"
backupBeforeUpdate: true
rollbackOnFailure: true
healthCheckTimeout: "10m"
Når en ny version vises i registret, udfører operatoren:
- Opretter en sikkerhedskopi af arbejdsområdets PVC til S3-kompatibel lagring
- Opdaterer image-tagget på StatefulSet
- Venter op til
healthCheckTimeoutpå, at podden består beredskapstjek - Hvis podden ikke bliver klar, gendanner den forrige image-tag og sikkerhedskopien
Efter 3 på hinanden følgende mislykkede tilbagerulninger pauser operatoren auto-opdatering og sætter en betingelse, så du kan undersøge.
Bemærk: Auto-opdatering gør ingenting for digest-fastgjorte images (
spec.image.digest). Hvis du fastgør med digest, kontrollerer du opdateringer manuelt.
Produktionshærdning
Operatoren leveres sikker som standard. Her er de ekstra indstillinger til produktionsimplementeringer.
Overvågning med Prometheus
Aktivér ServiceMonitor til at skrabe operator- og instansmetrikker:
spec:
observability:
metrics:
enabled: true
serviceMonitor:
enabled: true
interval: "30s"
Operatoren eksponerer openclaw_reconcile_total, openclaw_reconcile_duration_seconds, openclaw_instance_phase og auto-opdateringstællere.
Planlæg på dedikerede noder
Hvis du kører et blandet cluster, brug nodeSelector og tolerations til at fastgøre agenter til dedikerede noder:
spec:
availability:
nodeSelector:
openclaw.rocks/nodepool: openclaw
tolerations:
- key: openclaw.rocks/dedicated
value: openclaw
effect: NoSchedule
Tilføj tilpassede udgående regler
Standard-NetworkPolicy tillader kun DNS (port 53) og HTTPS (port 443). Hvis din agent skal nå andre tjenester (en database, en beskedkø, et internt API), tilføj udgående regler:
spec:
security:
networkPolicy:
additionalEgress:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 5432
protocol: TCP
Cloud-udbyderidentitet
Til AWS IRSA eller GCP Workload Identity, annotér den administrerede ServiceAccount:
spec:
security:
rbac:
serviceAccountAnnotations:
eks.amazonaws.com/role-arn: "arn:aws:iam::123456789:role/openclaw"
Virksomhedsproxyer og private CA’er
Hvis dit cluster bruger en TLS-opfangende proxy, injicer et CA-bundt:
spec:
security:
caBundle:
configMapName: corporate-ca-bundle
key: ca-bundle.crt
Operatoren monterer CA-bundtet i alle containere og sætter NODE_EXTRA_CA_CERTS automatisk.
GitOps
OpenClawInstance CRD er en almindelig YAML-fil. Det betyder, at den passer direkte ind i et GitOps-workflow. Gem dine agentmanifester i et git-repo, og lad ArgoCD eller Flux synkronisere dem til dit cluster.
En typisk repostruktur:
gitops/
└── agents/
├── kustomization.yaml
├── namespace.yaml
├── agent-a.yaml
└── agent-b.yaml
Enhver ændring går gennem en pull request. Dit team gennemgår diffen. Merge til main, og ArgoCD anvender den. Ingen kubectl apply fra bærbare computere, ingen konfigurationsafvigelse, fuld revisionssti.
Operatorens konfigurations-hashing gør dette ekstra glat. Når ArgoCD synkroniserer en ændret spec.config.raw, registrerer operatoren, at indholdshash er ændret, og udløser en rullende opdatering automatisk. Samme for hemmeligheds-rotation: operatoren overvåger refererede hemmeligheder og genstarter pods, når de ændres.
Sikkerhedskopiering og gendannelse
Operatoren understøtter S3-kompatible sikkerhedskopier. Når du sletter en instans, opretter operatoren automatisk en sikkerhedskopi af arbejdsområdets PVC, før den rives ned.
For at gendanne en agent fra en sikkerhedskopi til en ny instans:
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
Operatoren downloader øjebliksbilledet, pakker det ud i PVC’en og starter agenten med alle tidligere arbejdsområdedata, færdigheder og samtalehistorik intakt.
Lokal inferens med Ollama
Hvis du vil have agenter til at bruge lokale modeller (for privatliv, latens eller omkostninger), har operatoren førsteklasses Ollama-support. Ingen sidevogn at opsætte manuelt. spec.ollama håndterer containeren, model-forhåndstrækning, lagring og GPU-allokering:
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
Når aktiveret, udfører operatoren:
- Tilføjer en Ollama-sidevognscontainer til podden
- Kører en init-container, der forhåndstrækker de listede modeller, før agenten starter
- Injicerer
OLLAMA_HOST=http://localhost:11434i hovedcontaineren - Allokerer den anmodede NVIDIA GPU via
nvidia.com/gpuressourcebegrænsninger
Som standard gemmes modeller i en emptyDir-volumen med en konfigurerbar størrelsesbegrænsning. Til persistent modellagring på tværs af genstarter (så modeller ikke gentrækkes hver gang), brug en eksisterende PVC:
spec:
ollama:
enabled: true
models: ["llama3.2"]
storage:
existingClaim: ollama-models-pvc
Tailscale-integration
Eksponer din agent til dit tailnet uden Ingress, load balancere eller offentlige IP-adresser. Operatorens spec.tailscale-felt håndterer godkendelsesnøgleinjektion, konfigurationsberigelse og NetworkPolicy-regler:
spec:
tailscale:
enabled: true
mode: serve # or "funnel" for public internet access
authKeySecretRef:
name: tailscale-authkey
hostname: my-agent
Opret godkendelsesnøgle-hemmeligheden med en kortlivet, genbrugelig nøgle fra Tailscale-administrationskonsollen:
kubectl create secret generic tailscale-authkey \
--namespace openclaw \
--from-literal=authkey=tskey-auth-...
I serve-tilstand (standard) kan kun medlemmer af dit tailnet nå agenten. I funnel-tilstand eksponerer Tailscale den for det offentlige internet med automatisk HTTPS.
Operatoren:
- Injicerer miljøvariablerne
TS_AUTHKEYogTS_HOSTNAME - Sammenfletter
gateway.tailscale.modeoggateway.tailscale.resetOnExiti OpenClaw-konfigurationen - Tilføjer STUN- og WireGuard-udgående regler til NetworkPolicy
Til adgangskodefri SSO-login for tailnet-medlemmer, aktivér authSSO:
spec:
tailscale:
enabled: true
mode: serve
authKeySecretRef:
name: tailscale-authkey
authSSO: true
Dette sætter gateway.auth.allowTailscale=true i OpenClaw-konfigurationen, så tailnet-medlemmer kan tilgå agenten uden et separat gateway-token.
Tilpassede sidevogne og init-containere
Til brugsscenarier ud over den indbyggede Ollama- og Tailscale-support accepterer operatoren vilkårlige sidevogne og init-containere. Kør en Cloud SQL Proxy til databaseadgang, en log-forwarder eller enhver anden hjælper ved siden af din 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
Tilpassede init-containere kører efter operatorens egen init-pipeline (konfigurationssåning, pnpm, Python, færdigheder):
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
Konfigurations-sammenfletningsstilstand
Som standard overskriver operatoren konfigurationsfilen ved hver pod-genstart. Hvis din agent ændrer sin egen konfiguration ved runtime (gennem færdigheder eller selvmodifikation), sæt mergeMode: merge til dyb sammenfletnig af operatorkonfiguration med den eksisterende PVC-konfiguration:
spec:
config:
mergeMode: merge
raw:
agents:
defaults:
model:
primary: "anthropic/claude-sonnet-4-20250514"
I sammenfletningsstilstand vinder operator-specificerede nøgler, men nøgler som agenten tilføjede på egen hånd overlever genstarter.
Det komplette eksempel
Her er et produktionsklart manifest, der kombinerer alt fra denne guide:
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
Anvend det, og du har en hærdet, auto-opdaterende, browser-kapabel AI-agent med lokal inferens, tailnet-adgang, overvågning, sikkerhedskopier og netværksisolering. Én kubectl apply.
Hvad du får med det samme
Uden at røre en eneste sikkerhedsindstilling leveres hver agent, der er implementeret af operatoren, med:
- Ikke-root udførelse (UID 1000)
- Skrivebeskyttet rodfilsystem
- Alle Linux-kapabiliteter droppet
- Seccomp RuntimeDefault-profil
- Standard-nægt NetworkPolicy (kun DNS + HTTPS udgående)
- Per-instans ServiceAccount uden automatisk token-montering
- PodDisruptionBudget
- Liveness-, readiness- og startup-prober
- Auto-genereret gateway-godkendelsestoken
- 5-minutters afvigelsesafstemning
En validerings-webhook blokerer forsøg på at køre som root og advarer om deaktiverede NetworkPolicies, manglende TLS på Ingress og uopdagede AI-udbyder-nøgler.
Næste skridt
- Gennemse den fulde API-reference for hvert CRD-felt
- Læs implementeringsguiderne til EKS, GKE, AKS og Kind
- Opsæt model-fallback kæder på tværs af flere AI-udbydere
- Konfigurér External Secrets til Vault, AWS, GCP eller Azure
Hvis du støder på problemer eller har feedback, åbn et issue på GitHub. Pull requests er også velkomne.
Hvis du ikke vil administrere Kubernetes selv, håndterer OpenClaw.rocks alt dette for dig. Vælg en plan, forbind en kanal, og din agent er live på sekunder.