在 Kubernetes 集群上运行 OpenClaw Gateway 的最小化起点,使用 Kustomize 管理配置。

为什么用 Kustomize 而非 Helm

OpenClaw 是单容器应用,核心定制在 agent 内容(markdown、skills、config),而非基础设施模板。Kustomize 的 overlay 机制足够,无需 Helm 的额外开销。

前置条件

  • 运行中的 Kubernetes 集群(AKS、EKS、GKE、k3s、kind、OpenShift 等)
  • kubectl 已连接到集群
  • 至少一个模型 provider 的 API key

快速启动

# 设置 provider API key
export ANTHROPIC_API_KEY="..."
./scripts/k8s/deploy.sh
 
# 访问 Gateway
kubectl port-forward svc/openclaw 18789:18789 -n openclaw
open http://localhost:18789
 
# 获取 gateway token
kubectl get secret openclaw-secrets -n openclaw \
  -o jsonpath='{.data.OPENCLAW_GATEWAY_TOKEN}' | base64 -d

本地测试(Kind)

./scripts/k8s/create-kind.sh           # 自动检测 docker 或 podman
./scripts/k8s/deploy.sh
./scripts/k8s/create-kind.sh --delete  # 清理

部署内容

Namespace: openclaw
├── Deployment/openclaw        # 单 Pod,init container + gateway
├── Service/openclaw           # ClusterIP,端口 18789
├── PersistentVolumeClaim      # 10Gi,存储 agent 状态和配置
├── ConfigMap/openclaw-config  # openclaw.json + AGENTS.md
└── Secret/openclaw-secrets    # Gateway token + API keys

常用定制

# 添加多个 provider
export ANTHROPIC_API_KEY="..."
export OPENAI_API_KEY="..."
./scripts/k8s/deploy.sh --create-secret
 
# 自定义 namespace
OPENCLAW_NAMESPACE=my-namespace ./scripts/k8s/deploy.sh
 
# 直接 patch Secret
kubectl patch secret openclaw-secrets -n openclaw \
  -p '{"stringData":{"OPENAI_API_KEY":"..."}}'
kubectl rollout restart deployment/openclaw -n openclaw

安全特性

  • readOnlyRootFilesystem
  • drop: ALL capabilities
  • 非 root 用户(UID 1000)
  • 默认 loopback 绑定,通过 kubectl port-forward 访问

暴露到集群外

默认绑定到 loopback,若需通过 Ingress 或 LoadBalancer 暴露:

  1. 修改 configmap.yaml 中 gateway bind 为非 loopback 模式
  2. 启用 TLS 终止
  3. 配置 gateway.controlUi.allowedOrigins

重新部署与清理

./scripts/k8s/deploy.sh          # 重新部署
./scripts/k8s/deploy.sh --delete # 删除所有资源(含 PVC)

相关链接