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

Container Service for Kubernetes:ACK 異種コンフィデンシャルコンピューティングクラスターで vLLM 推論サービスを安全にデプロイする

最終更新日:Sep 16, 2025

大規模言語モデル (LLM) の推論には、機密データとコアモデル資産が含まれており、信頼できない環境で実行されると漏洩のリスクがあります。Container Service for Kubernetes (ACK) Confidential AI (ACK-CAI) は、Intel Trust Domain Extensions (TDX) や GPU Trusted Execution Environments (TEE) などのハードウェアベースのコンフィデンシャルコンピューティング技術を統合することにより、モデル推論にエンドツーエンドのセキュリティを提供します。

ACK-CAI を使用すると、vLLM 推論サービスを ACK 異種コンフィデンシャルコンピューティングクラスターにデプロイできます。これにより、モデルとデータに対して安全な分離と暗号化による保護が提供されます。主な利点は次のとおりです。

  • ハードウェアレベルのセキュリティ分離: Intel® TDX と NVIDIA GPU TEE を使用してハードウェアベースの TEE を構築し、計算中のモデルとデータの機密性と完全性を確保します。

  • 信頼できる鍵配布: リモートアテステーションメカニズムを使用して、実行環境の完全性を厳密に検証します。検証が成功した後にのみ、別のトラスティサービスがモデル復号鍵を信頼できる環境にリリースします。

  • エンドツーエンドのデータ暗号化: Trusted Network Gateway (TNG) を介してクライアントからサーバーへの暗号化チャネルを確立し、送信中の推論リクエストとレスポンスを保護します。

  • アプリケーションへの非侵入: Kubernetes Webhook を使用して、セキュリティコンポーネントをポッドに自動的にインジェクトします。ビジネスコードやコンテナイメージを変更することなく、単純なアノテーションでアプリケーションのコンフィデンシャルコンピューティング機能を有効にできます。

仕組み

ACK-CAI は、Trustiflux と呼ばれる一連のサイドカーコンテナをアプリケーションポッドに動的にインジェクトすることにより、透明なコンフィデンシャルコンピューティング機能を有効にします。コアセキュリティメカニズムはリモートアテステーションに基づいており、モデルとデータが検証済みの信頼できる環境内でのみアクセスされることを保証します。

コアコンポーネント

  1. ACK 異種コンフィデンシャルコンピューティングクラスター: TDX コンフィデンシャルインスタンスと GPU コンフィデンシャルコンピューティング機能に基づいて構築された Kubernetes クラスター。

  2. Trustee リモートアテステーションサービス: 実行環境の信頼性を検証し、検証が成功した後にモデル復号鍵を配布します。

  3. Runtime Trustiflux: サイドカーとして提供されるコンフィデンシャルコンピューティングランタイムコンポーネントで、以下のコアモジュールが含まれます。

    • アテステーションエージェント (AA): リモートアテステーションを実行し、復号鍵を取得します。

    • コンフィデンシャルデータハブ (CDH): 暗号化されたデータの復号を処理します。

    • TNG サーバー: サービスのための安全な通信チャネルを確立します。

    • Cachefs: モデル復号の基盤となるサポートを提供します。

  4. 推論サービス: 実際の LLM 推論タスクを実行するコンテナ。

  5. 推論プログラム: モデル推論サービスにアクセスするために使用されるクライアント側のアプリケーション。

  6. TNG クライアント: クラスターとの安全な通信チャネルを確立し、通信のセキュリティを確保します。

コアセキュリティメカニズム

  • リモートアテステーションによる暗号化モデル配布:

    1. ポッドが開始されると、サイドカー内の AA が Trustee リモートアテステーションサービスにリクエストを送信します。

    2. Trustee サービスは、CPU (TDX) と GPU のコンフィデンシャル環境の完全性を検証します。

    3. 検証後、Trustee サービスはモデル復号鍵をポッドに安全に配布します。

    4. サイドカー内の CDH と Cachefs はこの鍵を使用して暗号化されたモデルファイルを復号し、それらを推論サービスコンテナにマウントします。

  • リモートアテステーションによるエンドツーエンドの暗号化推論:

    1. エンドユーザーの推論プログラムは、ローカルの TNG クライアントを介してリクエストを送信します。

    2. リクエストは、中間者攻撃を防ぐために転送中ずっと暗号化されたままです。

    3. サーバー側では、リクエストは推論サービスに渡される前にサイドカー内の TNG モジュールによって復号されます。

    4. 推論結果は TNG によって暗号化され、クライアントに安全に返されます。

