通过ACK集群使用ACS Agent Sandbox部署OpenClaw

更新时间:
复制为 MD 格式

本文介绍如何通过ACK集群使用ACS Agent Sandbox部署OpenClaw。

准备工作

步骤一:创建 ACK 集群并使用 ACS 算力

  1. 创建ACK托管集群,并创建新节点池

  2. 安装ACK Virtual Node组件启用ACS算力,组件版本需v2.13.0及以上。

  3. 升级Kube Scheduler组件版本。

    集群和组件版本要求

    集群版本

    Kube Scheduler组件版本

    v1.28

    v1.28.12-apsara-6.11.8.9edb0089及以上

    v1.30

    v1.30.3-apsara.6.11.11.2155fa7b及以上

    v1.31

    v1.31.0-apsara.6.11.7.17d202a9及以上

    v1.32

    v1.32.0-apsara.6.11.11.3187ac8f及以上

    v1.33

    v1.33.0-apsara.6.11.12及以上

    v1.34

    v1.34.0-apsara.6.11.12及以上

    v1.35

    v1.35.0-apsara.6.11.12及以上

  4. 安装Poseidon组件,勾选为 ACS/ECI 实例启用 TrafficPolicy,配置更细粒度的网络隔离。组件版本需0.7.0及以上,强烈建议升级至最新版本。

步骤二:安装 Sandbox 相关组件并配置域名

  1. 安装Ingress Controller组件。

    安装ACK支持的任一Ingress Controller组件,用于从集群外部访问sandbox-manager服务。后续步骤以安装ALB Ingress Controller组件为例,新建一个公网类型的ALB实例。

  2. 安装ack-agent-sandbox-controller组件。

    首次安装需要先授权AliyunCSManagedAgentSandboxRole角色访问您的云资源,参数可先按照默认设置,如有额外并发需求,可再提升对应资源规格。

  3. 安装ack-sandbox-manager组件。

    1. 准备域名。

      需准备一个公网或者私网域名。如果还没有域名,可以参考添加/删除内网权威域名 (Zone)域名注册快速入门 注册一个自己的域名。如果使用公网域名, 且ack-sandbox-manager服务部署在中国内地,还需要为域名进行网站备案本文以不存在的虚拟域名 agent-vpc.infra为例进行介绍。

    2. 配置组件参数。

      修改classNamealb,修改domainagent-vpc.infra,修改adminApiKey为自定义API Key,其他配置保持默认。组件安装完成后会在sandbox-system命名空间中创建一个名为sandbox-manager的路由。

    3. 若使用ALB Ingress Controller,还需同时为ALB实例和Ingress新增HTTPS:443监听配置。

      更新AlbConfig,为ALB实例新增HTTPS:443监听。

      1. 在左侧导航栏,选择工作负载 > 自定义资源。在资源对象浏览器页签中,搜索AlbConfig,然后单击搜索结果。

      2. AlbConfig资源对象列表中,找到目标资源alb,单击其右侧操作列下的YAML 编辑

      3. 新增spec.listeners.port: 443spec.listeners.protocol: HTTPS字段,然后单击确定

        image

      更新Ingress,关联HTTPS:443监听。

      1. 在左侧导航栏,选择网络 > 路由。在sandbox-manager路由右侧操作栏中,单击更新

      2. 添加以下配置,单击确定

        • 注解alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]

    4. 配置通配符域名证书

    5. 配置域名解析

步骤三:配置网络访问控制

