Sigurnosni istraživači pronašli su više od 135.000 OpenClaw instanci potpuno izloženih na internetu. Mnoge od njih bile su ranjive na udaljeno izvršavanje koda. Sigurnosna kriza OpenClaw je stvarna: kritični CVE-ovi, zlonamjerni skillovi i temeljni problem s načinom na koji većina implementacija upravlja autentifikacijom. Pokretanje OpenClaw na VPS-u s docker run je jednostavno. Sigurno pokretanje je sasvim drugi problem.

Kubernetes rješava taj problem. Dobivate mrežnu izolaciju, ograničenja resursa, automatska ponovno pokretanja i sigurnosne postavke čija bi ručna konfiguracija trajala satima. A s OpenClaw Kubernetes operatorom sve to dobivate iz jedne YAML datoteke.

Ovaj vodič vodi Vas od nule do produkcijski spremnog OpenClaw agenta na Kubernetes. Svaki YAML blok je spreman za kopiranje i lijepljenje.

Zašto operator

Pokretanje OpenClaw na Kubernetes je više od Deploymenta i Servicea. Trebate mrežnu izolaciju, upravljanje Secretima, trajnu pohranu, praćenje zdravlja, rollout konfiguracija i po želji automatizaciju preglednika. Ispravno povezivanje svega toga ručno je zamorno i podložno greškama.

Kubernetes operator kodira te zahtjeve u jedan Custom Resource. Deklarirate što želite, a operator to kontinuirano usklađuje s ispravnim Kubernetes objektima. To Vam daje:

  • Sigurnost prema zadanom. Svaki agent radi kao UID 1000, sve Linux capabilities uklonjene, Seccomp omogućen, root datotečni sustav samo za čitanje i zadana deny NetworkPolicy koja dopušta samo DNS i HTTPS izlazni promet. Bez ručnog ojačavanja.
  • Automatska ažuriranja s rollbackom. Operator provjerava OCI registar za nove verzije, izrađuje sigurnosnu kopiju radnog prostora, implementira ažuriranje i automatski vraća na prethodno stanje ako novi pod ne prođe provjere zdravlja.
  • Rollout konfiguracija. Promijenite spec.config.raw i operator otkriva promjenu hash vrijednosti sadržaja, pokrećući postupno ažuriranje. Isto vrijedi za rotaciju secreta.
  • Sigurnosno kopiranje i vraćanje. Automatska sigurnosna kopija radnog prostora na S3-kompatibilnu pohranu pri brisanju instance. Vraćanje u novu instancu iz bilo kojeg snapshota.
  • Autentifikacija gatewaya. Automatski generira gateway token po instanci. Bez ručnog uparivanja, bez mDNS-a (koji u Kubernetes ionako ne radi).
  • Detekcija odstupanja. Svakih 5 minuta operator provjerava odgovara li svaki upravljani resurs željenom stanju. Ako netko ručno uredi NetworkPolicy ili obriše PDB, to se vraća.

Preduvjeti

Trebate:

  • Kubernetes klaster (1.28+). Bilo koja sukladna distribucija radi: EKS, GKE, AKS, k3s ili lokalni Kind klaster za testiranje.
  • kubectl konfiguriran za Vaš klaster.
  • Instaliran helm v3.
  • API ključ od Vašeg AI pružatelja (Anthropic, OpenAI ili bilo koji OpenAI-kompatibilni endpoint).

Korak 1: Instalacija operatora

Operator se isporučuje kao OCI Helm chart. Jedna naredba ga instalira:

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

Provjerite radi li:

kubectl get pods -n openclaw-operator-system

Trebali biste vidjeti pod operatora u stanju Running. Operator također instalira validirajući webhook koji sprječava nesigurne konfiguracije (poput pokretanja kao root).

Korak 2: Stvaranje Secreta s API ključem

Pohranite API ključ Vašeg AI pružatelja u Kubernetes Secret. Operator će ga injektirati u kontejner agenta:

kubectl create namespace openclaw

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

Za OpenAI ili druge pružatelje koristite odgovarajuće ime varijable okoline (OPENAI_API_KEY, OPENROUTER_API_KEY itd.). U isti Secret možete uključiti više pružatelja.