プロセスと環境ガイド

安全な vLLM 推論サービスのデプロイとアクセスには、以下の段階が含まれます。

ステップ

目的

環境

ステップ 1: 暗号化モデルの準備

推論モデルを暗号化し、Object Storage Service (OSS) にアップロードして、保存時の機密性を確保します。

データ準備用の別のサーバー。

ステップ 2: Trustee リモートアテステーションサービスのデプロイ

環境の検証と鍵の配布のための信頼のルートとして機能するスタンドアロンの Trustee サービスをデプロイします。

別の Trustee サーバー。

ステップ 3: ACK コンフィデンシャルコンピューティングクラスターの構成

コンフィデンシャルコンピューティングタスクを実行するための Kubernetes ノードを作成および構成します。

  • ACK コンソールと Elastic Compute Service (ECS) コンソール

  • ecs.gn8v-tee インスタンスのシェル環境

ステップ 4: ACK-CAI コンポーネントのデプロイ

クラスターに CAI コンポーネントをインストールして、セキュリティ機能の動的インジェクションを有効にします。

ACK コンソール

ステップ 5: vLLM サービスのデプロイ

Helm を使用して vLLM サービスをクラスターにデプロイし、アノテーションでコンフィデンシャルコンピューティング保護を有効にします。

kubectl と Helm が構成され、API サーバーに接続されているマシン。

ステップ 6: 推論サービスへの安全なアクセス

クライアント側のセキュリティプロキシを開始して、暗号化されたチャネルを介してデプロイされたモデルサービスにアクセスします。

クライアント環境

ステップ 1: 暗号化モデルの準備

このステップでは、モデルデータを暗号化し、安全な配布の準備として OSS にアップロードする方法について説明します。

実行環境: セキュリティを確保するため、これらの手順は一時的な隔離された ECS インスタンスで実行してください。最適なパフォーマンスを得るには、このインスタンスを OSS バケット と同じリージョンに配置して、高速な内部ネットワークアップロードを活用することをお勧めします。
モデルファイルはサイズが大きく、このプロセスには時間がかかる場合があります。ソリューションを迅速にテストするには、このステップをスキップできます。サンプル暗号化モデルファイル を使用し、ステップ 2: Trustee リモートアテステーションサービスのデプロイ に進んでください。

1. モデルのダウンロード

モデルをデプロイする前に、まずそれを暗号化し、クラウドストレージにアップロードする必要があります。モデルを復号するための鍵は、リモートアテステーションサービスによって制御される KMS によってホストされます。モデルの暗号化操作は、ローカルまたは信頼できる環境で実行してください。このソリューションでは、例として Qwen2.5-3B-Instruct をデプロイする方法を示します。

説明

すでにモデルをお持ちの場合は、ダウンロードする必要はありません。2. モデルの暗号化 に進んでください。

ターミナルで次のコマンドを実行し、ModelScope ツールを使用して Qwen2.5-3B-Instruct をダウンロードします (Python 3.9 以降が必要です)。

pip3 install modelscope importlib-metadata
modelscope download --model Qwen/Qwen2.5-3B-Instruct

このコマンドは、モデルを ~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/ にダウンロードします。

2. モデルの暗号化

