すべてのプロダクト
Search
ドキュメントセンター

Container Compute Service:ACK クラスターでのエージェントサンドボックスの作成

最終更新日:Jul 02, 2026

このトピックでは、コンポーネントのインストール、ウォームプールの作成、SDK の統合、本番環境向けのドメイン名と証明書の設定など、ACS クラスターに Agent Sandbox を作成する方法について説明します。

事前準備

  1. ACK クラスターの作成を行い、エージェントサンドボックスを有効化します。

  2. 既存のクラスターがある場合は、サービスを有効化した後に、次のコンポーネントをアップグレードする必要があります。

    1. acs-virtual-node コンポーネントを v2.17.0 以降にアップグレードします。

    2. Kube Scheduler コンポーネントのバージョンをアップグレードします。

      クラスターバージョン

      Kube Scheduler コンポーネントのバージョン

      v1.28

      v1.28.12-aliyun-1.4.6 以降

      v1.30

      v1.30.3-aliyun-1.6.2 以降

      v1.31

      v1.31.0-aliyun-1.5.2 以降

      v1.32

      v1.32.0-apsara.6.11.11.3187ac8f 以降

コンポーネントのインストール

説明

コンポーネントがインストールされている場合は、ack-agent-sandbox-controller コンポーネントを v0.5.14-release.1 以降に、ack-sandbox-manager コンポーネントを v0.6.0 以降にアップグレードしてください。

  1. ACS コンソールにログオンします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト ページで、目的のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、Add-ons を選択します。

  3. Ingress コントローラーとサンドボックス関連のコンポーネントをインストールします。

    1. Ingress コントローラーをインストールします。

      ACK でサポートされている Ingress コントローラーコンポーネントをインストールして、クラスターの外部から sandbox-manager サービスにアクセスします。次の手順では、ALB Ingress Controller のインストールを例に、新しいパブリック ALB インスタンスを作成します。

    2. ack-agent-sandbox-controller コンポーネントをインストールします。

      このコンポーネントを初めてインストールする場合は、クラウドリソースにアクセスするための AliyunCSManagedAgentSandboxRole ロールの権限を付与する必要があります。デフォルトのパラメーター設定を使用できます。より高い同時実行数が必要な場合は、リソース仕様を増やすことができます。

      このコンポーネントの機能の詳細については、「ack-agent-sandbox-controller」をご参照ください。

    3. ack-sandbox-manager コンポーネントをインストールします。

      1. E2B ドメイン名を準備します。

        ドメイン名の準備、DNS 名前解決の設定、証明書の申請の詳細については、「本番環境での使用」をご参照ください。

      2. コンポーネントのパラメーターを設定します。

        classNamealb (Ingress コントローラーコンポーネントをインストールするときに自動的に作成される IngressClass) に変更し、domain を実際のドメイン名に変更し、adminApiKey をカスタム API キーに変更します。他の設定はデフォルト値のままにします。コンポーネントがインストールされると、sandbox-system 名前空間に sandbox-manager という名前の Ingress が作成されます。

        パラメーター詳細

        パラメーター

        パラメーター

        説明

        sandboxManager

        replicaCount

        sandbox-manager インスタンスの数。デフォルト:3。

        E2B

        domain

        E2B ドメイン名。詳細については、「ドメイン名の準備」をご参照ください。

        Enable E2B_API_KEY verification

        API_KEY 認証を有効にするかどうかを指定します。この機能はデフォルトで有効になっています。

        adminApiKey

        認証が有効な場合、このパラメーターは最初のインストールのための初期キーを設定します。デフォルト値をカスタム API キーに置き換えてください。

        Controller

        logLevel

        コントローラーのログレベル。デフォルト:1。

        resources.requests.cpu

        コントローラーの CPU リソースリクエスト。デフォルト:2。

        resources.requests.memory

        コントローラーのメモリリソースリクエスト。デフォルト:4 Gi。

        Proxy

        resources.requests.cpu

        プロキシの CPU リソースリクエスト。デフォルト:2。

        resources.requests.memory

        プロキシのメモリリソースリクエスト。デフォルト:4 Gi。

        Ingress

        className

        クラスターで設定された IngressClass 名。例:albmse

      3. ALB Ingress コントローラーを使用する場合は、ALB インスタンスと Ingress の両方に HTTPS:443 リスナーを追加する必要もあります。

        AlbConfig を更新して、ALB インスタンスに HTTPS:443 リスナーを追加します。

        1. 左側のナビゲーションウィンドウで、ワークロード > カスタムリソースを選択します。リソースオブジェクト タブで、AlbConfig を検索してクリックします。

        2. AlbConfig リソースオブジェクトのリストで、対象のリソース alb を見つけ、その右側にある アクション 列の YAML の編集 をクリックします。

        3. spec.listeners.port: 443spec.listeners.protocol: HTTPS フィールドを追加し、OK をクリックします。

          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. 左側のナビゲーションバーで、ネットワーク > Ingress を選択します。sandbox-manager Ingress の アクション 列で、更新 をクリックします。

        2. 次の設定を追加し、OK をクリックします。

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

