Bezpečnostní výzkumníci našli přes 135 000 instancí OpenClaw zcela vystavených na internetu. Mnohé z nich byly zranitelné vůči vzdálenému spuštění kódu. Bezpečnostní krize OpenClaw je reálná: kritické CVE, škodlivé skilly a zásadní problém s tím, jak většina nasazení řeší autentizaci. Spustit OpenClaw na VPS pomocí docker run je snadné. Provozovat jej bezpečně je úplně jiný problém.

Kubernetes tento problém řeší. Získáte síťovou izolaci, limity prostředků, automatické restarty a bezpečnostní nastavení, jejichž ruční konfigurace by trvala hodiny. A s operátorem Kubernetes pro OpenClaw to vše získáte z jediného souboru YAML.

Tento návod vás provede od nuly k produkčně připravenému agentovi OpenClaw na Kubernetes. Každý blok YAML je připraven ke zkopírování a vložení.

Proč operátor

Provozování OpenClaw na Kubernetes je víc než Deployment a Service. Potřebujete síťovou izolaci, správu Secretů, perzistentní úložiště, sledování zdraví, rollouty konfigurace a volitelně automatizaci prohlížeče. Správně to vše propojit ručně je zdlouhavé a náchylné k chybám.

Operátor Kubernetes kóduje tyto požadavky do jediného Custom Resource. Deklarujete, co chcete, a operátor to průběžně slaďuje se správnými objekty Kubernetes. To vám dává:

  • Bezpečnost ve výchozím stavu. Každý agent běží jako UID 1000, všechny linuxové capabilities odstraněny, Seccomp povolen, kořenový souborový systém pouze pro čtení a výchozí deny NetworkPolicy povolující pouze DNS a HTTPS egress. Bez ručního hardeningu.
  • Automatické aktualizace s rollbackem. Operátor se dotazuje OCI registru na nové verze, zálohuje workspace, nasadí aktualizaci a automaticky provede rollback, pokud nový pod neprojde health checky.
  • Rollouty konfigurace. Změňte spec.config.raw a operátor zjistí změnu hashe obsahu, čímž spustí postupnou aktualizaci. Totéž platí pro rotaci secretů.
  • Zálohování a obnova. Automatické zálohování workspace na S3-kompatibilní úložiště při smazání instance. Obnova do nové instance z libovolného snapshotu.
  • Autentizace gateway. Automaticky generuje token gateway pro každou instanci. Žádné ruční párování, žádný mDNS (který v Kubernetes stejně nefunguje).
  • Detekce driftu. Každých 5 minut operátor kontroluje, zda každý spravovaný prostředek odpovídá požadovanému stavu. Pokud někdo ručně upraví NetworkPolicy nebo smaže PDB, bude to opraveno.

Předpoklady

Potřebujete:

  • Cluster Kubernetes (1.28+). Jakákoli konformní distribuce funguje: EKS, GKE, AKS, k3s nebo lokální Kind cluster pro testování.
  • kubectl nakonfigurovaný pro váš cluster.
  • Nainstalovaný helm v3.
  • API klíč od vašeho poskytovatele AI (Anthropic, OpenAI nebo jakýkoli OpenAI-kompatibilní endpoint).

Krok 1: Instalace operátoru

Operátor se dodává jako OCI Helm chart. Jeden příkaz jej nainstaluje:

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

Ověřte, že běží:

kubectl get pods -n openclaw-operator-system

Měli byste vidět pod operátoru ve stavu Running. Operátor také nainstaluje validační webhook, který zabrání nebezpečným konfiguracím (jako je běh pod rootem).

Krok 2: Vytvoření Secretu s API klíčem

Uložte API klíč svého poskytovatele AI do Kubernetes Secretu. Operátor jej injektuje do kontejneru agenta:

kubectl create namespace openclaw

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

Pro OpenAI nebo jiné poskytovatele použijte příslušný název proměnné prostředí (OPENAI_API_KEY, OPENROUTER_API_KEY apod.). Do jednoho Secretu můžete zahrnout více poskytovatelů.

Tip: Pro produkční prostředí zvažte použití External Secrets Operator k synchronizaci klíčů z AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager nebo Azure Key Vault. Dokumentace operátoru obsahuje podrobné příklady.

Krok 3: Nasazení prvního agenta

Vytvořte soubor s názvem 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

Aplikujte jej:

kubectl apply -f my-agent.yaml

Tento jediný prostředek vytvoří StatefulSet, Service, ServiceAccount, Role, RoleBinding, ConfigMap, PVC, PDB, NetworkPolicy a Secret s tokenem gateway. Operátor vše sladí.

Krok 4: Ověření běhu

Sledujte spouštění instance:

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

Jakmile fáze zobrazí Running a Ready je True, váš agent je aktivní. Zkontrolujte logy:

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