安全组主要负责交换机级别和 VPC 边界的粗粒度防护,针对交换机网段、办公网网段、阿里云内网服务的整体防护,设定全局基线。TrafficPolicy 则负责 Pod 级别的细粒度微隔离,通过 IP段、Service 标签和域名(FQDN) 匹配业务逻辑。

  1. OpenClaw创建独立交换机。

    需要提前规划好网段,针对不同的网段:OpenClaw部署网段、API Server/集群管理组件/集群其他服务网段、SLS,NAS,OSS等云服务网段、内部服务网段,分别进行隔离配置。以下为OpenClaw申请独立交换机的示例。

    重要

    请勿在集群控制面交换机中添加为OpenClaw创建的独立交换机,避免异常网络隔离导致控制服务无法使用。

    VPC网段

    交换机

    交换机网段

    10.0.0.0/8

    vsw-openclaw-1

    10.10.0.0/16

    vsw-openclaw-2

    10.20.0.0/16

    vsw-apiserver及其他交换机

    控制面、sandbox-manager等管控组件、非OpenClaw工作负载所使用的交换机

    10.67.0.0/16, 10.89.0.0/16, 10.115.0.0/16

    1. 获取集群VPC。进入目标集群集群信息页面,在基本信息页签的网络部分,单击VPC链接。

    2. 创建交换机。进入专有网络页面,在资源管理页签的专有网络资源部分,单击交换机的添加。确保OpenClaw与集群其他服务的隔离,明确OpenClaw使用的网段范围,方便后续安全组管理和网络隔离。

    3. (可选)添加SNAT条目列表。如果需要访问外网且已经有SNAT,可以将当前交换机加到SNAT条目列表为集群开启访问公网的能力

    4. 部署OpenClaw预热池的模板中添加注解指定独立交换机。详细说明,请参见Pod指定交换机和安全组

      apiVersion: agents.kruise.io/v1alpha1
      kind: SandboxSet
      spec:
        template:
          metadata:
            annotations:
              network.alibabacloud.com/vswitch-ids: "vsw-****"  # 设置独享的vsw
      ...
  2. OpenClaw创建独立安全组。

    通常情况下,配置TrafficPolicy的策略即可满足安全隔离需求,安全组的策略主要提供一个兜底的能力,从安全的角度来说,提供了“容错和纵深防御”,在TrafficPolicy组件异常或者误操作放大了访问范围的时候,安全组依然能保证最基本的网络边界不被突破。建议用户在安全组中先保障基础连通性,再通过 TrafficPolicy 实现应用层细粒度访问控制。

    1. 进入目标集群集群信息页面,在基本信息页签的网络部分,单击VPC链接。

    2. 进入专有网络页面,在资源管理页签的专有网络资源部分,单击安全组的添加

    3. 配置安全组信息。仅允许特定交换机下的IP访问此交换机下的Sandbox实例,需避免过于细致的安全组规则配置,导致无法访问管控面,云服务等。如果在服务运行中对这些产品有依赖,请自行放通。更细致的网络管理建议通过TrafficPolicy管理。如果有在同交换机下的访问需求,则可以按需打开特定端口,比如9082(Poseidon)、443(API Server)、6443(API Server),更多安全组相关的端口配置,请参见配置集群安全组

    4. 进入已创建的安全组,在安全组详情页面中单击组内连通策略下方的修改组内网络连通策略,将安全组设置为组内隔离

    5. 部署OpenClaw预热池的模板中添加注解指定独立安全组。详细说明,请参见Pod指定交换机和安全组

      apiVersion: agents.kruise.io/v1alpha1
      kind: SandboxSet
      spec:
        template:
          metadata:
            annotations:
              network.alibabacloud.com/security-group-ids: "sg-****" #设置单独的企业安全组
      ...
  3. OpenClaw创建TrafficPolicy。

    可通过GlobalTrafficPolicyTrafficPolicy进行更加细致的网络隔离,请参见使用TrafficPolicy管理Agent网络访问

    1. 建议通过 GlobalTrafficPolicy 定义全集群公共安全策略,通过 TrafficPolicy 为不同应用设置特殊隔离策略,实现应用级精细控制。

      apiVersion: network.alibabacloud.com/v1alpha1
      kind: GlobalTrafficPolicy
      metadata:
        name: openclaw-global-policy
      spec:
        priority: 500
        selector: # 生效目标应用,OpenClaw本身的label
          matchLabels:
            app: openclaw # 需与SandboxSet模板中 Pod 的Labels保持一致
        egress:
          rules:
            # 禁止访问云产品元数据服务
            - action: deny
              to:
                - cidr: 100.100.100.200/32
            # 允许 DNS 服务
            - action: allow
              to:
                - service:
                    name: kube-dns
                    namespace: kube-system     
            # 如果使用动态挂载能力(NAS/OSS)需要放开特定网段
            - action: allow
              to:
              - fqdn: ****.nas.aliyuncs.com      # 替换成实际NAS接入点地址
              - fqdn: ****.oss-****.aliyuncs.com # 替换成实际OSS端点地址
            - action: deny
              to:
                - cidr: 192.168.0.0/16 # 内网
                - cidr: 172.16.0.0/12  # 内网
                - cidr: 10.0.0.0/8     # 内网
                - cidr: 100.64.0.0/10 
            - action: allow
              to:
                - cidr: 0.0.0.0/0 # 公网访问放开
        ingress:
          rules:
            - action: allow
              from:
                - service:
                    name: sandbox-gateway # 文件传输的网关
                    namespace: sandbox-system
                - service:
                    name: sandbox-manager # sandbox manager 入口
                    namespace: sandbox-system
                # 放行其他Service,如ack-agent-sandbox-controller
            - action: deny # 其他都不允许访问OpenClaw网段
              from:
                - cidr: 0.0.0.0/0
    2. 部署OpenClaw预热池的模板中添加注解指定网络策略。

      apiVersion: agents.kruise.io/v1alpha1
      kind: SandboxSet
      spec:
        template:
          metadata:
            annotations:
              # 开启网络策略管理
              network.alibabacloud.com/network-policy-mode: "traffic-policy"
              network.alibabacloud.com/enable-network-policy-agent: "true"
      ...