エージェントサンドボックスの作成

ステップ 1:ウォームプールの作成

ウォームプールは、SandboxSet カスタムリソースによって管理される、事前に作成されたサンドボックスレプリカのセットです。アプリケーションは、ウォームプールからすぐに使用できるサンドボックスを直接取得できるため、配信効率が大幅に向上します。
  1. 左側のナビゲーションウィンドウで、Custom Resources を選択します。CRDs タブで、Create from YAML をクリックします。

  2. 次の YAML を使用して SandboxSet リソースを作成します。ack-sandbox-manager はこのリソースを自動的に検出し、code-interpreter という名前のサンドボックステンプレート設定を初期化します。

    動的ストレージマウントを有効にするには、特権コンテナと hostPath (/var/run/csi) へのアクセスを許可する必要があります。チケットを送信することで、セキュリティ制限の解除を申請できます。ただし、関連するセキュリティリスクについてはお客様の責任となります。このメカニズムの詳細については、「責任共有モデル」をご参照ください。
    apiVersion: agents.kruise.io/v1alpha1
    kind: SandboxSet
    metadata:
      name: code-interpreter
      namespace: default
    spec:
      runtimes:
      - name: csi           # CSI マウントをサポートします。対応するサイドカーが新しいサンドボックスに挿入されます。
      - name: agent-runtime # envd などの環境管理ツールを挿入します。
      replicas: 4
      template:
        metadata:
          labels:
            alibabacloud.com/acs: "true"
            alibabacloud.com/compute-class: agent-sandbox # エージェントサンドボックスのインスタンスタイプ。 
            alibabacloud.com/compute-qos: default # コンピュート QoS: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 イメージは、ACK が e2b-code-interpreter プロジェクトに基づいて作成したサンプルイメージです。E2B クライアントの run_code インターフェイスと互換性があります。イメージのプル速度を向上させるには、イメージアドレスのリージョンを実際のリージョンに変更するか、-vpc を削除してパブリックネットワーク経由でイメージをプルします。

      重要

      このイメージはデモンストレーションおよびテスト目的のみであり、本番環境での使用は推奨されません。本番環境にデプロイする必要がある場合は、セキュリティと安定性の要件を満たすために、必要なセキュリティ強化、パフォーマンス最適化、および機能強化を実行してください。

    • カスタムイメージの使用:E2B code-interpreter イメージを直接、またはベースイメージとして使用する場合は、ACK が提供するバージョン管理されたイメージを使用してください。ACK は、E2B の公式のlatest イメージとのランタイム互換性を保証しません。カスタムイメージを使用する必要がある場合は、次の条件を満たしていることを確認してください:

      1. cpmvmkdir などの基本的なコマンドが含まれていること。

      2. bash が含まれており、実行可能ファイルが /bin/bash にあること。

      カスタムイメージを使用する場合、E2B の run_code メソッドは一時的に利用できなくなります。

  3. 左側のナビゲーションバーで Pods をクリックし、対応する名前空間を選択して、作成された code-interpreter サンドボックスを表示します。

    kubectl get sbs コマンドを実行して SandboxSet リソースを表示できます。ここで、AVAILABLE は準備完了のサンドボックスの数を示します。

