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

Container Service for Kubernetes:ACK ヘテロジニアス機密コンピューティングクラスターにおける vLLM 推論サービスのセキュアなデプロイ

最終更新日:Mar 07, 2026

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

ACK-CAI を使用して、ACK ヘテロジニアス機密コンピューティングクラスターに vLLM モデル推論サービスをデプロイできます。これにより、モデルとデータのセキュアな隔離と暗号化保護が保証されます。利点は次のとおりです。

  • ハードウェアレベルのセキュリティ隔離:Intel® TDX と NVIDIA GPU TEE テクノロジーを使用して、ハードウェアレベルの信頼できる実行環境 (TEE) を構築します。これにより、計算中のモデルとデータの機密性と完全性が保証されます。

  • 信頼できる鍵配布:リモートアテステーションメカニズムを使用して、ランタイム環境を厳密に検証します。検証が成功すると、専用の Trustee サービスがモデル復号鍵を信頼できる環境に配布します。

  • エンドツーエンドのデータ暗号化:Trusted Network Gateway (TNG) を使用して、クライアントとサーバー間の暗号化チャネルを確立します。これにより、送信中の推論リクエストと応答データのセキュリティが保護されます。

  • アプリケーションへの非侵入型:Kubernetes Webhook に基づいて、セキュリティコンポーネントを Pod に自動的に挿入します。ビジネスコードやイメージを変更することなく、アノテーションを使用してアプリケーションのセキュリティ機能を有効にするだけです。

仕組み

ACK-CAI は、Trustiflux という名前の一連の Sidecar コンテナを動的に挿入することにより、アプリケーション Pod に透明な機密コンピューティング機能を提供します。そのコアセキュリティメカニズムはリモートアテステーションに依存しており、モデルとデータが信頼できる環境でのみアクセスされることを保証します。

image

クリックしてコアコンポーネントの説明を展開

  1. ACK ヘテロジニアス機密コンピューティングクラスター:TDX 機密インスタンスと GPU 機密コンピューティング機能に基づいて構築された Kubernetes クラスター。

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

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

    • Attestation Agent (AA):リモートアテステーションと鍵取得を実行します。

    • Confidential Data Hub (CDH):暗号文データの復号を処理します。

    • Trusted Network Gateway Server (TNG Server):安全な通信チャネルを確立します。

    • Cachefs:モデルの復号をサポートします。

  4. 推論サービス:実際の大規模言語モデルの推論タスクを実行するコンテナ。

  5. 推論プログラム:モデル推論サービスにアクセスするためのクライアント側のプログラム。

  6. Trusted Network Gateway Client (TNG Client):クラスターとの安全な通信チャネルを確立し、通信のセキュリティを確保します。

クリックしてコアセキュリティメカニズムの説明を展開

このソリューションには、主に 2 つのセキュリティメカニズムが含まれています。

  • リモートアテステーションに基づく暗号化モデルの配布:

    1. Pod の起動時に、Sidecar 内の Attestation Agent (AA) が Trustee リモートアテステーションサービスにリクエストを送信します。

    2. Trustee サービスは、CPU (TDX) と GPU の機密環境の信頼性検証を実行します。

    3. 検証が成功すると、Trustee サービスはモデル復号鍵を Pod に安全に配布します。

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

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

    1. エンドユーザーの推論プログラムは、ローカルの Trusted Network Gateway Client (TNG Client) を通じてリクエストを送信します。

    2. リクエストは送信中ずっと暗号化されたままであり、中間者攻撃を防ぎます。

    3. サーバー側に到達した後、Sidecar 内の Trusted Network Gateway (TNG) モジュールがリクエストを復号し、推論サービスによって処理されます。

    4. TNG は推論結果を暗号化し、クライアントに安全に返します。

プロセスと環境ガイド

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

ステップ

目的

環境

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

推論モデルを暗号化し、Object Storage Service (OSS) にアップロードして、静的な状態でのセキュアなストレージを確保します。

専用のデータ準備サーバー

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