建议通过注解方式为OpenClaw指定独立的交换机、安全组和网络策略。除注解方式之外,也可使用eci-profile自动注入交换机、安全组等配置。

部署实践

步骤一:部署OpenClaw预热池

  1. 将以下内容保存为openclaw-sbs.yaml文件,然后执行kubectl apply -f openclaw-sbs.yaml命令申请SandboxSet资源。示例提供了一个基于OpenClaw官方镜像的预热池,通过spec.runtimes向容器中注入ACS Runtime。

    apiVersion: agents.kruise.io/v1alpha1
    kind: SandboxSet
    metadata:
      name: openclaw-sbs
      namespace: default
    spec:
      persistentContents:
        - filesystem
      replicas: 3
      runtimes:
        - name: agent-runtime  # 注入envd/agent-runtimebinary能力,方便使用e2b接口管理容器内部环境
      template:
        metadata:
          labels:
            app: openclaw
            alibabacloud.com/acs: "true" # 使用ACS算力
            alibabacloud.com/compute-class: agent-sandbox # Agent Sandbox 实例类型 
          annotations:
            network.alibabacloud.com/vswitch-ids: "vsw-****,vsw-****"  # 设置独享的vsw 10.10.0.0/16,10.20.0.0/16
            network.alibabacloud.com/security-group-ids: "sg-****" #设置单独的企业安全组
            # TrafficPolicy网络隔离
            network.alibabacloud.com/network-policy-mode: "traffic-policy"
            network.alibabacloud.com/enable-network-policy-agent: "true"
        spec:
          automountServiceAccountToken: false
          enableServiceLinks: false
          hostNetwork: false
          hostname: openclaw
          containers:
            - name: gateway
              # 镜像来源OpenClaw官方发布,仅供demo使用
              image: ghcr.io/openclaw/openclaw:2026.4.14
              securityContext:
                readOnlyRootFilesystem: false
                # node账号
                runAsUser: 1000
                runAsGroup: 1000
              command: ["openclaw", "gateway", "run", "--allow-unconfigured"]
              ports:
                - name: gateway
                  containerPort: 18789
                  protocol: TCP
              env:
                # 不同Linux账号使用不同的home路径
                - name: OPENCLAW_CONFIG_DIR
                  value: /home/node/.openclaw
                # 显式覆盖,避免暴露集群信息
                - name: KUBERNETES_SERVICE_PORT_HTTPS
                  value: ""
                - name: KUBERNETES_SERVICE_PORT
                  value: ""
                - name: KUBERNETES_PORT_443_TCP
                  value: ""
                - name: KUBERNETES_PORT_443_TCP_PROTO
                  value: ""
                - name: KUBERNETES_PORT_443_TCP_ADDR
                  value: ""
                - name: KUBERNETES_SERVICE_HOST
                  value: ""
                - name: KUBERNETES_PORT
                  value: ""
                - name: KUBERNETES_PORT_443_TCP_PORT
                  value: ""
              resources:
                requests:
                  cpu: 2
                  memory: 4Gi
                limits:
                  cpu: 2
                  memory: 4Gi
              startupProbe:
                exec:
                  command:
                    - node
                    - -e
                    - "require('http').get('http://127.0.0.1:18789/healthz', r => process.exit(r.statusCode < 400 ? 0 : 1)).on('error', () => process.exit(1))"
                initialDelaySeconds: 1
                periodSeconds: 2
                failureThreshold: 150

    自定义OpenClaw镜像说明

    本示例为确保对OpenClaw进程的容错能力,使用 YAML 的 command 字段显式指定 OpenClaw 的启动命令。如需自定义OpenClaw镜像,建议参考以下示例Dockerfile,使用Tini(可以回收OpenClaw启动的僵尸进程)或supervisor(进程级别容错,避免容器重启)启动OpenClaw。

    FROM ghcr.io/openclaw/openclaw:2026.4.14
    
    RUN apt update && \
        apt install -y supervisor tini && \
        rm -rf /var/cache/apt/*
  2. 查看SandboxSet以及对应的Sandbox是否已经就绪。

    kubectl get sbs openclaw-sbs

    预期输出:

    NAME           REPLICAS   AVAILABLE   UPDATEREVISION   AGE
    openclaw-sbs   3          3           59dc77f4b7       30m
  3. 查看Sandbox(简写sbx)运行状态。

    kubectl get sbx -l agents.kruise.io/sandbox-pool=openclaw-sbs -l agents.kruise.io/sandbox-claimed=false

    预期输出:

    NAME                 STATUS    AGE   SHUTDOWN_TIME   PAUSE_TIME   MESSAGE
    openclaw-sbs-df***   Running   12m
    openclaw-sbs-hz***   Running   30m
    openclaw-sbs-rd***   Running   18m

步骤二:为用户分配OpenClaw实例

E2B SDK方式

  1. 在本地环境中安装Python

  2. 安装E2B Python SDK(仅支持小于v2.25.0的版本)。

    pip install "e2b-code-interpreter==2.7.0" "e2b==2.24.0"
  3. 配置并申请Sandbox

    1. 创建openclaw-template.json文件。

      由于该文件所配置的访问控制和权限较大,请勿在生产环境中直接使用。
      {
          "agents": {
              "defaults": {
                  "model": {
                      "primary": "bailian/qwen3.5-plus"
                  },
                  "workspace": "~/.openclaw/workspace"
              }
          },
          "models": {
              "mode": "merge",
              "providers": {
                  "bailian": {
                      "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
                      "apiKey": "${DASHSCOPE_API_KEY}",
                      "api": "openai-completions",
                      "models": [
                          {
                              "id": "qwen3.5-plus",
                              "name": "通义千问",
                              "input": [
                                  "text"
                              ],
                              "contextWindow": 1000000,
                              "maxTokens": 65536
                          }
                      ]
                  }
              }
          },
          "commands": {
              "native": "auto",
              "nativeSkills": "auto",
              "restart": true,
              "ownerDisplay": "raw"
          },
          "gateway": {
              "port": 18789,
              "bind": "lan",
              "controlUi": {
                  "allowedOrigins": [
                      "*"
                  ],
                  "dangerouslyAllowHostHeaderOriginFallback": true,
                  "allowInsecureAuth": true,
                  "dangerouslyDisableDeviceAuth": true
              },
              "auth": {
                  "mode": "token",
                  "token": "${GATEWAY_TOKEN}"
              }
          }
      }
    2. 创建create_sandbox.py文件,读取上述配置模板并创建OpenClaw Sandbox。

      注意:请确保在运行脚本前已通过export.env文件设置了这些变量。

      GATEWAY_TOKEN: 自定义的OpenClaw网关访问令牌。

      DASHSCOPE_API_KEY: 阿里云百炼的 API Key,可前往百炼API Key页面获取。

      # Import and patch the E2B SDK
      import os
      from string import Template
      from e2b_code_interpreter import Sandbox
      
      # 注意为用户配置 never timeout。否则 sandbox/openclaw 在默认300s超时时间后,会被自动清理
      sbx: Sandbox = Sandbox.create(template="openclaw-sbs", metadata={
          "e2b.agents.kruise.io/never-timeout": "true"
      })
      print(f"sandbox id: {sbx.sandbox_id}")
      
      # 从本地环境变量中获取配置
      GATEWAY_TOKEN = os.environ.get("GATEWAY_TOKEN")
      DASHSCOPE_API_KEY = os.environ.get("DASHSCOPE_API_KEY")
      
      # 渲染 openclaw-template.json 文件, 并将渲染后的文件覆盖沙盒中 /home/node/.openclaw/openclaw.json 的内容,触发openclaw重启更新配置
      template_path = "openclaw-template.json"
      with open(template_path, "r") as f:
          template_content = f.read()
      
      rendered_content = Template(template_content).safe_substitute(
          GATEWAY_TOKEN=GATEWAY_TOKEN,
          DASHSCOPE_API_KEY=DASHSCOPE_API_KEY,
      )
      
      # 注意标明写文件使用的权限
      sbx.files.write("/home/node/.openclaw/openclaw.json", rendered_content, user="node")
      print("已将渲染后的配置写入沙盒 /home/node/.openclaw/openclaw.json")
  4. 执行代码创建OpenClaw Sandbox。

    uv run create_sandbox.py

    预期输出:

    sandbox id: default--openclaw-sbs-2t8wf
    已将渲染后的配置写入沙盒 /home/node/.openclaw/openclaw.json
  5. 获取更详细的Sandbox信息。

    kubectl describe sandbox openclaw-sbs-2t8wf -n default

    预期输出:

    ...
    Status:
      ...
      Phase:                   Running
      Pod Info:
        ...
        Node Name:                         virtual-kubelet-cn-zhangjiakou-c
        Pod IP:                            172.19.208.215
        Pod UID:                           e85e1ccb-4764-4c19-9a73-25228bc9ac8a
      Sandbox Ip:                          172.19.208.215
      Update Revision:                     52bb7wbwx

K8s SDK方式

本节介绍如何通过K8s SDK方式申请Sandbox实例。为了演示方便,下文采用 kubectl 命令行工具进行演示调用。

通过SandboxClaim获取Sandbox实例

  1. 使用 SandboxClaim 从预热池(SandboxSet)中动态获取一个可用的 Sandbox 实例。

    apiVersion: agents.kruise.io/v1alpha1
    kind: SandboxClaim
    metadata:
      name: openclaw-claim-user-a
    spec:
      templateName: openclaw-sbs     # 指定上文部署的 SandboxSet 名称
      replicas: 1                    # 申请的实例数量
      claimTimeout: 1m               # 获取可用实例的超时时间
      ttlAfterCompleted: 5m          # 任务完成后 CR 自动回收的延迟时间
      # 可为申请的资源打上自定义label,方便后期使用label selector进行管理
      # labels:
      #   user: user-a
  2. 观测SandboxClaim(简写:sbc)状态。

    kubectl get sbc openclaw-claim-user-a

    预期输出:

    NAME                    PHASE       TEMPLATE           DESIRED   CLAIMED   AGE
    openclaw-claim-user-a   Completed   openclaw-sbs   1         1         38s
  3. 根据 Label Selector 筛选出与该申请关联的 Sandbox 实例:

    kubectl get sbx -l agents.kruise.io/claim-name=openclaw-claim-user-a

    预期输出:

    NAME                 STATUS    AGE   CLAIMED   SHUTDOWN_TIME   PAUSE_TIME   MESSAGE
    openclaw-sbs-2t8wf   Running   42h   true

提取运行环境元数据

在对 Sandbox 内部环境进行操作前,需提取 Sandbox ID 和 访问密钥 (Token),请妥善保存以下变量:

  1. Runtime Sandbox ID
    格式为:${Namespace}--${SandboxName}
    在本示例中为:default--openclaw-sbs-2t8wf

  2. Runtime 访问密钥
    替换以下<YOUR_SANDBOX_NAME>为上一步输出的Sandbox名称,获取鉴权Token:

    kubectl get sandbox <YOUR_SANDBOX_NAME> -o jsonpath='{.metadata.annotations.agents\.kruise\.io/runtime-access-token}'

初始化 OpenClaw 环境

使用说明

  1. 支持使用自定义容器内部环境管理组件(Server/Client)。建议流量路由机制与 ACS Runtime 保持一致。若您采用自定义管理组件,可移除 spec.runtimes: agent-runtime 的自动注入逻辑。

  2. 您可以根据业务需求,在 Client 与 Sandbox Gateway 之间部署负载均衡(LB)代理,以实现请求转发、身份鉴权等功能。

推荐使用 Runtime Client 链路 进行初始化。该方式相比直接通过 K8s 原生运维,具有细粒度管理、高并发支持、权限控制更精细等优势。以下为E2B SDK操作示例。

  1. 在本地环境中安装Python

  2. 安装E2B Python SDK(仅支持小于v2.25.0的版本)。

    pip install "e2b-code-interpreter==2.7.0" "e2b==2.24.0"
  3. 连接Sandbox,修改OpenClaw配置并重启

    1. 创建openclaw-template.json文件。

      由于该文件所配置的访问控制和权限较大,请勿在生产环境中直接使用。
      {
          "agents": {
              "defaults": {
                  "model": {
                      "primary": "bailian/qwen3.5-plus"
                  },
                  "workspace": "~/.openclaw/workspace"
              }
          },
          "models": {
              "mode": "merge",
              "providers": {
                  "bailian": {
                      "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
                      "apiKey": "${DASHSCOPE_API_KEY}",
                      "api": "openai-completions",
                      "models": [
                          {
                              "id": "qwen3.5-plus",
                              "name": "通义千问",
                              "input": [
                                  "text"
                              ],
                              "contextWindow": 1000000,
                              "maxTokens": 65536
                          }
                      ]
                  }
              }
          },
          "commands": {
              "native": "auto",
              "nativeSkills": "auto",
              "restart": true,
              "ownerDisplay": "raw"
          },
          "gateway": {
              "port": 18789,
              "bind": "lan",
              "controlUi": {
                  "allowedOrigins": [
                      "*"
                  ],
                  "dangerouslyAllowHostHeaderOriginFallback": true,
                  "allowInsecureAuth": true,
                  "dangerouslyDisableDeviceAuth": true
              },
              "auth": {
                  "mode": "token",
                  "token": "${GATEWAY_TOKEN}"
              }
          }
      }
    2. 创建update-openclaw-json.py文件。以下示例通过 E2B SDK 经Sandbox Gateway远程连接到已分配的Sandbox,将 OpenClaw配置文件写入容器内/home/node/.openclaw/openclaw.json,触发OpenClaw自动重启并加载最新配置。

      注意:请确保在运行脚本前已通过export.env文件设置了这些变量。

      GATEWAY_TOKEN: 自定义的OpenClaw网关访问令牌。

      DASHSCOPE_API_KEY: 阿里云百炼的 API Key,可前往百炼API Key页面获取。

      import os
      from string import Template
      from e2b_code_interpreter import Sandbox
      from e2b.connection_config import ConnectionConfig
      from packaging.version import Version
      
      gateway_url = "sandbox-gateway.sandbox-system.svc.cluster.local:7788"
      # 可通过kubectl转发后,在本地测试 kubectl port-forward svc/sandbox-gateway -n sandbox-system 7788:7788
      # gateway_url = "127.0.0.1:7788"
      
      sandbox_id="default--openclaw-sbs-2t8wf"
      # 容器内驻守的运维Server鉴权token
      runtime_token = "<YOUR_RUNTIME_ACCESS_TOKEN>" # 需替换为前文提取的 Runtime 访问密钥
      
      config = ConnectionConfig(
          domain=gateway_url,
          api_key="dummy",
          sandbox_url=f"http://{gateway_url}",  # 按需使用http,或https
          extra_sandbox_headers={
              "X-Access-Token": runtime_token,
              "e2b-sandbox-id": sandbox_id,
              "e2b-sandbox-port": "49983",
          },
      )
      
      # 直接构造 Sandbox 对象
      sbx: Sandbox = Sandbox(
          sandbox_id="dummy",
          sandbox_domain="dummy",
          envd_version=Version("0.2.11"),
          envd_access_token="dummy",
          traffic_access_token=None,
          connection_config=config,
      )
      
      # 从本地环境变量中获取配置
      GATEWAY_TOKEN = os.environ.get("GATEWAY_TOKEN")
      DASHSCOPE_API_KEY = os.environ.get("DASHSCOPE_API_KEY")
      
      # 渲染 openclaw-template.json 文件
      template_path = "openclaw-template.json"
      with open(template_path, "r") as f:
          template_content = f.read()
      
      rendered_content = Template(template_content).safe_substitute(
          GATEWAY_TOKEN=GATEWAY_TOKEN,
          DASHSCOPE_API_KEY=DASHSCOPE_API_KEY,
      )
      
      # 将渲染后的文件覆盖沙盒中 /home/node/.openclaw/openclaw.json 的内容,触发openclaw重启更新配置
      # 注意标明写文件使用的权限
      sbx.files.write("/home/node/.openclaw/openclaw.json", rendered_content, user="node")
      print("已将渲染后的配置写入沙盒 /home/node/.openclaw/openclaw.json")
    3. 执行代码创建OpenClaw Sandbox。

      uv run update-openclaw-json.py

      预期输出:

      已将渲染后的配置写入沙盒 /home/node/.openclaw/openclaw.json

步骤三:访问OpenClaw

在本地浏览器中访问OpenClaw UI页面。

  • 方式一:通过E2B原生接口进行请求路由。

    访问URL格式为 https://<port>-<sandbox id>.your.domain.com/#token=<your token>。以本文为例:https://18789-default--openclaw-sbs-2t8wf.agent-vpc.infra/#token=clawdbot-****。其中token步骤二中自定义的GATEWAY_TOKEN

    如需在中国境内公网开放访问,请合规备案。如果使用的是私网域名,应该保证客户端处于可正确解析该域名的网络环境中。
  • 方式二:本地转发(仅限本地调试使用)。

    通过kubectl port-forward的方式将本地请求代理到对应Sandbox环境中,然后请求 http://127.0.0.1:18789/#token=clawdbot-****即可与OpenClaw交互。

    kubectl port-forward openclaw-sbs-2t8wf 18789:18789 -n default

image

Gateway的默认权限较大,请参考创建TrafficPolicy配置访问控制。

进阶使用

免责声明

本文档仅供参考,您需要根据实际业务需求自行确定技术选型、配置调整并评估业务影响。文档涉及的开源组件/软件/模型(如OpenClaw、E2B、Python等)由开源社区独立维护,因开源软件等本身缺陷导致的业务损失,阿里云不提供赔偿或补偿,您需主动维护ACK集群中已安装的软件,及时修复开源软件引起的缺陷和问题。