このソリューションは、オープンソースの AES-256-GCM 標準に基づく gocryptfs 暗号化モードを使用したモデル暗号化をサポートしています。

  1. Gocryptfs ツールをインストールします。現在、デフォルトパラメーターの Gocryptfs V2.4.0 のみがサポートされています。次のいずれかのインストール方法を選択してください。

    方法 1: (推奨) yum ソースからのインストール

    Alinux3 または AnolisOS 23 オペレーティングシステムを使用している場合は、yum ソースを使用して gocryptfs をインストールできます。

    Alinux 3
    sudo yum install gocryptfs -y
    AnolisOS 23
    sudo yum install anolis-epao-release -y
    sudo yum install gocryptfs -y

    方法 2: プリコンパイル済みバイナリの直接ダウンロード

    # プリコンパイル済みの Gocryptfs パッケージをダウンロード
    wget https://github.jobcher.com/gh/https://github.com/rfjakob/gocryptfs/releases/download/v2.4.0/gocryptfs_v2.4.0_linux-static_amd64.tar.gz
    
    # 展開してインストール
    tar xf gocryptfs_v2.4.0_linux-static_amd64.tar.gz
    sudo install -m 0755 ./gocryptfs /usr/local/bin
  2. モデル暗号化の鍵として Gocryptfs 鍵ファイルを作成します。後続のステップで、この鍵を Trustee にアップロードする必要があります。

    このソリューションでは、alibaba@1688 が暗号化の鍵であり、cachefs-password ファイルに保存されます。鍵をカスタマイズすることもできます。ただし、実際には、ランダムに生成された強力な鍵を使用することが最善です。

    cat << EOF > ~/cachefs-password
    alibaba@1688
    EOF
  3. 鍵を使用してモデルを暗号化します。

    1. プレーンテキストモデルのパスを構成します。

      説明

      ダウンロードしたプレーンテキストモデルのパスを構成するか、独自のモデルのパスに置き換えてください。

      PLAINTEXT_MODEL_PATH=~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/
    2. Gocryptfs を使用してモデルディレクトリツリーを暗号化します。

      暗号化後、モデルは ./cipher ディレクトリに暗号化された形式で保存されます。

      mkdir -p ~/mount
      cd ~/mount
      mkdir -p cipher plain
      
      # Gocryptfs ランタイム依存関係をインストール
      sudo yum install -y fuse
      
      # gocryptfs を初期化
      cat ~/cachefs-password | gocryptfs -init cipher
      
      # plain にマウント
      cat ~/cachefs-password | gocryptfs cipher plain
      
      # AI モデルを ~/mount/plain に移動
      cp -r ${PLAINTEXT_MODEL_PATH} ~/mount/plain

3. モデルのアップロード

デプロイする異種インスタンスと同じリージョンにある OSS バケットを準備します。次に、暗号化されたモデルを OSS バケットにアップロードします。これにより、後続の操作のために異種インスタンスからモデルデータをプルしてデプロイできます。