専用の Trustee 検証サービスを信頼のルートとしてデプロイし、環境の検証と鍵の配布を行います。

専用の Trustee サーバー

ステップ 3:ACK 機密コンピューティングクラスターの設定

機密コンピューティングタスク用の Kubernetes ノードを作成し、設定します。

  • Alibaba Cloud 管理コンソール (ACK、ECS)

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

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

クラスターに CAI コンポーネントをインストールし、アプリケーションにセキュリティ機能を動的に挿入します。

ACK コンソール

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

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

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

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

クライアントセキュリティエージェントを起動し、暗号化チャネルを通じてデプロイされたモデルサービスにアクセスします。

クライアント環境

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

このセクションでは、暗号化ツールを使用してモデルデータを処理し、Object Storage Service (OSS) にアップロードして、後続の暗号化配布に備えます。

実行環境:セキュアな隔離を実現するために、モデルのダウンロード、暗号化、アップロードを行うための一時的な Elastic Compute Service (ECS) インスタンスを準備します。プライベートネットワーク経由で暗号化モデルデータを高速にアップロードするために、ECS インスタンスが OSS バケット と同じリージョンにあることを推奨します。
モデルファイルはサイズが大きく、プロセスに時間がかかります。ソリューションを迅速に体験するには、このセクションをスキップしてください。暗号化モデルのサンプルファイル を試用し、直接 ステップ 2:Trustee リモートアテステーションサービスのデプロイ に進むことができます。

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

モデルをクラウドにデプロイする前に、暗号化してクラウドストレージにアップロードします。復号鍵は KMS によって管理され、リモートアテステーションサービスによって制御されます。モデルの暗号化は、ローカルまたは信頼できる環境で実行してください。この例では、Qwen2.5-3B-Instruct LLM を使用します。

説明

すでにモデルをお持ちの場合は、このセクションをスキップして 2. モデルの暗号化 に進んでください。

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

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

成功すると、モデルは ~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/ にダウンロードされます。

2. モデルの暗号化

現在、Gocryptfs 暗号化モード (AES256-GCM オープン標準に基づく) を使用してモデルを暗号化できます。

  1. モデルを暗号化するために Gocryptfs ツールをインストールします。現在、デフォルトの暗号化パラメーターを使用する Gocryptfs v2.4.0 のみがサポートされています。次のいずれかのインストール方法を選択できます。

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

    Alinux 3 または 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 リモートアテステーションサービスにアップロードする必要があります。

    このトピックでは、モデルの暗号化に 0Bn4Q1wwY9fN3P をキーとして使用します。キーの内容は cachefs-password ファイルに保存されます。キーをカスタマイズすることもできます。実際には、ランダムに生成された強力なキーを使用することを推奨します。

    cat << EOF > ~/cachefs-password
    0Bn4Q1wwY9fN3P
    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 バケットを準備します。暗号化されたモデルを Alibaba Cloud OSS にアップロードします。これにより、後でヘテロジニアスインスタンスからモデルをプルしてデプロイできます。

OSS を例にとると、qwen-encrypted という名前のバケットとディレクトリを作成できます。例えば、oss://examplebucket/qwen-encrypted/ のようになります。詳細については、「コンソールのクイックスタート」をご参照ください。モデルファイルはサイズが大きいため、ossbrowser を使用して暗号化モデルをこのディレクトリにアップロードすることを推奨します。

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

ゼロトラストの原則に従い、どの機密コンピューティング環境も、モデル復号鍵などの機密データへのアクセス権限を得る前に検証に合格する必要があります。このステップでは、モデルと推論サービスのランタイム環境を検証するための専用の Trustee サービスをデプロイします。これにより、環境が信頼できると確認された場合にのみモデル復号鍵が挿入され、クライアント側が推論リクエストを開始する際に環境の信頼性が検証されます。

実行環境:ACK クラスターの外部にデプロイされた専用のスタンドアロンサーバー。例えば、ECS インスタンスやオンプレミスのプライベートサーバーなど。

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