サンドボックスが割り当てられると、SandboxSet は自動的に補充プロセスをトリガーして、ウォームプール内のインスタンス数を維持します。

ステップ 2:エージェントサンドボックスの取得

E2B SDK

  1. ローカル環境に Python をインストールします。

  2. E2B Python SDK をインストールします (v2.25.0 より前のバージョンのみがサポートされています)。

    pip install "e2b-code-interpreter==2.7.0" "e2b==2.24.0"
  3. 環境変数を設定します。

    # ack-sandbox-manager コンポーネントのインストール時に設定したデフォルトのドメイン名を使用します。アスタリスク (*) は含めないでください。実際の設定に基づいてこれを変更してください。
    export E2B_DOMAIN=your.domain.com
    # ack-sandbox-manager コンポーネントのインストール時に設定したデフォルトの API キーを使用します。実際の設定に基づいてこれを変更してください。
    export E2B_API_KEY=admin-987654321
  4. 次のコードを main.py ファイルとして保存します。

    # E2B SDK をインポート
    from e2b_code_interpreter import Sandbox
    sbx: Sandbox = Sandbox.create(template="code-interpreter")
    print(f"sandbox id: {sbx.sandbox_id}")
    result = sbx.run_code("print('hello, world')")
    print(f"run code result: {result}")
    text = input("enter some text to be saved to file 'text.txt' inside sandbox:  ")
    sbx.files.write("text.txt", text)
    print(f"read file from sandbox via files api: [{sbx.files.read('text.txt')}]")
    print(f"read file from sandbox via commands api: [{sbx.commands.run('cat text.txt')}]")
    input("press ENTER to kill the sandbox")
    print(sbx.kill())
                                

    create API:metadata パラメーターの詳細

    metadata パラメーターの使用方法の詳細については、「使用例」をご参照ください。

    キー

    説明

    e2b.agents.kruise.io/never-timeout

    サンドボックスを自動的にクリーンアップするかどうかを指定します。このパラメーターを true に設定すると、サンドボックスはタイムアウト期間に基づいて自動的にクリーンアップされません。

    • false

    • true

    e2b.agents.kruise.io/image

    リクエストされたサンドボックスのランタイムイメージを指定します。指定されたイメージがウォームプールで宣言されたものと異なる場合、インプレースイメージ更新が自動的に実行されます。

    特定のイメージ名。例:ghcr.io/openclaw/openclaw:****

    e2b.agents.kruise.io/wait-ready-timeout-seconds

    インプレースイメージ更新が完了するのを待つ最大時間を指定します。

    整数。デフォルト:60。

    e2b.agents.kruise.io/csi-volume-config

    サンドボックスをリクエストするときに、NAS または OSS ボリュームを動的にマウントします。複数のマウントポイントをサポートする JSON 文字列として設定を指定します。各マウントポイントは、次のパラメーターをサポートします:

    1. pvName:OSS または NAS ボリュームの PersistentVolume の名前。

    2. mountPath:サンドボックス内のマウントディレクトリ。

    3. subPath:OSS または NAS のバケットパス。絶対パスで指定します。

    volume_config = [

    {"pvName": "oss-pv-sandbox-system", "mountPath": "/home/data-oss1", "subPath": "data-subPath1","readOnly": true}]

    e2b.agents.kruise.io/claim-timeout-seconds

    利用可能なサンドボックスを待つ最大時間。時間制限を超えると、リクエストは失敗します。

    整数。デフォルト:60。

    e2b.agents.kruise.io/create-on-no-stock

    デフォルトでは、サンドボックスは常にウォームプールから取得されます。利用可能なサンドボックスがない場合、システムはそれらが補充されて準備が整うのを待ちます。このパラメーターを true に設定すると、システムは待機時間を短縮するためにウォームプールテンプレートから直接サンドボックスを作成します。

    • false

    • true

    デフォルト:false

    e2b.agents.kruise.io/skip-init-runtime

    インスタンスをリクエストするときに、サンドボックスインスタンスで Agent-runtime を初期化するかどうかを指定します。ランタイムプロセスが存在しない場合や、高度なカスタマイズが必要な場合は、これを false に設定できます。

    • false

    • true

    デフォルト:true

    e2b.agents.kruise.io/reserve-failed-sandbox

    サンドボックスの取得中にエラーが発生した場合、管理コンポーネントは異常なサンドボックスをすぐにクリーンアップします。これを true に設定すると、トラブルシューティングのために失敗したサンドボックスインスタンスが保持されます。

    • false

    • true

    デフォルト:false

    カスタムメタデータ

    サンドボックスをリクエストするときに、カスタムのキーと値のペアでインスタンスにアノテーションを追加できます。

    カスタム値を指定します。例:{"userId": "alice"}

  5. main.py ファイルを実行して、サンドボックスを作成および検証します。

    最初のプロンプトが表示された後、acs agent sandbox などのテキストを入力して ENTER キーを押します。この操作により、code-interpreter-29*** という名前の Pod の /home/user/text.txt ファイルに acs agent sandbox が書き込まれます。もう一度 ENTER キーを押すと、現在のサンドボックスは削除されます。
    python main.py

    想定される出力:

    sandbox id: default--code-interpreter-29***
    run code result: Execution(Results: [], Logs: Logs(stdout: ['hello, world\n'], stderr: []), Error: None)
    enter some text to be saved to file 'text.txt' inside sandbox:  acs agent sandbox
    read file from sandbox via files api: [acs agent sandbox]
    read file from sandbox via commands api: [CommandResult(stderr='', stdout='acs agent sandbox', exit_code=0, error='')]
    press ENTER to kill the sandbox
    True

