Service Mesh (ASM) を使用すると、イングレスゲートウェイを介して外部の大規模言語モデル (LLM) サービスにアクセスできます。ASMゲートウェイを介してリクエストをルーティングすることで、トラフィック分割、リクエストの可観測性、堅牢な認証と権限付与などの強力な機能を利用できます。このトピックでは、クラスター外部のクライアントがASMイングレスゲートウェイを介して外部LLMサービスにアクセスする方法について説明します。
概要
イングレスゲートウェイを介した外部LLMサービスへのアクセスは、クラスター外部のクライアントがそれらに接続する必要がある場合に最適です。ASMゲートウェイは、幅広いルーティング、セキュリティ、可観測性機能を提供し、LLMトラフィック管理をサポートします。ASMゲートウェイを使用することで、外部LLMサービスと迅速かつ安全に統合できます。
このトピックの例におけるリクエストトレースは次のとおりです。
前提条件
-
クラスターをASMインスタンスに追加済みであること。ASMインスタンスはバージョン1.22以降である必要があります。
-
サイドカーインジェクションポリシーを設定済みであること。
-
Alibaba Cloud Model Studio をアクティブ化し、有効なAPIキーを取得済みであること。詳細については、「APIキーの取得」をご参照ください。
ステップ 1: LLMProviderの作成
-
以下の内容で「LLMProvider.yaml」という名前のファイルを作成します。
apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMProvider metadata: name: dashscope-qwen namespace: istio-system spec: workloadSelector: labels: istio: ingressgateway host: dashscope.aliyuncs.com path: /compatible-mode/v1/chat/completions configs: defaultConfig: openAIConfig: model: qwen1.5-72b-chat # Qwenオープンソースシリーズ大規模言語モデル stream: false apiKey: ${API_KEY} -
ASMクラスターのkubeconfig ファイルを使用して、次のコマンドを実行してLLMProviderを作成します。
kubectl apply -f LLMProvider.yaml
ステップ 2: ゲートウェイルールの作成
-
以下の内容で「ingress-gw.yaml」という名前のファイルを作成します。
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: ingress-gw namespace: istio-system spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP -
次のコマンドを実行してゲートウェイルールを作成します。
kubectl apply -f ingress-gw.yaml
ステップ 3: LLMRouteの作成
-
以下の内容で「dashscope-route.yaml」という名前のファイルを作成します。
apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMRoute metadata: name: dashscope-route spec: host: "*" gateways: - istio-system/ingress-gw rules: - name: ingress-route matches: - headers: host: exact: dashscope.aliyuncs.com # dashscope.aliyuncs.comへのリクエストをルーティングします。それ以外の場合は404エラーが返されます。 - headers: host: exact: test.com # test.comへのリクエストをルーティングします。リクエストがASM LLMプラグインによって処理された後、ルーティングの一致が再トリガーされ、リクエストが上記のルールに一致するようになります。 backendRefs: - providerHost: dashscope.aliyuncs.com -
次のコマンドを実行してLLMRouteを作成します。
kubectl apply -f dashscope-route.yaml
ステップ 4: セットアップのテスト
構成をテストするには、ローカル端末で次のコマンドを実行します。
curl --location '${INGRESS_GATEWAY_IP}:80' --header 'Content-Type: application/json' --header "host: test.com" --data '{
"messages": [
{"role": "user", "content": "Tell me about yourself"}
]
}'
期待される出力:
{"choices":[{"message":{"role":"assistant","content":"I am a Large Language Model from Alibaba Cloud, and my name is Qwen. My main function is to answer user questions, provide information, and engage in conversation. I can understand user queries and generate corresponding answers or suggestions based on natural language. I can also learn new knowledge and apply it to various scenarios. If you have any questions or need help, please feel free to let me know, and I will do my best to support you."},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":3,"completion_tokens":72,"total_tokens":75},"created":1720682745,"system_fingerprint":null,"model":"qwen1.5-72b-chat","id":"chatcmpl-3d117bd7-9bfb-9121-9fc2-xxxxxxxxxxxx"}
出力は、ゲートウェイがリクエストを正常にルーティングしたことを示しています。
ステップ 5: ASMゲートウェイのセキュリティ機能の使用
このステップでは、ASMゲートウェイを介したLLMサービスへのご利用のローカルIPアドレスからのアクセスを拒否するシンプルな権限付与ポリシーを作成する方法を示します。
-
以下の内容で「auth-policy.yaml」という名前のファイルを作成します。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: labels: gateway: ingressgateway name: auth-policy namespace: istio-system spec: action: DENY rules: - from: - source: ipBlocks: - ${YOUR_LOCAL_IP} to: - operation: hosts: - test.com selector: matchLabels: istio: ingressgateway -
次のコマンドを実行して権限付与ポリシーをデプロイします。
kubectl apply -f auth-policy.yaml -
ステップ 4 のテストコマンドを再度実行します。次の結果が表示されるはずです。
RBAC: アクセス拒否
包括的な権限付与ポリシー、JWT認証、カスタム外部権限付与サービスなど、ASMゲートウェイで標準HTTPリクエストに利用できるセキュリティ機能は、LLMリクエストにも適用されます。これらのポリシーをイングレスゲートウェイに適用することで、アプリケーションをより効果的に保護できます。