OSS コンソールを使用した開始」ガイドを参照して、ストレージスペース (バケット) と qwen-encrypted という名前のディレクトリ (例: oss://examplebucket/qwen-encrypted/) を作成します。モデルファイルのサイズが大きいため、ossbrowser を使用して暗号化モデルをこのディレクトリにアップロードすることをお勧めします。

ステップ 2: Trustee リモートアテステーションサービスのデプロイ

ゼロトラストの原則に従い、コンフィデンシャルコンピューティング環境は、モデル復号鍵などの機密データにアクセスする前に検証される必要があります。

このステップでデプロイするスタンドアロンの Trustee サービスは、この検証プロセスの中央機関として機能します。その役割は次のとおりです。

  • モデルと推論サービスの実行環境を検証します。

  • モデル復号鍵が検証済みの信頼できる環境にのみリリースされることを保証します。

  • クライアントが推論リクエストを開始する際にサービスの信頼性を確認できるようにします。

実行環境: ACK クラスターの外部にデプロイされた専用の別サーバー (ECS インスタンスやオンプレミスサーバーなど)。

1. デプロイソリューションの選択

必要な信頼レベルに基づいて、次のソリューションから選択します。

  • ECS インスタンス

    同じ VPC 内の別の ECS インスタンスに Trustee サービスをデプロイすると、論理的な分離と、ACK クラスターとの高速で安全な内部ネットワーク通信の両方が提供されます。

  • オンプレミスサーバー

    最大限のセキュリティを確保するために、Trustee サービスをデータセンターにデプロイし、専用回線または VPN を介して VPC に接続します。これにより、クラウドプロバイダーから独立して、信頼のルートのハードウェアおよびソフトウェア環境を完全に制御できます。

開始する前に、サーバーでインターネットアクセスが有効になっており、ポート 8081 が開いていることを確認してください。

2. Trustee サービスのデプロイ

  1. 公式 YUM リポジトリから Trustee RPM パッケージをインストールします (Alibaba Cloud Linux 3.x および Anolis 8.x+ で利用可能)。

    yum install trustee-1.5.2

    サービスは自動的に開始され、ポート 8081 でリッスンします。URL http://<trustee-ip>:8081/api を使用してネットワーク経由で直接アクセスできます。

    <trustee-ip> を Trustee がデプロイされているサーバーの IP アドレスに置き換えてください。
    本番環境では、セキュリティを強化するために Trustee の HTTPS アクセスを構成してください。
  2. サービスの正常性を確認します。

    sudo yum install -y jq を実行して jq ツールをインストールします。
    # <trustee-ip> を trustee サーバーの IP アドレスに置き換えます
    curl http://<trustee-ip>:8081/api/services-health | jq

    成功した応答では、すべてのコンポーネントのステータスが ok と表示されます。

    {
      "gateway": {
        "status": "ok",
        "timestamp": "2025-08-26T13:46:13+08:00"
      },
      "kbs": {
        "status": "ok",
        "timestamp": "2025-08-26T13:46:13+08:00"
      },
      "as": {
        "status": "ok",
        "timestamp": "2025-08-26T13:46:13+08:00"
      },
      "rvps": {
        "status": "ok",
        "timestamp": "2025-08-26T13:46:13+08:00"
      }
    }

一般的な管理コマンド

Trustee サービスは systemd によって管理されます。systemctl コマンドを使用してそのライフサイクルを管理できます。一般的な操作は次のとおりです。

  • サービスの開始: systemctl start trustee

  • サービスの停止: systemctl stop trustee

  • サービスの再起動: systemctl restart trustee

  • ステータスの表示: systemctl status trustee

3. モデル復号鍵を Trustee インスタンスにインポートする

Trustee サービスがデプロイされたら、モデル復号鍵を提供する必要があります。この鍵は、リモートアテステーションと安全な鍵配布プロセスに必要です。

Trustee は、ローカルファイルパスをリソース ID にマッピングすることで鍵を管理します。次の手順では、デフォルトのストレージフォルダにモデル復号鍵を作成してインポートします。

  1. Trustee サーバーに復号鍵を保存するためのディレクトリとファイルを作成します。これにより、ローカルフォルダ /opt/trustee/kbs/repository/default/aliyun という名前のサブディレクトリが作成されます。

    <model-decryption-key> をステップ 1 で使用した鍵に置き換えてください。この例では、鍵は alibaba@1688 です。
    sudo mkdir -p /opt/trustee/kbs/repository/default/aliyun/
    sudo sh -c 'echo -n "<model-decryption-key>" > /opt/trustee/kbs/repository/default/aliyun/model-decryption-key'
  2. 鍵 ID を確認します。

    鍵は現在、ファイルパス .../aliyun/model-decryption-key に保存されており、Trustee システム内の鍵 ID は kbs:///default/aliyun/model-decryption-key です。

ステップ 3: ACK コンフィデンシャルコンピューティングクラスターの構成

このステップでは、基盤となるインフラストラクチャを構築します。ワーカーノードとして Intel TDX と NVIDIA TEE の両方の機能を提供する ecs.gn8v-tee インスタンスを持つ ACK クラスターです。

実行環境: ECS および ACK コンソール (クラスター、ノードプール、ECS インスタンスの作成用)、および作成された ecs.gn8v-tee インスタンスのシェル環境 (ドライバーのインストール用)。
  1. 中国 (北京) リージョンに「ACK マネージド Pro クラスターを作成する」をご参照ください。

  2. コンフィデンシャルコンピューティングインスタンスを管理するために、クラスターの「ノードプールを作成する」をご参照ください。

    • vSwitch: 中国 (北京) リージョンのゾーン L にある vSwitch を選択します。

    • スケーリングモード: デフォルトの構成を維持します。自動スケーリングを有効にしないでください。

    • インスタンスタイプ: ecs.gn8v-tee.4xlarge またはそれ以上の仕様。

    • オペレーティングシステム: Alibaba Cloud Linux 3.2104 LTS 64 ビット。

    • システムディスク: 100 GiB 以上。

    • 期待されるノード数: ノードプールの初期ノード数。デフォルト構成の 0 を維持します。

    • ノードラベル: NVIDIA ドライバーのバージョンを指定するためにラベル (キー: ack.aliyun.com/nvidia-driver-version, : 550.144.03) を追加します。

  3. クラスターノードとして機能する Elastic GPU Service (EGS) コンフィデンシャルコンピューティングインスタンスを作成します。詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。

    • リージョン: 中国 (北京)。

    • ネットワークとゾーン: VPC はクラスターの VPC と同じでなければなりません。この例では、ゾーン L のものを使用します。

    • インスタンス: ecs.gn8v-tee.4xlarge またはそれ以上の仕様。

      gn8v-tee インスタンスタイプは、CPU および GPU コンフィデンシャルコンピューティング機能がデフォルトで有効になっています。コンフィデンシャル VM を選択する必要はありません。
    • イメージ: Alibaba Cloud Linux 3.2104 LTS 64 ビット。

  4. 作成した EGS インスタンスにログオンし、「NVIDIA ドライバーと CUDA ツールキットをインストールする」をご参照ください。

  5. EGS インスタンスを作成したノードプールに追加します。インスタンスを追加する方法として [手動] を選択します。詳細については、「既存のノードを追加する」をご参照ください。

ステップ 4: ACK-CAI コンポーネントのデプロイ

ACK-CAI コンポーネントには、アノテーションに基づいて必要なサイドカーコンテナをポッドに自動的にインジェクトする Webhook コントローラーが含まれています。これらのサイドカーは、リモートアテステーション、モデル復号、および安全な通信を処理します。

実行環境: ACK コンソール。
  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Helm] を選択します。

  3. [デプロイ] をクリックし、ack-cai の最新バージョンをインストールします。

    [パラメーター] ステップで、YAML テンプレートの tag1.1.1 に変更します。

    Helm チャートリストでデプロイステータスを表示できます。

