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.
  • kubectl konfigureret til at tale med dit cluster.
  • helm v3 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:

  1. Opretter en sikkerhedskopi af arbejdsområdets PVC til S3-kompatibel lagring
  2. Opdaterer image-tagget på StatefulSet
  3. Venter op til healthCheckTimeout på, at podden består beredskapstjek
  4. 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:

  1. Tilføjer en Ollama-sidevognscontainer til podden
  2. Kører en init-container, der forhåndstrækker de listede modeller, før agenten starter
  3. Injicerer OLLAMA_HOST=http://localhost:11434 i hovedcontaineren
  4. Allokerer den anmodede NVIDIA GPU via nvidia.com/gpu ressourcebegræ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_AUTHKEY og TS_HOSTNAME
  • Sammenfletter gateway.tailscale.mode og gateway.tailscale.resetOnExit i 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

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.