全部產品
Search
文件中心

Container Compute Service:使用E2B SDK接入Agent Sandbox

更新時間:Jul 02, 2026

本文介紹如何通過E2B SDK接入ACS Agent Sandbox。

背景資訊

ACS Agent Sandbox相容E2B SDK,您可以使用E2B SDK建立、管理和串連Sandbox執行個體。Agent Sandbox基於OpenKruise Agents實現E2B協議相容,支援兩種E2B協議:

  • 原生協議(Native Protocol):每個Sandbox按連接埠使用獨立子網域名稱,訪問格式為<PORT>-<SANDBOX_ID>.DOMAIN,API入口為api.DOMAIN。需要泛網域名稱DNS解析和TLS認證,適合生產環境。

  • 私人協議(Private Protocol):所有Sandbox共用同一網域名稱,通過URL路徑區分,訪問格式為DOMAIN/kruise/<SANDBOX_ID>/<PORT>,API入口為DOMAIN/kruise/api。僅需單網域名稱,簡化網路設定並降低認證成本。

對比項

原生協議

私人協議

網域名稱要求

泛網域名稱(*.your.domain.com

單網域名稱(your.domain.com

TLS認證

泛網域名稱認證

單網域名稱認證

E2B SDK要求

原生支援

需安裝kruise-agents擴充包

適用情境

生產環境

測實驗證、快速整合

安裝組件

說明

如已安裝組件,請升級ack-agent-sandbox-controller組件版本至v0.5.14-release.1及以上,升級ack-sandbox-manager組件版本至v0.6.0及以上。

  1. 登入容器計算服務控制台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組件管理

  3. 安裝 Ingress Controller 和 Sandbox 相關組件。

    1. 安裝Ingress Controller組件。

      安裝ACS支援的任一Ingress Controller組件,用於從叢集外部存取sandbox-manager服務。後續步驟以安裝ALB Ingress Controller為例,建立一個公網類型的ALB執行個體。

    2. 安裝ack-agent-sandbox-controller組件。

      首次安裝需要先授權AliyunCSManagedAgentSandboxRole角色訪問您的雲資源,參數可先按照預設設定,如有額外並發需求,可再提升對應資源規格。

      關於該組件功能的詳細說明,請參見ack-agent-sandbox-controller

    3. 安裝ack-sandbox-manager組件。

      1. 準備E2B網域名稱。

        準備網域名稱、網域名稱解析和申請認證的詳細操作,請參見應用於生產環境

      2. 配置組件參數。

        修改classNamealb(即安裝Ingress Controller組件中自動建立的IngressClass),修改domain為實際網域名稱,修改adminApiKey為自訂API Key,其他配置保持預設。組件安裝完成後會在sandbox-system命名空間中建立一個名為sandbox-manager的路由。

        詳細參數說明

        配置項

        參數

        說明

        sandboxManager

        replicaCount

        sandbox-manager 執行個體個數,預設值為 3。

        E2B

        domain

        E2B網域名稱,請參考準備E2B網域名稱

        Enable E2B_API_KEY verification

        是否開啟 API_KEY 鑒權,預設開啟。

        adminApiKey

        開啟鑒權後,首次安裝時通過該配置項來指定最初的 Key。請替換為自訂的API Key。

        Controller

        logLevel

        controller日誌等級,預設為 1。

        resources.requests.cpu

        controller CPU資源請求,預設為 2。

        resources.requests.memory

        controller 記憶體資源請求,預設為 4Gi。

        Proxy

        resources.requests.cpu

        proxy CPU資源請求,預設為 2。

        resources.requests.memory

        proxy 記憶體資源請求,預設為 4Gi。

        Ingress

        className

        叢集中已配置的 IngressClass 名稱,如 albmse

      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欄位,然後單擊確定

          spec:
            config:
              addressAllocatedMode: Fixed
              addressType: Internet
              zoneMappings:
                - vSwitchId: vsw-xxx
                - vSwitchId: vsw-xxx
            listeners:
              - port: 80
                protocol: HTTP
              - port: 443
                protocol: HTTPS

        更新Ingress,關聯HTTPS:443監聽。

        1. 在左側導覽列,選擇網路 > 路由。在sandbox-manager路由右側操作欄中,單擊更新

        2. 添加以下配置,單擊確定

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

步驟一:建立預熱池

  1. 單擊左側導覽列自訂資源,選擇資源定義(CustomResourceDefinition)頁簽,單擊使用YAML建立資源

  2. 使用以下 YAML 建立 SandboxSet 資源。ack-sandbox-manager 會自動監聽並識別該資源,同步初始化名為 code-interpreter 的沙箱模板配置。

    啟用動態儲存裝置掛載功能,需要為容器開放特權容器(Privileged Container)和宿主機路徑(hostPath,/var/run/csi)的容器安全驗證,可以提交工單放開限制,但由此帶來的安全風險需要使用者承擔一定責任,相關機制請參見安全責任共擔模型
    apiVersion: agents.kruise.io/v1alpha1
    kind: SandboxSet
    metadata:
      name: code-interpreter
      namespace: default
    spec:
      runtimes:
      - name: csi           # 支援CSI掛載能力,建立的Sandbox會被注入對應的Sidecar
      - name: agent-runtime # 注入envd等環境管理工具
      replicas: 4
      template:
        metadata:
          labels:
            alibabacloud.com/acs: "true"
            alibabacloud.com/compute-class: agent-sandbox # Agent Sandbox 執行個體類型 
            alibabacloud.com/compute-qos: default # 算力品質 default/best-effort
        spec:
          automountServiceAccountToken: false
          containers:
          - image: registry-cn-zhangjiakou-vpc.ack.aliyuncs.com/acs/code-interpreter:v1.6 # 替換成實際叢集所在的地區
            imagePullPolicy: IfNotPresent
            name: sandbox
            resources:
              limits:
                cpu: "1"
                memory: 1Gi
              requests:
                cpu: "1"
                memory: 1Gi
                ephemeral-storage: 30Gi
          terminationGracePeriodSeconds: 30

    code-interpreter鏡像使用說明

    • 鏡像拉取registry-cn-zhangjiakou-vpc.ack.aliyuncs.com/acs/code-interpreter鏡像是 ACS 基於 e2b-code-interpreter 專案製作的樣本鏡像,相容 E2B 用戶端的run_code介面。為了提高鏡像拉取速度可將鏡像地址中的地區修改為實際的地區名字,或去除-vpc通過公網拉取。

      重要

      該鏡像僅用於示範和測試環境,不建議在生產環境使用。如需在生產環境中部署,請務必進行必要的安全強化、效能最佳化及功能增強,以滿足實際業務的安全性與穩定性要求。

    • 使用自訂鏡像:如需使用 E2B code-interpreter(直接使用或作為 base 鏡像),推薦選擇 ACS 提供的版本化鏡像。ACS 不保證運行時與 E2B 官方 latest 鏡像的相容性。如需要使用自訂鏡像,請確保鏡像滿足以下條件:

      1. 包含 cp、mv、mkdir 等基礎指令。

      2. 包含 bash 且可執行檔位於/bin/bash

      使用自訂鏡像時,E2B 的run_code方法暫時無法使用。

  3. 單擊左側導覽列容器組,選擇對應的命名空間,查看已建立的code-interpreter Sandbox。

    可通過kubectl get sbs命令查看 SandboxSet 資源,其中AVAILABLE表示已就緒的 Sandbox 數量。

步驟二:安裝E2B SDK

E2B SDK目前支援 Python、Java、Go 等多種程式設計語言。本文以 Python 語言為例進行說明,如需瞭解其他語言的詳細整合指南,請參考e2b-client

  1. 安裝Python環境。

  2. 安裝E2B Python SDK。Agent Sandbox僅支援低於v2.25.0的E2B SDK版本。

    pip install "e2b-code-interpreter==2.7.0" "e2b==2.24.0"

步驟三:配置E2B_DOMAIN

E2B_DOMAIN是E2B SDK串連sandbox-manager的網域名稱配置,用戶端與組件配置必須一致。

網域名稱的註冊與解析請參考Alibaba Cloud DNS

配置組件

以下樣本以ALB Ingress Controller為例,詳細操作請參考安裝組件及配置

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組件管理

  2. 在控制台組件管理中,搜尋 ack-sandbox-manager 組件,單擊配置並修改組件的domain參數,請將其修改為您的實際網域名稱。

    domain參數不帶*首碼。例如網域名稱為*.sandbox.example.com,則domain配置為sandbox.example.com
  3. (可選)如僅需通過 HTTP 協議訪問 SandboxManager(無需配置 TLS 認證),在同一配置介面取消勾選 Whether to enable TLS for ingress

配置用戶端

在本地環境中設定以下環境變數。

E2B_DOMAIN的值必須與ack-sandbox-manager組件的domain參數完全一致,否則SDK無法串連到sandbox-manager服務。
# 設定E2B_DOMAIN,與組件domain參數保持一致
export E2B_DOMAIN=<YOUR_E2B_DOMAIN>
# 設定E2B_API_KEY,與組件adminApiKey參數保持一致
export E2B_API_KEY=<YOUR_API_KEY>

(可選)步驟四:安裝認證

如果您需要通過 HTTPS 訪問 sandbox-manager,需要安裝 TLS 認證。建議使用受信任的CA認證。各種認證申請及配置方式,請參考以下文檔:

檢查 Secret 是否成功建立以及類型是否正確(應為 kubernetes.io/tls):

kubectl get secret sandbox-manager-tls -n sandbox-system

步驟五:選擇整合方式串連Sandbox

根據您的網路環境和需求,選擇以下整合方式之一串連Sandbox。

以下樣本code-interpreter 為佔位名,需替換為您實際建立的 SandboxSet 名稱。
  • 方式一:叢集外通過原生協議訪問:生產環境推薦,需泛網域名稱和TLS認證。

  • 方式二:叢集外通過私人協議訪問(HTTPS):單網域名稱即可,降低部署門檻。

  • 方式三:連接埠轉寄到本地調試:適合本地開發調試。

方式一:叢集外通過原生協議訪問

通過泛網域名稱將請求路由到sandbox-manager服務,每個Sandbox使用獨立子網域名稱。適合生產環境。

  1. 配置泛網域名稱DNS解析,將*.your.domain.com解析到叢集Ingress的外部IP。並為泛網域名稱配置認證

  2. 範例程式碼。

    from e2b_code_interpreter import Sandbox
    
    sbx = Sandbox.create(template="code-interpreter")
    print(f"sandbox id: {sbx.sandbox_id}")
    execution = sbx.run_code("print('hello, world')")
    print(f"run code result: {execution}")
    sbx.kill()

方式二:叢集外通過私人協議訪問(HTTPS)

通過單網域名稱和URL路徑區分不同Sandbox,僅需單網域名稱認證即可。適合測實驗證和快速整合。

網域名稱的註冊與解析請參考Alibaba Cloud DNS
  1. 安裝kruise-agents擴充包。

    pip install "git+https://github.com/openkruise/agents.git#subdirectory=sdk/customized_e2b"
  2. 配置單網域名稱DNS解析,將your.domain.com解析到叢集Ingress的外部IP。並為單網域名稱配置認證

  3. 範例程式碼。

    使用私人協議時,必須在匯入E2B SDK之前調用patch_e2b(),以將E2B SDK的請求路由切換為私人協議路徑。叢集外通過HTTPS訪問時傳入https=True
    from kruise_agents.patch_e2b import patch_e2b
    patch_e2b(https=True)
    
    from e2b_code_interpreter import Sandbox
    
    sbx = Sandbox.create(template="code-interpreter")
    print(f"sandbox id: {sbx.sandbox_id}")
    execution = sbx.run_code("print('hello, world')")
    print(f"run code result: {execution}")
    sbx.kill()

方式三:連接埠轉寄到本地調試

通過kubectl連接埠轉寄將sandbox-manager服務對應到本地,適合本地開發調試。

  1. 設定環境變數。E2B_DOMAIN需與sandbox-manager的domain參數保持一致,均設定為localhost

    export E2B_DOMAIN=localhost
    export E2B_API_KEY=<YOUR_API_KEY>
  2. 安裝kruise-agents擴充包。

    pip install "git+https://github.com/openkruise/agents.git#subdirectory=sdk/customized_e2b"
  3. 將sandbox-manager的Sandbox流量連接埠轉寄到本地80連接埠。7788為Sandbox流量連接埠,請根據實際Service連接埠調整。

    sudo kubectl port-forward services/sandbox-manager 80:7788 -n sandbox-system
  4. 使用私人協議,需在匯入E2B SDK前調用patch_e2b(https=False)。樣本如下:

    from kruise_agents.patch_e2b import patch_e2b
    patch_e2b(https=False)
    
    from e2b_code_interpreter import Sandbox
    
    sbx = Sandbox.create(template="code-interpreter")
    print(f"sandbox id: {sbx.sandbox_id}")
    execution = sbx.run_code("print('hello, world')")
    print(f"run code result: {execution}")
    sbx.kill()

E2B API相容性說明

E2B API相容性對照表

API

是否支援

說明

Sandbox.create

支援

建立並擷取Sandbox執行個體

Sandbox.get_info / Sandbox.list

支援

查詢Sandbox資訊

Sandbox.kill / Sandbox.beta_pause

支援

生命週期管理

Sandbox.connect / Sandbox.set_timeout

支援

串連和逾時管理

Sandbox.run_code / Sandbox.commands.run

run_code需Sandbox鏡像內建 code-interpreter 服務。

支援

代碼執行和命令運行

Sandbox.files.read / Sandbox.files.write

支援

檔案讀寫操作

Sandbox.upload_url / Sandbox.download_url

不支援

通過預簽名url上傳下載

logs / metrics / network

不支援

-

lifecycle events/ volumes

不支援

-

相關文檔