ステップ 5: vLLM 推論サービスのデプロイ

Helm を使用して vLLM サービスをデプロイし、特定のアノテーションを追加してコンフィデンシャルコンピューティング保護を有効にします。

実行環境: kubectl と Helm が構成され、クラスターにアクセスできるマシン。Workbench または CloudShell を使用できます。
  1. Helm チャート用の新しいフォルダを作成します。

    mkdir -p ack-cai-vllm-demo
    cd ack-cai-vllm-demo
  2. vLLM サービスをデプロイするための Helm チャートを初期化します。

    この Helm チャートは、vLLM 推論サービスをノードアフィニティで構成し、コンフィデンシャルコンピューティング GPU アクセラレーションノードでのみ実行されるようにします。また、CSI プラグインを使用して、モデルストレージ用の OSS バケットをマウントします。

    Helm チャート初期化スクリプトを表示するには展開してください

    values.yaml# テンプレートファイルを作成
    mkdir -p ./templates
    cat <<EOF >templates/vllm.yaml
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-oss
      namespace: {{ .Release.Namespace }}
      labels:
        alicloud-pvname: pv-oss
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeHandle: pv-oss
        volumeAttributes:
          bucket: {{ .Values.oss.bucket }}
          path: {{ .Values.oss.path }}
          url: {{ .Values.oss.url }}
          otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other"
        nodePublishSecretRef:
          name: oss-secret
          namespace: {{ .Release.Namespace }}
    
    ---
    
    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      namespace: {{ .Release.Namespace }}
    stringData:
      akId: {{ .Values.oss.akId }}
      akSecret: {{ .Values.oss.akSecret }}
    
    ---
    
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-oss
      namespace: {{ .Release.Namespace }}
    spec:
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-oss
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      name: cai-vllm-svc
      namespace: {{ .Release.Namespace }}
      {{- if .Values.loadbalancer}}
      {{- if .Values.loadbalancer.aclId }}
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-status: "on"
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-id: {{ .Values.loadbalancer.aclId }}
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-acl-type: "white"
      {{- end }}
      {{- end }}
      labels:
        app: cai-vllm
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
      selector:
        app: cai-vllm
      type: LoadBalancer
    
    ---
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: cai-vllm
      namespace: {{ .Release.Namespace }}
      labels:
        app: cai-vllm
        trustiflux.alibaba.com/confidential-computing-mode: "ACK-CAI"
      annotations:
        trustiflux.alibaba.com/ack-cai-options: |
    {{ .Values.caiOptions | indent 6 }}
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node.kubernetes.io/instance-type
                operator: In
                values:
                  - ecs.gn8v-tee.4xlarge
                  - ecs.gn8v-tee.6xlarge
                  - ecs.gn8v-tee-8x.16xlarge
                  - ecs.gn8v-tee-8x.48xlarge
      containers:
        - name: inference-service
          image: egslingjun-registry.cn-wulanchabu.cr.aliyuncs.com/egslingjun/llm-inference:vllm0.5.4-deepgpu-llm24.7-pytorch2.4.0-cuda12.4-ubuntu22.04
          command:
            - bash
          args: ["-c", "vllm serve /tmp/model --port 8080 --host 0.0.0.0 --served-model-name qwen2.5-3b-instruct --device cuda --dtype auto"]
          ports:
            - containerPort: 8080
          resources:
            limits:
              nvidia.com/gpu: 1  # このコンテナーに 1 つの GPU をリクエストします
          volumeMounts:
            - name: pvc-oss
              mountPath: "/tmp/model"
    
      volumes:
        - name: pvc-oss
          persistentVolumeClaim:
            claimName: pvc-oss
    
    EOF
    
    # Helm チャート記述ファイルを作成
    cat <<EOF > ./Chart.yaml
    apiVersion: v2
    name: vllm
    description: A test based on vllm for ack-cai
    type: application
    version: 0.1.0
    appVersion: "0.1.0"
    EOF
    
    # Helm チャート用の変数ファイル <code data-tag="code" id="ef7b35f304kct">values.yaml
  3. values.yaml ファイルを編集して、環境固有の情報を指定します。

    <trustee-ip> を Trustee アドレスに置き換え、OSS 構成を実際の値に置き換えてください。
    caiOptions: |
      {
          "cipher-text-volume": "pvc-oss",
          "model-decryption-key-id" : "kbs:///default/aliyun/model-decryption-key",
          "trustee-address": "http://<trustee-ip>:8081/api"
      }
    oss:
      bucket: "conf-ai"                          # 暗号化モデルを格納する OSS バケットの名前に置き換えます。
      path: "/qwen2.5-3b-gocryptfs/"             # OSS バケット内の暗号化モデルファイルへのパスに置き換えます。
      url: "https://oss-cn-beijing-internal.aliyuncs.com"   # OSS エンドポイントに置き換えます。
      akId: "xxxxx"                              # Alibaba Cloud AccessKey ID に置き換えます。
      akSecret: "xxxxx"                          # Alibaba Cloud AccessKey シークレットに置き換えます。
  4. Helm を使用して vLLM サービスをデプロイします。

    helm install vllm . -n default
  5. CAI コンポーネントのサイドカーコンテナがポッドに正常にインジェクトされたことを確認します。

    kubectl get pod cai-vllm -n default -o jsonpath='{range .status.initContainerStatuses[*]}{.name}{"\t"}{range .state.running}Running{end}{.state.*.reason}{"\n"}{end}{range .status.containerStatuses[*]}{.name}{"\t"}{range .state.running}Running{end}{.state.*.reason}{"\n"}{end}'

    期待される出力は次の 5 つのコンテナを示しており、インジェクションが成功したことを意味します。すべてのコンテナが PodInitializing から Running に変わるのを待ちます。これは、サービスが開始されたことを示します。

    cai-sidecar-attestation-agent   Running
    cai-sidecar-confidential-data-hub       Running
    cai-sidecar-tng Running
    cai-sidecar-cachefs     Running
    inference-service       Running
  6. vLLM サービスのエンドポイントを取得して記録します。

    kubectl get service cai-vllm-svc -o jsonpath='http://{.status.loadBalancer.ingress[0].ip}:{.spec.ports[0].port}{"\n"}'

    期待される出力は、<vllm-ip>:<port> の形式の URL です。

    http://182.XX.XX.225:8080