SandboxClaim

サンドボックスがウォームプールから割り当てられると、自動補充プロセスがすぐに開始され、プールが迅速にバックフィルされます。

  1. 左側のナビゲーションウィンドウで、Custom Resources を選択します。CRDs タブで、Create from YAML をクリックします。

  2. 次の YAML を使用して SandboxClaim リソースを作成し、サンドボックスを取得します。

    apiVersion: agents.kruise.io/v1alpha1
    kind: SandboxClaim
    metadata:
      name: code-interpreter              # SandboxSet の名前。
      namespace: default                  # SandboxSet の名前空間。
    spec:  
      templateName: code-interpreter      # SandboxSet の名前。
      replicas: 1                         # SandboxSet から取得したいサンドボックスの数。
      claimTimeout: 5m                    # SandboxClaim のタイムアウト期間。 
      ttlAfterCompleted: 15m              # SandboxClaim が完了した後の Time-to-Live (TTL) 期間。TTL 期間が経過すると、SandboxClaim リソースは削除されます。取得したサンドボックスは削除されません。
  3. 左側のナビゲーションバーで Pods をクリックし、default 名前空間を選択して、code-interpreter-xxxxx という名前の新しいサンドボックスを表示します。

    kubectl get sbx -l agents.kruise.io/claim-name=code-interpreter コマンドでサンドボックスのステータスを取得できます。
Kubernetes SDK を使用してサンドボックスリソースを管理することもできます。

エージェントサンドボックスのコンテナイメージの置き換え

E2B SDK

次の Python コードをご参照ください。<YOUR_IMAGE> を実際のイメージアドレスに置き換えます。ウォームプールからサンドボックスを取得した後、metadata パラメーターを使用して、コンテナイメージを指定されたイメージに置き換えます。

from e2b_code_interpreter import Sandbox
# デフォルトのタイムアウト期間は 300 秒です。
sbx = Sandbox.create(template="some-template", timeout=300, metadata={
    # インプレース更新を実行して、サンドボックスコンテナのイメージを指定されたイメージに置き換えます。
    "e2b.agents.kruise.io/image": "<YOUR_IMAGE>"
})

SandboxClaim