Savjet: Za produkciju razmotrite korištenje External Secrets Operatora za sinkronizaciju ključeva iz AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager ili Azure Key Vault. Dokumentacija operatora sadrži detaljne primjere.

Korak 3: Implementacija prvog agenta

Stvorite datoteku pod imenom 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

Primijenite ga:

kubectl apply -f my-agent.yaml

Taj jedan resurs stvara StatefulSet, Service, ServiceAccount, Role, RoleBinding, ConfigMap, PVC, PDB, NetworkPolicy i Secret za gateway token. Operator sve usklađuje.

Korak 4: Provjera rada

Pratite pokretanje instance:

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

Kada faza pokaže Running i Ready je True, Vaš agent je aktivan. Provjerite zapise:

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

Za interakciju s agentom napravite port-forward gatewaya:

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

Zatim otvorite http://localhost:18789 u pregledniku.

Korak 5: Povezivanje kanala

OpenClaw podržava Telegram, Discord, WhatsApp, Signal i druge kanale za poruke. Svaki kanal se konfigurira putem varijabli okoline. Dodajte odgovarajući token u Vaš Secret:

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

Zatim ga referencirajte u instanci:

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

OpenClaw automatski otkriva token i aktivira kanal. Dodatna konfiguracija nije potrebna.


To pokriva osnove. Vaš agent radi, siguran je i dostupan. Ostatak ovog vodiča pokriva dodatne značajke koje možete aktivirati kada budete spremni.

Automatizacija preglednika

OpenClaw može pregledavati web, snimati zaslone i komunicirati sa stranicama. Operator to čini jednorečnim dodatkom. Pokreće ojačani Chromium sidecar u istom podu, povezan putem localhosta:

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

Operator automatski injektira varijablu okoline CHROMIUM_URL u glavni kontejner. Sidecar radi kao UID 1001 s root datotečnim sustavom samo za čitanje i vlastitim sigurnosnim kontekstom.

Skillovi i runtime ovisnosti

OpenClaw skillovi s ClawHub mogu se instalirati deklarativno. Operator pokreće init kontejner koji preuzima svaki skill prije pokretanja agenta:

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

Ako Vaši skillovi ili MCP serveri trebaju pnpm ili Python, omogućite ugrađene init kontejnere za runtime ovisnosti:

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

Init kontejneri instaliraju te alate na podatkovni PVC, tako da se održavaju između ponovnih pokretanja bez napuhavanja slike kontejnera.

Automatska ažuriranja

OpenClaw često izdaje nove verzije. Operator ih može automatski pratiti, izraditi sigurnosnu kopiju prije ažuriranja i vratiti se ako nešto pođe krivo:

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

Kada se nova verzija pojavi u registru, operator:

  1. Stvara sigurnosnu kopiju PVC radnog prostora na S3-kompatibilnu pohranu
  2. Ažurira image tag na StatefulSetu
  3. Čeka do healthCheckTimeout da pod prođe provjere dostupnosti
  4. Ako pod ne postane spreman, vraća prethodni image tag i sigurnosnu kopiju

Nakon 3 uzastopna neuspješna rollbacka operator pauzira automatska ažuriranja i postavlja uvjet za istragu.

Napomena: Automatsko ažuriranje nema učinka za slike fiksirane digestom (spec.image.digest). Ako fiksirate digestom, ažuriranja kontrolirate ručno.

Ojačavanje za produkciju

Operator je siguran prema zadanom. Evo dodatnih postavki za produkcijske implementacije.

Nadzor s Prometheus

Omogućite ServiceMonitor za prikupljanje metrika operatora i instanci:

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

Raspoređivanje na namjenske čvorove

Ako koristite miješani klaster, upotrijebite nodeSelector i tolerations za pričvršćivanje agenata na namjenske čvorove:

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

Dodavanje prilagođenih pravila za izlazni promet

Zadana NetworkPolicy dopušta samo DNS (port 53) i HTTPS (port 443). Ako Vaš agent treba dosegnuti druge usluge, dodajte pravila za izlazni promet:

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

Identitet pružatelja oblaka

Za AWS IRSA ili GCP Workload Identity annotirajte upravljani ServiceAccount:

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

Korporativni proxyji i privatni CA

Ako Vaš klaster koristi TLS proxy koji presreće promet, injektirajte CA paket:

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