ステップ 6: 推論サービスへの安全なアクセス

エンドツーエンドのセキュリティを確保するには、TNG クライアントゲートウェイを使用してリクエストをプロキシする必要があります。プロキシは、vLLM サービスに送信されるすべてのリクエストを自動的に暗号化し、レスポンスを復号します。

実行環境: 推論サービスを呼び出すクライアントマシン。
  1. クライアントで TNG ゲートウェイを開始して、安全な通信チャネルを確立します。

    TNG ゲートウェイは、クライアントにローカルプロキシを作成して、サーバーに送信されるリクエストを暗号化します。
    <IP> を Trustee アドレスに置き換えてください。
    docker run -d \
        --network=host \
        confidential-ai-registry.cn-shanghai.cr.aliyuncs.com/product/tng:2.2.4 \
        tng launch --config-content '
          {
            "add_ingress": [
              {
                "http_proxy": {
                  "proxy_listen": {
                    "host": "0.0.0.0",
                    "port": 41000
                  }
                },
                "encap_in_http": {},
                "verify": {
     "as_addr": "http://<trustee-ip>:8081/api/attestation-service/",
                  "policy_ids": [
                    "default"
                  ]
                }
              }
            ]
          }
    '
  2. TNG プロキシを介して vLLM サービスにアクセスします。

    <vllm-ip>:<port> を、以前に取得した vLLM サービスのエンドポイントに置き換えてください。
    # http_proxy 環境変数を設定
    export http_proxy=http://127.0.0.1:41000
    
    # curl リクエストを送信
    curl http://<vllm-ip>:<port>/v1/completions \
      -H "Content-type: application/json" \
      -d '{
        "model": "qwen2.5-3b-instruct",
        "prompt": "San Francisco is a",
        "max_tokens": 7,
        "temperature": 0
        }'