セキュリティの分離と信頼の独立性の原則に基づき、Trustee は ACK ヘテロジニアス機密コンピューティングクラスターの外部にあるスタンドアロンサーバーにデプロイする必要があります。信頼レベルの要件に応じて、2 つの推奨ソリューションがあります。

信頼レベル:クラウドサービスプロバイダーが Trustee デプロイ環境に対して持つソフトウェアとハードウェアの制御度が高いほど、信頼レベルは低くなります。これは、Trustee サービスがリモートアテステーションの信頼のルートとして機能し、クラウド内の機密コンピューティング/信頼できるコンピューティングリソースを配布するためです。厳格な信頼モデルでは、Trustee のオーナーはデプロイ環境のすべてのソフトウェアとハードウェアを完全に制御し、それが顧客管理の信頼できる環境で実行されることを保証する必要があります。
  • ECS インスタンス

    ACK クラスターと同じ VPC 内に追加の ECS インスタンスを作成し、Trustee サービスを専門に実行します。これにより、Alibaba Cloud プライベートネットワークを介した効率的で安全な通信が可能になり、Trustee サービスと機密コンピューティング環境との間の完全な論理的および物理的な分離が保証されます。

  • オンプレミスのプライベートサーバー

    非常に高いセキュリティ要件を持つシナリオでは、自社のデータセンターまたはオンプレミスサーバーに Trustee をデプロイします。専用線または VPN を介してクラウド VPC ネットワークに接続します。これにより、信頼のルートのソフトウェアとハードウェア環境を完全に制御でき、クラウドベンダーの影響を受けません。

使用する前に、サーバーがパブリックネットワークにアクセスでき、ポート 8081 が開いていることを確認してください。

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

Trustee は RPM フォーマットでパッケージ化されており、Alibaba Cloud Linux 3.x および Anolis (8.x 以降) の公式 YUM リポジトリに含まれています。システムパッケージ管理ツールを使用してインストールします。インストール後、systemd が自動的にサービスを管理および開始します。

  1. 準備したサーバーで、次のコマンドを実行して YUM リポジトリを使用して Trustee をインストールし、開始します。

    yum install trustee-1.5.2

    Trustee は自動的に起動し、デフォルトでポート 8081 をリッスンします。デプロイ環境の IP とサービスポート番号を使用して、URL としてネットワーク経由で直接アクセスできます。例:http://<trustee-ip>:8081/api

    ここで、<trustee-ip> は Trustee がデプロイされているサーバーの IP アドレスです。
    本番環境で Trustee を使用する場合は、セキュリティを強化するために 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 サービス管理コマンドを展開

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

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

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

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

  • ステータスの確認:systemctl status trustee

3. Trustee インスタンスへのモデル復号鍵のインポート

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

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

  1. 次のコマンドを実行して、キーディレクトリを作成し (ローカルディレクトリ /opt/trustee/kbs/repository/default/aliyun という名前のサブディレクトリを作成)、キーの内容を書き込みます。

    <model decryption key> を実際のキー文字列に置き換えます。この例では 0Bn4Q1wwY9fN3P を使用します。
    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 機密コンピューティングクラスターの設定

このセクションでは、機密コンピューティングタスクを実行するためのハードウェアレベルのセキュリティ隔離機能を備えた基盤インフラストラクチャを構築します。これには、ACK クラスターの作成と、Intel TDX および NVIDIA TEE 機能を備えた ecs.gn8v-tee インスタンスをワーカーノードとして追加することが含まれます。

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

  2. クラスターのノードプールを作成して、機密コンピューティングインスタンスを管理します。詳細については、「ノードプールの作成と管理」をご参照ください。

    • vSwitch:中国 (北京) ゾーン L の vSwitch を選択します。

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

    • インスタンスタイプ:ecs.gn8v-tee.4xlarge 以上。

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

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

    • 想定ノード数:ノードプールの初期ノード数。デフォルト設定の 0 を維持します。

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

  3. EGS 機密コンピューティングインスタンスをクラスターノードとして作成します。詳細については、「インスタンスのカスタム購入」をご参照ください。

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

    • ネットワークとゾーン:クラスター VPC と一致する VPC、ゾーン L。

    • インスタンスタイプ:ecs.gn8v-tee.4xlarge 以上。

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

  4. 作成した EGS インスタンスにログインし、NVIDIA ドライバーと CUDA ツールキットをインストールします。詳細については、「ステップ 1:NVIDIA ドライバーと CUDA ツールキットのインストール」をご参照ください。

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

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

