OpenClaw en Kubernetes
Un punto de partida mínimo para ejecutar OpenClaw en Kubernetes; no es una implementación lista para producción. Cubre los recursos principales y está pensado para adaptarse a tu entorno.¿Por qué no Helm?
OpenClaw es un único contenedor con algunos archivos de configuración. La personalización interesante está en el contenido del agente (archivos markdown, Skills, anulaciones de configuración), no en las plantillas de infraestructura. Kustomize gestiona overlays sin la sobrecarga de un chart de Helm. Si tu implementación se vuelve más compleja, se puede superponer un chart de Helm sobre estos manifiestos.Qué necesitas
- Un clúster de Kubernetes en ejecución (AKS, EKS, GKE, k3s, kind, OpenShift, etc.)
kubectlconectado a tu clúster- Una clave API para al menos un proveedor de modelos
Inicio rápido
./scripts/k8s/deploy.sh --show-token imprime el token tras la implementación.
Pruebas locales con Kind
Si no tienes un clúster, crea uno localmente con Kind:./scripts/k8s/deploy.sh.
Paso a paso
1) Implementar
Opción A: clave API en el entorno (un paso):--show-token con cualquiera de los dos comandos si quieres que el token se imprima en stdout para pruebas locales.
2) Acceder al gateway
Qué se implementa
Personalización
Instrucciones del agente
EditaAGENTS.md en scripts/k8s/manifests/configmap.yaml y vuelve a implementar:
Configuración del gateway
Editaopenclaw.json en scripts/k8s/manifests/configmap.yaml. Consulta Configuración del gateway para ver la referencia completa.
Añadir proveedores
Vuelve a ejecutar con claves adicionales exportadas:Namespace personalizado
Imagen personalizada
Edita el campoimage en scripts/k8s/manifests/deployment.yaml:
Exponer más allá de port-forward
Los manifiestos predeterminados enlazan el gateway a loopback dentro del pod. Eso funciona conkubectl port-forward, pero no funciona con una ruta Service o Ingress de Kubernetes que necesite alcanzar la IP del pod.
Si quieres exponer el gateway mediante un Ingress o balanceador de carga:
- Cambia el bind del gateway en
scripts/k8s/manifests/configmap.yamldeloopbacka un bind no loopback que coincida con tu modelo de implementación - Mantén habilitada la autenticación del gateway y usa un punto de entrada con terminación TLS adecuado
- Configura la UI de Control para acceso remoto usando el modelo de seguridad web compatible (por ejemplo HTTPS/Tailscale Serve y orígenes permitidos explícitos cuando sea necesario)
Volver a implementar
Desmontaje
Notas de arquitectura
- El gateway se enlaza a loopback dentro del pod de forma predeterminada, por lo que la configuración incluida es para
kubectl port-forward - No hay recursos con alcance de clúster; todo vive en un único namespace
- Seguridad:
readOnlyRootFilesystem, capacidadesdrop: ALL, usuario no root (UID 1000) - La configuración predeterminada mantiene la UI de Control en la ruta más segura de acceso local: bind a loopback más
kubectl port-forwardahttp://127.0.0.1:18789 - Si vas más allá del acceso localhost, usa el modelo remoto compatible: HTTPS/Tailscale más el bind adecuado del gateway y la configuración de origen de la UI de Control
- Los secretos se generan en un directorio temporal y se aplican directamente al clúster; no se escribe material secreto en la copia del repositorio