<YOUR_IMAGE> を実際のイメージアドレスに置き換えます。

apiVersion: agents.kruise.io/v1alpha1
kind: SandboxClaim
metadata:
  name: my-sandbox-claim
  namespace: default
spec:
  templateName: code-interpreter    # SandboxSet ウォームプールの名前。
  replicas: 1
  claimTimeout: 5m
  ttlAfterCompleted: 15m
  inplaceUpdate:
    # 更新のターゲットイメージ。
    image: <YOUR_IMAGE> # cn-zhangjiakou を実際のリージョン ID に置き換えてください。 

エージェントサンドボックスのリソース仕様

ウォームプールからサンドボックスを割り当てるとき、インプレース垂直スケーリング (VPA) がサポートされます。これにより、Pod を再作成することなく、低スペックのサンドボックスインスタンスをスケールアップしてビジネス要件を満たすことができます。このアプローチは、ウォームプールの迅速なプロビジョニングと、多様なリソース需要を満たす柔軟性を兼ね備えています。

説明
  • 現在、調整できるのは CPU のみです。メモリやその他のリソース設定は無視され、メインコンテナのみが調整されます。詳細な制限と使用方法については、「CPU メトリックに基づくコンテナのインプレース垂直スケーリング」をご参照ください。

  • バージョンが 1.32 より前のクラスターでインプレーススケーリングを有効にするには、Add-ons[Kube API Server]InPlacePodVerticalScaling=true フィーチャーゲートを設定する必要があります。

ステップ 1:インプレーススケーリングの有効化

SandboxSet の spec.template.metadata.annotationsscaling.alibabacloud.com/enable-inplace-resource-resize: "true" を追加して、ウォームプール内のサンドボックスが割り当てられるときにインプレース VPA を実行できるようにします。

次の例では、より小さいリソース仕様でウォームプールを作成します。割り当て中にリソースを目的の仕様に動的にスケールアップできます。
apiVersion: agents.kruise.io/v1alpha1
kind: SandboxSet
metadata:
  name: code-interpreter
spec:
  template:
    metadata:
      annotations:
        # ウォームプールからサンドボックスが割り当てられるときにインプレース VPA を許可します。
        scaling.alibabacloud.com/enable-inplace-resource-resize: "true"
    spec:
      containers:
        - name: interpreter
          image: xxx
          resources:
            requests:
              cpu: 500m     
              memory: 1Gi 
            limits:
              cpu: 500m 
              memory: 1Gi
  replicas: 5  # ウォームインスタンスの数。

ステップ 2:ターゲットリソース仕様の宣言

ウォームプールからエージェントサンドボックスを割り当てる際に、次のいずれかの方法を使用して、CPU を指定されたサイズに動的にスケールアップできます:

E2B SDK

Sandbox.createmetadata で、事前定義されたキーを使用してターゲット CPU 仕様を指定します。

from e2b_code_interpreter import Sandbox
sbx = Sandbox.create(template="code-interpreter", metadata={
    "e2b.agents.kruise.io/cpu-request": "1000m",
    "e2b.agents.kruise.io/cpu-limit": "1000m"
})

SandboxClaim

SandboxClaim の spec.inplaceUpdate.resources フィールドでターゲットリソース仕様を宣言します。

apiVersion: agents.kruise.io/v1alpha1
kind: SandboxClaim
metadata:
  name: code-interpreter-vpa-claim
  namespace: default
spec:
  templateName: code-interpreter
  replicas: 1
  claimTimeout: 5m
  ttlAfterCompleted: 15m
  inplaceUpdate:  # ターゲットリソース仕様を宣言します。
    resources:
      requests:
        cpu: 1000m
      limits:
        cpu: 1000m

エージェントサンドボックスの削除

インスタンスを完全に削除するには、次のいずれかの方法でサンドボックスを削除します。

E2B SDK

E2B SDK を使用してサンドボックスインスタンスを削除します:<YOUR_SANDBOX_ID> を実際のサンドボックス ID に置き換えます。

from e2b_code_interpreter import Sandbox
sandbox = Sandbox.connect("<YOUR_SANDBOX_ID>")
sandbox.kill()