ACK-CAI コンポーネントに基づいて、クラスター内のアプリケーションに非侵入型の機密コンピューティング機能を有効にします。このコンポーネントには、Pod のアノテーションに基づいて Sidecar コンテナを自動的に挿入する Webhook コントローラーが含まれています。これらの Sidecar コンテナは、リモートアテステーション、モデル復号、およびセキュアな通信を提供します。

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

  2. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、アプリケーション > Helm をクリックします。

  3. デプロイ をクリックし、画面の指示に従って最新バージョンの ACK-CAI をインストールします。

    インストールが完了したら、Helm チャートリストでデプロイステータスを確認します。

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

基本的な環境とセキュリティコンポーネントの準備が整ったら、このセクションでは Helm を使用して vLLM サービスをデプロイします。特定のアノテーションを追加して、アプリケーションが ACK-CAI によるセキュリティ強化を必要とすることを宣言します。

実行環境:kubectl と Helm が設定され、クラスターにアクセスできるマシン。ワークベンチまたは CloudShell で直接使用します。
  1. 空の Helm チャートディレクトリを作成します。

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

    この Helm チャートは、vLLM 推論サービスを機密コンピューティング GPU ノードに強制的にスケジュールし、CSI プラグインを使用してモデルを OSS に保存します。

    クリックして Helm チャート初期化スクリプトを展開

    # テンプレートファイルを作成
    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 チャート変数ファイル values.yaml を作成
    touch 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 AK ID に置き換えます
      akSecret: "xxxxx"                          # Alibaba Cloud AK Secret に置き換えます
  4. vLLM サービスをデプロイします。

    helm install vllm . -n default
  5. CAI コンポーネントの Sidecar コンテナが Pod に正常に挿入されたか確認します。

    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"}'

    期待される出力は、同様の形式の URL (<vllm-ip>:<port>) を返します。

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

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

サーバー側のセキュリティ保護に加えて、クライアントからサーバーへのエンドツーエンドの暗号化通信リンクを確立します。これにより、送信中の推論データのセキュリティが保証されます。このセクションでは、クライアントで TNG セキュリティゲートウェイを起動し、vLLM サービスに送信されるすべてのリクエストを自動的に暗号化し、受信した応答を復号するローカルプロキシを作成します。

実行環境:クライアント環境。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 の Admission Webhook はこれらのパラメーターを解析し、必要なセキュリティコンポーネント (AA、CDH など) を Pod に動的に挿入および設定します。これにより、透明な暗号化/復号、リモートアテステーション、信頼できるネットワークなどの機能が実現されます。

以下は、完全な 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

必須

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

trustee-address

必須

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

aa-version

任意

Attestation Agent (AA) コンポーネントのバージョン。

cdh-version

任意

Confidential Data Hub (CDH) コンポーネントのバージョン。

tng-version

任意

Trusted Network Gateway (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 リージョン

Object Storage Service (OSS) エンドポイント

モデルストレージの場所

Qwen3-32B

Gocryptfs

0Bn4Q1wwY9fN3P

cn-beijing

oss-cn-beijing-internal.aliyuncs.com

conf-ai:/qwen3-32b-gocryptfs/

Sam

conf-ai:/qwen3-32b-sam/

Qwen2.5-3B-Instruct

Gocryptfs

0Bn4Q1wwY9fN3P

cn-beijing

oss-cn-beijing-internal.aliyuncs.com

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

Sam

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