Kako implementirati OpenClaw na Kubernetes
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.rawi 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.
kubectlkonfiguriran za Vaš klaster.- Instaliran
helmv3. - 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:
- Stvara sigurnosnu kopiju PVC radnog prostora na S3-kompatibilnu pohranu
- Ažurira image tag na StatefulSetu
- Čeka do
healthCheckTimeoutda pod prođe provjere dostupnosti - 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
- Pregledajte potpunu API referencu za svako polje CRD-a
- Pročitajte vodiče za implementaciju za EKS, GKE, AKS i Kind
- Postavite lance rezervnih modela preko više AI pružatelja
- Konfigurirajte External Secrets za Vault, AWS, GCP ili Azure
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.