Sandbox CR

# コマンドを実行する前に、<NAMESPACE> をリソースの名前空間に、<RESOURCE_NAME> を CR の名前に置き換えてください。
kubectl -n <NAMESPACE> delete sandbox <RESOURCE_NAME>

本番環境

ドメイン名の準備

内部権威ドメイン (ゾーン) の追加または削除を参照して、ドメイン名 your.domain.com および *.your.domain.com を設定し、それらを Ingress アドレスに解決できます。アクセスが完全に ACS クラスター内にある場合は、クラスター内のヘッドレスサービスアドレスである sandbox-manager.sandbox-system.svc.cluster.local を直接使用することもできます。

証明書の取得

E2B クライアントは HTTPS を介してバックエンドにリクエストを送信できます。本番環境では、次のいずれかの方法で証明書を取得します。

方法 1:cert-manager

次の手順では、cert-manager を使用して sandbox-manager の自己署名証明書を管理およびデプロイする方法を示します。kubectl がインストールされており、cert-manager API を使用する権限があることを確認してください。

ステップ 1:cert-manager のインストール

公式ドキュメントを参照して、cert-manager v1.14 をインストールします。

新しいバージョンはコミュニティイメージレジストリ (quay.io) を使用するため、v1.14 の使用を推奨します。
ステップ 2:cert-manager で証明書を管理する
  1. cert-manager.yaml*.your.domain.comyour.domain.com をご自身のドメイン名に置き換えます。

    この YAML の例では、自己署名 CA 証明書を使用しています。独自の CA 証明書を使用することもできます。
  2. kubectl apply -f cert-manager.yaml コマンドを実行して、ACS クラスターに構成を追加します。

ステップ 3:証明書のステータスを検証する
  1. 証明書が正しく作成および発行されたことを確認します。

    kubectl get certificates -n sandbox-system
    kubectl describe certificate sandbox-manager-ingress-cert -n sandbox-system
    kubectl describe secret sandbox-manager-tls -n sandbox-system
  2. Ingress のステータスを確認します。

    kubectl get ingress sandbox-manager -n sandbox-system
    kubectl describe ingress sandbox-manager -n sandbox-system
ステップ 4:クライアントの信頼を設定する

自己署名証明書を使用している場合、クライアントはルート CA 証明書を信頼する必要があります。

  1. CA 証明書を取得します。

    kubectl get secret sandbox-ca-key-pair -n sandbox-system -o jsonpath='{.data.tls\.crt}' | base64 -d > ca.crt
  2. クライアントを設定します。環境変数 SSL_CERT_FILE を CA 証明書のパスに設定するか、CA 証明書をシステムのトラストストアに追加します。

    export SSL_CERT_FILE=/path/to/ca.crt

方法 2:自己署名証明書

ステップ 1:証明書の作成
  1. generate-certificates.sh スクリプトを使用して自己署名証明書を作成します。次のコマンドを実行して、スクリプトの使用方法を表示できます。

    bash generate-certificates.sh --help

    想定される出力:

    Usage: generate-certificates.sh [OPTIONS]
    Options:
      -d, --domain DOMAIN     Specify certificate domain (default: example.com)
      -o, --output DIR        Specify output directory (default: .)
      -D, --days DAYS         Specify certificate validity days (default: 365)
      -h, --help              Show this help message
    Examples:
      generate-certificates.sh -d myapp.example.com
      generate-certificates.sh --domain api.example.com --days 730
  2. generate-certificates.sh -d your.domain.com コマンドを実行して証明書を生成します。証明書が生成されると、次のファイルが作成されます:

    • fullchain.pem:サーバー証明書の公開鍵

    • privkey.pem:サーバー証明書の秘密鍵

    • ca-fullchain.pem:CA 証明書の公開鍵

    • ca-privkey.pem:CA 証明書の秘密鍵

    このスクリプトは、ネイティブ E2B プロトコルおよび OpenKruise カスタマイズ E2B プロトコルと互換性のある、単一ドメイン (your.domain.com) およびワイルドカードドメイン (*.your.domain.com) の証明書を生成します。