リファレンス

caiOptions の構成

caiOptions アノテーションは、JSON 形式の構成オブジェクトを受け入れます。ACK CAI アドミッション Webhook はこれらのパラメーターを解析し、それらを使用して AA や CDH などのセキュリティコンポーネントをポッドに動的にインジェクトおよび構成します。これにより、透明な暗号化と復号、リモートアテステーション、信頼できるネットワーキングなどの機能が有効になります。

以下は、caiOptions 構成の完全な例です。

{
  "cipher-text-volume": "pvc-oss",
  "model-decryption-key-id": "kbs:///default/aliyun/model-decryption-key",
  "trustee-address": "http://<trustee-ip>:8081/api",
  "aa-version": "1.3.1",
  "cdh-version": "1.3.1",
  "tng-version": "2.2.4",
  "cachefs-version": "1.0.7-2.6.1",
  "tdx-ra-enable": true,
  "gpu-ra-enable": true,
  "tng-http-secure-ports": [
    {
      "port": 8080
    }
  ]
}

次の表に、構成の詳細を示します。

パラメーター

必須

説明

cipher-text-volume

はい

暗号化モデルを格納する永続ボリューム要求 (PVC) の名前。ACK-CAI は、この PVC からマウントされたデータを信頼できる環境で自動的に復号します。

model-decryption-key-id

はい

モデル復号鍵の Key Broker Service (KBS) URI。フォーマットは kbs:///<repository>/<group>/<key> です。

trustee-address

はい

リモートアテステーションと鍵取得に使用される Trustee サービスのアドレス。

aa-version

いいえ

AA コンポーネントのバージョン。

cdh-version

いいえ

CDH コンポーネントのバージョン。

tng-version

いいえ

TNG コンポーネントのバージョン。

cachefs-version

いいえ

Cachefs コンポーネントのバージョン。

tdx-ra-enable

いいえ

CPU (TDX コンフィデンシャルインスタンス) のリモートアテステーションサポートを有効にするかどうかを指定します。デフォルト: true

gpu-ra-enable

いいえ

GPU のリモートアテステーションサポートを有効にするかどうかを指定します。デフォルト: true

tng-http-secure-ports

いいえ

特定の HTTP ポートのトラフィックを暗号化するために TNG が TLS を使用するように構成します。オブジェクトの配列を受け入れ、各オブジェクトはポート暗号化ルールを表します。

"tng-http-secure-ports": [
  {
    "port": 8080,
    "allow-insecure-request-regexes": [
      "/api/builtin/.*"
    ]
  }
]
  • port: TNG による TLS 暗号化保護が必要な HTTP サービスポート番号。

  • allow-insecure-request-regexes: 正規表現の配列。指定されたポートに送信された HTTP リクエストのパスがこの配列内のいずれかの正規表現に一致する場合、TNG はそのリクエストを暗号化しません。

サンプル暗号化モデルファイル

テスト目的で、以下の公開されている暗号化モデルを使用できます。これらは OSS バケットに保存されており、指定された方法で暗号化されています。

展開

モデル名

暗号化方式

暗号化パスワード

パブリック読み取り OSS リージョン

OSS エンドポイント

モデルストレージの場所

Qwen2.5-3B-Instruct

Gocryptfs

alibaba@1688

cn-beijing

oss-cn-beijing-internal.aliyuncs.com

conf-ai:/qwen2.5-3b-gocryptfs/

Sam

conf-ai:/qwen2.5-3b-sam/