OpenClaw su Kubernetes
Un punto di partenza minimale per eseguire OpenClaw su Kubernetes — non un deployment pronto per la produzione. Copre le risorse principali ed è pensato per essere adattato al tuo ambiente.Perché non Helm?
OpenClaw è un singolo container con alcuni file di configurazione. La personalizzazione interessante è nel contenuto dell’agente (file markdown, Skills, override di configurazione), non nel templating dell’infrastruttura. Kustomize gestisce gli overlay senza l’overhead di un chart Helm. Se il tuo deployment diventa più complesso, un chart Helm può essere aggiunto sopra questi manifest.Cosa ti serve
- Un cluster Kubernetes in esecuzione (AKS, EKS, GKE, k3s, kind, OpenShift, ecc.)
kubectlcollegato al tuo cluster- Una API key per almeno un provider di modelli
Avvio rapido
./scripts/k8s/deploy.sh --show-token stampa il token dopo il deployment.
Test locali con Kind
Se non hai un cluster, creane uno localmente con Kind:./scripts/k8s/deploy.sh.
Passo dopo passo
1) Deployment
Opzione A — API key nell’ambiente (un solo passaggio):--show-token con uno dei due comandi se vuoi che il token venga stampato su stdout per test locali.
2) Accedi al gateway
Cosa viene distribuito
Personalizzazione
Istruzioni dell’agente
ModificaAGENTS.md in scripts/k8s/manifests/configmap.yaml ed esegui di nuovo il deployment:
Configurazione del Gateway
Modificaopenclaw.json in scripts/k8s/manifests/configmap.yaml. Vedi Configurazione del Gateway per il riferimento completo.
Aggiungi provider
Esegui di nuovo con chiavi aggiuntive esportate:Namespace personalizzato
Immagine personalizzata
Modifica il campoimage in scripts/k8s/manifests/deployment.yaml:
Esposizione oltre port-forward
I manifest predefiniti effettuano il bind del gateway al loopback all’interno del pod. Questo funziona con kubectl port-forward, ma non funziona con un Service Kubernetes o un percorso Ingress che deve raggiungere l’IP del pod.
Se vuoi esporre il gateway tramite un Ingress o un load balancer:
- Modifica il bind del gateway in
scripts/k8s/manifests/configmap.yamldaloopbacka un bind non loopback che corrisponda al tuo modello di deployment - Mantieni abilitata l’autenticazione del gateway e usa un entrypoint con terminazione TLS corretta
- Configura la UI di controllo per l’accesso remoto usando il modello di sicurezza web supportato (ad esempio HTTPS/Tailscale Serve e origini consentite esplicite quando necessario)
Esegui nuovamente il deployment
Smantellamento
Note sull’architettura
- Per impostazione predefinita, il gateway effettua il bind al loopback all’interno del pod, quindi la configurazione inclusa è pensata per
kubectl port-forward - Nessuna risorsa con scope cluster — tutto vive in un singolo namespace
- Sicurezza:
readOnlyRootFilesystem, capabilitydrop: ALL, utente non root (UID 1000) - La configurazione predefinita mantiene la UI di controllo sul percorso di accesso locale più sicuro: bind loopback più
kubectl port-forwardversohttp://127.0.0.1:18789 - Se vai oltre l’accesso localhost, usa il modello remoto supportato: HTTPS/Tailscale più il bind gateway appropriato e le impostazioni di origine della UI di controllo
- I secret vengono generati in una directory temporanea e applicati direttamente al cluster — nessun materiale segreto viene scritto nel checkout del repo