Pro komunikaci s agentem proveďte port-forward gateway:

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

Poté otevřete http://localhost:18789 ve svém prohlížeči.

Krok 5: Připojení kanálu

OpenClaw podporuje Telegram, Discord, WhatsApp, Signal a další komunikační kanály. Každý kanál se konfiguruje přes proměnné prostředí. Přidejte příslušný token do svého Secretu:

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

Poté na něj odkažte v instanci:

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

OpenClaw automaticky detekuje token a aktivuje kanál. Žádná další konfigurace není potřeba.


Tím jsou pokryty základy. Váš agent běží, je zabezpečen a dostupný. Zbytek tohoto návodu pokrývá volitelné funkce, které můžete aktivovat, když budete připraveni.

Automatizace prohlížeče

OpenClaw umí procházet web, pořizovat snímky obrazovky a interagovat se stránkami. Operátor z toho dělá jednořádkový doplněk. Spouští zabezpečený Chromium sidecar ve stejném podu, připojený přes localhost:

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

Operátor automaticky injektuje proměnnou prostředí CHROMIUM_URL do hlavního kontejneru. Sidecar běží jako UID 1001 s kořenovým souborovým systémem pouze pro čtení a vlastním bezpečnostním kontextem.

Skilly a runtime závislosti

Skilly OpenClaw z ClawHub lze instalovat deklarativně. Operátor spouští init kontejner, který stáhne každý skill před spuštěním agenta:

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

Pokud vaše skilly nebo MCP servery potřebují pnpm nebo Python, povolte vestavěné init kontejnery pro runtime závislosti:

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

Init kontejnery instalují tyto nástroje na datový PVC, takže přežijí restarty bez nafukování image kontejneru.

Automatické aktualizace

OpenClaw často vydává nové verze. Operátor je může automaticky sledovat, zálohovat před aktualizací a vrátit se zpět, pokud se něco pokazí:

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

Když se v registru objeví nová verze, operátor:

  1. Vytvoří zálohu workspace PVC na S3-kompatibilní úložiště
  2. Aktualizuje image tag na StatefulSetu
  3. Čeká až do healthCheckTimeout, dokud pod neprojde kontrolami dostupnosti
  4. Pokud se pod nestane ready, obnoví předchozí image tag a zálohu

Po 3 po sobě jdoucích neúspěšných rollbackech operátor pozastaví automatické aktualizace a nastaví podmínku pro vyšetření.

Poznámka: Automatická aktualizace nemá účinek na image připnuté digestem (spec.image.digest). Pokud připínáte digestem, aktualizace řídíte ručně.

Produkční hardening

Operátor je ve výchozím stavu bezpečný. Zde jsou další nastavení pro produkční nasazení.

Monitorování s Prometheus

Povolte ServiceMonitor pro sběr metrik operátoru a instancí:

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

Operátor vystavuje openclaw_reconcile_total, openclaw_reconcile_duration_seconds, openclaw_instance_phase a čítače automatických aktualizací.

Plánování na vyhrazené uzly

Pokud provozujete smíšený cluster, použijte nodeSelector a tolerations k připnutí agentů na vyhrazené uzly:

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

Přidání vlastních pravidel egress

Výchozí NetworkPolicy povoluje pouze DNS (port 53) a HTTPS (port 443). Pokud váš agent potřebuje dosáhnout na jiné služby (databázi, frontu zpráv, interní API), přidejte pravidla egress:

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

Identita poskytovatele cloudu

Pro AWS IRSA nebo GCP Workload Identity anotujte spravovaný ServiceAccount:

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

Firemní proxy a privátní CA

Pokud váš cluster používá TLS-interceptující proxy, injektujte CA balíček:

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

Operátor připojí CA balíček do všech kontejnerů a automaticky nastaví NODE_EXTRA_CA_CERTS.

GitOps

CRD OpenClawInstance je obyčejný YAML soubor. To znamená, že se přímo hodí do GitOps workflow. Uložte manifesty agentů do git repozitáře a nechte ArgoCD nebo Flux synchronizovat je s clusterem.

Typická struktura repozitáře:

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

Každá změna prochází pull requestem. Váš tým kontroluje diff. Merge do main a ArgoCD to aplikuje. Žádné kubectl apply z notebooků, žádný konfigurační drift, kompletní audit trail.

Hashování konfigurace operátoru to dělá obzvláště plynulým. Když ArgoCD synchronizuje změněnou spec.config.raw, operátor zjistí změnu hashe obsahu a automaticky spustí postupnou aktualizaci. Totéž platí pro rotaci secretů: operátor sleduje odkazované Secrety a restartuje pody, když se změní.

Zálohování a obnova

Operátor podporuje S3-kompatibilní zálohy. Když smažete instanci, operátor automaticky vytvoří zálohu workspace PVC před smazáním.