ステップ 2:証明書のインストール

次のコマンドを実行して、サーバー証明書から Ingress 用の TLS Secret を作成します:

kubectl create secret tls sandbox-manager-tls \
        --cert=fullchain.pem \
        --key=privkey.pem -n sandbox-system
証明書が有効になるまでに遅延が発生する場合があります。正確なタイミングは、使用している Ingress コントローラーによって異なります。
ステップ 3:クライアントの信頼を設定する

クライアントは、環境変数 SSL_CERT_FILE を、ステップ 1 で生成された CA 公開鍵 (ca-fullchain.pem) のファイルパスに設定する必要があります。

export SSL_CERT_FILE=/path/to/ca-fullchain.pem
python main.py # Python を使用して E2B SDK を呼び出します。

方法 3:パブリック証明書

ステップ 1:証明書の準備

E2B クライアントは HTTPS を使用してバックエンドにリクエストを送信する必要があります。本番環境では、パブリックドメイン証明書を取得することを推奨します。

次の例では、Let's Encrypt を使用して無料のテスト証明書を取得します (Let's Encrypt 証明書にはパブリックドメイン名が必要です)。

  1. システムのパッケージマネージャー (brew や snap など) を使用して certbot をインストールします。インストールの詳細については、公式ドキュメントをご参照ください。

  2. -d--email パラメーターを変更して、ワイルドカードドメイン your.domain.com の証明書を申請します。コマンドのプロンプトに従って、検証プロセスを完了します。

発行される証明書にはワイルドカードドメインと単一ドメインの両方が含まれるため、TXT レコード認証プロセスを 2 回連続で実行する必要があります。
sudo certbot certonly \
  --manual \
  --preferred-challenges=dns \
  --email your-email@example.com \
  --server https://acme-v02.api.letsencrypt.org/directory \
  --agree-tos \
  -d "your.domain.com" \
  -d "*.your.domain.com"
ステップ 2:証明書のエクスポート
sudo cp /etc/letsencrypt/live/your.domain.com/fullchain.pem ./fullchain.pem
sudo cp /etc/letsencrypt/live/your.domain.com/privkey.pem ./privkey.pem
ステップ 3:証明書のインストール
kubectl create secret tls sandbox-manager-tls \
  --cert=fullchain.pem \
  --key=privkey.pem \
  --namespace=sandbox-system

DNS 名前解決

次のコマンドを実行して、エンドポイント情報を表示します:

kubectl get ingress sandbox-manager -o jsonpath='{range .status.loadBalancer.ingress[*]}{.hostname}{.ip}{"\n"}{end}' -n sandbox-system

提供されたエンドポイント情報に基づいて、ドメイン your.domain.com または *.your.domain.com の DNS 名前解決を設定します。DNS 名前解決の詳細については、「クイックリンク」をご参照ください。

  • 出力が IP アドレス (47.114.***.*** など) の場合、ホストレコード *.your.domain.com を A レコードとしてその IP アドレスにマッピングします。

  • 出力が alb-*****62roo70i*****.cn-hangzhou.alb.aliyuncsslb.com のようなドメイン名である場合、ホストレコード *.your.domain.com を CNAME レコードとしてそのドメイン名に解決してください。

  • 複数のエンドポイントが返された場合は、レコードをいずれか 1 つに解決するか、すべてのエンドポイントに対してラウンドロビン DNS を設定できます。

よくある質問

ack-agent-sandbox-controller のインストールエラー:「[RAM Role AliyunCSManagedAgentSandboxRole is not granted]」

  1. Resource Access Management (RAM) コンソールに移動し、[ID] > [ロール] を選択します。AliyunCSManagedAgentSandboxRole を検索し、ロール名をクリックして詳細ページを開きます。

  2. [権限] タブで、AliyunCSManagedAgentSandboxRolePolicy ポリシーを選択し、[権限の削除] をクリックします。

  3. 権限付与リンクをクリックして、再度権限を付与します。