Operator montira CA paket u sve kontejnere i automatski postavlja NODE_EXTRA_CA_CERTS.

GitOps

CRD OpenClawInstance je obična YAML datoteka. To znači da se izravno uklapa u GitOps radni tijek. Pohranite manifeste agenata u git repozitorij i dopustite ArgoCD ili Flux da ih sinkronizira s klasterom.

Tipična struktura repozitorija:

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

Svaka promjena prolazi kroz pull request. Vaš tim pregledava diff. Merge u main i ArgoCD ga primjenjuje. Bez kubectl apply s laptopa, bez konfiguracijskog odstupanja, potpuni revizijski trag.

Sigurnosno kopiranje i vraćanje

Operator podržava S3-kompatibilne sigurnosne kopije. Kada obrišete instancu, operator automatski stvara sigurnosnu kopiju PVC radnog prostora prije brisanja.

Za vraćanje agenta iz sigurnosne kopije u novu instancu:

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

Lokalno zaključivanje s Ollama

Ako želite da agenti koriste lokalne modele (za privatnost, latenciju ili troškove), operator nudi prvorazrednu podršku za Ollama. Nije potrebno ručno konfigurirati sidecar: spec.ollama upravlja kontejnerom, prethodnim preuzimanjem modela, pohranom i dodjelom 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

Za trajnu pohranu modela između ponovnih pokretanja koristite postojeći PVC:

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

Integracija s Tailscale

Izložite svog agenta tailnet mreži bez Ingress, load balancera ili javnih IP adresa. Polje spec.tailscale operatora upravlja injektiranjem ključa za autentifikaciju, obogaćivanjem konfiguracije i pravilima NetworkPolicy:

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

Stvorite Secret s ključem za autentifikaciju koristeći efemerni, višekratni ključ iz Tailscale administratorske konzole:

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

U načinu serve (zadano) samo članovi Vašeg tailneta mogu dosegnuti agenta. U načinu funnel Tailscale ga izlaže javnom internetu s automatskim HTTPS-om.

Za prijavu SSO bez lozinke za članove tailneta omogućite authSSO:

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

Prilagođeni sidecari i init kontejneri

Za slučajeve korištenja izvan ugrađene podrške za Ollama i Tailscale, operator prihvaća proizvoljne sidecare i init kontejnere:

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
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

Način spajanja konfiguracije

Prema zadanom operator prepisuje konfiguracijsku datoteku pri svakom ponovnom pokretanju poda. Ako agent modificira vlastitu konfiguraciju za vrijeme izvođenja, postavite mergeMode: merge:

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

U načinu spajanja ključevi koje je odredio operator imaju prednost, ali ključevi koje je agent sam dodao opstaju pri ponovnim pokretanjima.

Potpuni primjer

Evo produkcijski spremnog manifesta koji kombinira sve iz ovog vodiča:

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

Primijenite ga i imate ojačanog, automatski ažuriranog AI agenta s preglednikom, lokalnim zaključivanjem, pristupom tailnetu, nadzorom, sigurnosnim kopiranjem i mrežnom izolacijom. Jedan kubectl apply.

Što dobivate odmah

Bez diranja ijedne sigurnosne postavke, svaki agent implementiran operatorom dolazi sa:

  • Izvršavanje izvan roota (UID 1000)
  • Root datotečni sustav samo za čitanje
  • Sve Linux capabilities uklonjene
  • Seccomp RuntimeDefault profil
  • Zadana deny NetworkPolicy (samo DNS + HTTPS izlazni promet)
  • ServiceAccount po instanci bez automatskog montiranja tokena
  • PodDisruptionBudget
  • Sonde za liveness, readiness i startup
  • Automatski generirani token za autentifikaciju gatewaya
  • 5-minutno usklađivanje odstupanja

Validirajući webhook blokira pokušaje pokretanja kao root i upozorava na onemogućene NetworkPolicy, nedostajući TLS na Ingress i neotkrivene ključeve AI pružatelja.

Sljedeći koraci

Ako naiđete na probleme ili imate povratne informacije, otvorite issue na GitHubu. PR-ovi su također dobrodošli.

Ako ne želite sami upravljati Kubernetes, OpenClaw.rocks se brine o svemu za Vas. Odaberite plan, povežite kanal i Vaš agent je aktivan u sekundama.