Pro obnovu agenta ze zálohy do nové instance:

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

Operátor stáhne snapshot, rozbalí jej do PVC a spustí agenta se všemi předchozími daty workspace, skilly a historií konverzací.

Lokální inference s Ollama

Pokud chcete, aby agenti používali lokální modely (kvůli soukromí, latenci nebo nákladům), operátor nabízí prvotřídní podporu Ollama. Není třeba ručně konfigurovat sidecar: spec.ollama řeší kontejner, předstahování modelů, úložiště a přidělení 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

Při povolení operátor:

  1. Přidá Ollama sidecar kontejner do podu
  2. Spustí init kontejner, který předem stáhne uvedené modely před spuštěním agenta
  3. Injektuje OLLAMA_HOST=http://localhost:11434 do hlavního kontejneru
  4. Přidělí požadovaný NVIDIA GPU přes limity prostředků nvidia.com/gpu

Ve výchozím stavu jsou modely uloženy v emptyDir svazku s konfigurovatelným limitem velikosti. Pro perzistentní úložiště modelů mezi restarty (aby se modely nestahovaly pokaždé znovu) použijte existující PVC:

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

Integrace Tailscale

Zpřístupněte svého agenta ve svém tailnetu bez Ingress, load balancerů nebo veřejných IP. Pole spec.tailscale operátoru řeší injekci autentizačního klíče, obohacení konfigurace a pravidla NetworkPolicy:

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

Vytvořte Secret s autentizačním klíčem s dočasným, znovupoužitelným klíčem z administrační konzole Tailscale:

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

V režimu serve (výchozí) mohou agenta dosáhnout pouze členové vašeho tailnetu. V režimu funnel ho Tailscale zpřístupní na veřejném internetu s automatickým HTTPS.

Operátor automaticky:

  • Injektuje proměnné prostředí TS_AUTHKEY a TS_HOSTNAME
  • Sloučí gateway.tailscale.mode a gateway.tailscale.resetOnExit do konfigurace OpenClaw
  • Přidá pravidla egress pro STUN a WireGuard do NetworkPolicy

Pro přihlášení SSO bez hesla pro členy tailnetu povolte authSSO:

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

Toto nastaví gateway.auth.allowTailscale=true v konfiguraci OpenClaw, což umožní členům tailnetu přistupovat k agentovi bez samostatného tokenu gateway.

Vlastní sidecary a init kontejnery

Pro použití nad rámec vestavěné podpory Ollama a Tailscale operátor přijímá libovolné sidecary a init kontejnery. Spusťte Cloud SQL Proxy pro přístup k databázi, forwarder logů nebo jakéhokoli jiného pomocníka vedle svého agenta:

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

Vlastní init kontejnery běží po vlastním init pipeline operátoru (seedování konfigurace, pnpm, Python, skilly):

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

Režim slučování konfigurace

Ve výchozím stavu operátor přepíše konfigurační soubor při každém restartu podu. Pokud váš agent za běhu modifikuje vlastní konfiguraci (přes skilly nebo sebemodifikaci), nastavte mergeMode: merge pro hluboké sloučení konfigurace operátoru s existující konfigurací PVC:

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

V režimu slučování mají klíče zadané operátorem přednost, ale klíče přidané agentem samotným přežijí restarty.

Kompletní příklad

Zde je produkčně připravený manifest kombinující vše z tohoto návodu:

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

Aplikujte jej a máte zabezpečeného, automaticky aktualizovaného AI agenta s prohlížečem, lokální inferencí, přístupem přes tailnet, monitorováním, zálohováním a síťovou izolací. Jeden kubectl apply.

Co získáte ihned

Bez dotyku jediného bezpečnostního nastavení každý agent nasazený operátorem obsahuje:

  • Běh mimo root (UID 1000)
  • Kořenový souborový systém pouze pro čtení
  • Všechny linuxové capabilities odstraněny
  • Seccomp RuntimeDefault profil
  • Výchozí deny NetworkPolicy (pouze DNS + HTTPS egress)
  • ServiceAccount na instanci bez automatického připojení tokenu
  • PodDisruptionBudget
  • Sondy liveness, readiness a startup
  • Automaticky generovaný autentizační token gateway
  • 5minutová rekonciliace driftu

Validační webhook blokuje pokusy o běh pod rootem a varuje před vypnutými NetworkPolicy, chybějícím TLS na Ingress a nedetekovanými klíči poskytovatele AI.

Další kroky

Pokud narazíte na problémy nebo máte zpětnou vazbu, otevřete issue na GitHubu. PR jsou také vítány.

Pokud nechcete Kubernetes provozovat sami, OpenClaw.rocks se o vše postará za vás. Vyberte plán, připojte kanál a váš agent je aktivní během sekund.