Service Mesh (ASM) memungkinkan Anda mengakses layanan Large Language Model (LLM) eksternal melalui gerbang masuk (ingress gateway). Dengan mengarahkan permintaan melalui gerbang ASM, Anda dapat memanfaatkan fitur-fitur canggihnya, seperti pemisahan lalu lintas (traffic splitting), observabilitas permintaan, serta otentikasi dan otorisasi yang kuat. Topik ini menjelaskan cara klien di luar kluster mengakses layanan LLM eksternal melalui gerbang masuk ASM.
Ikhtisar
Mengakses layanan LLM eksternal melalui gerbang masuk sangat ideal ketika klien di luar kluster perlu terhubung ke layanan tersebut. Gerbang ASM menyediakan berbagai fitur perutean, keamanan, dan observabilitas, serta mendukung manajemen lalu lintas LLM. Dengan menggunakan gerbang ASM, Anda dapat mengintegrasikan layanan LLM eksternal secara cepat dan aman.
Jejak permintaan (request trace) untuk contoh dalam topik ini adalah sebagai berikut:
Prasyarat
-
Anda telah menambahkan kluster ke instans ASM. Instans ASM harus versi 1.22 atau lebih baru.
-
Anda telah mengonfigurasi kebijakan injeksi sidecar.
-
Anda telah membuat gerbang masuk dan memperoleh alamat IP-nya.
-
Anda telah mengaktifkan Alibaba Cloud Model Studio dan memperoleh Kunci API yang valid. Untuk informasi selengkapnya, lihat Dapatkan Kunci API.
Langkah 1: Buat LLMProvider
-
Buat file bernama 'LLMProvider.yaml' dengan konten berikut.
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 open-source series large language model stream: false apiKey: ${API_KEY} -
Untuk membuat LLMProvider, jalankan perintah berikut menggunakan File kubeconfig untuk kluster ASM Anda.
kubectl apply -f LLMProvider.yaml
Langkah 2: Buat aturan gateway
-
Buat file bernama 'ingress-gw.yaml' dengan konten berikut.
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 -
Jalankan perintah berikut untuk membuat aturan gateway.
kubectl apply -f ingress-gw.yaml
Langkah 3: Buat LLMRoute
-
Buat file bernama 'dashscope-route.yaml' dengan konten berikut.
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 # Routes requests for dashscope.aliyuncs.com. Otherwise, a 404 error is returned. - headers: host: exact: test.com # Routes requests for test.com. After the request is processed by the ASM LLM plugin, it re-triggers route matching, causing the request to match the rule above. backendRefs: - providerHost: dashscope.aliyuncs.com -
Jalankan perintah berikut untuk membuat LLMRoute.
kubectl apply -f dashscope-route.yaml
Langkah 4: Uji konfigurasi
Jalankan perintah berikut di terminal lokal Anda untuk menguji konfigurasi.
curl --location '${INGRESS_GATEWAY_IP}:80' --header 'Content-Type: application/json' --header "host: test.com" --data '{
"messages": [
{"role": "user", "content": "Tell me about yourself"}
]
}'
Output yang diharapkan:
{"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"}
Output tersebut menunjukkan bahwa gerbang berhasil mengarahkan permintaan.
Langkah 5: Gunakan fitur keamanan gerbang ASM
Langkah ini menunjukkan cara membuat kebijakan otorisasi sederhana untuk menolak akses ke layanan LLM dari alamat IP lokal Anda melalui gerbang ASM.
-
Buat file bernama 'auth-policy.yaml' dengan konten berikut.
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 -
Jalankan perintah berikut untuk menerapkan kebijakan otorisasi.
kubectl apply -f auth-policy.yaml -
Jalankan kembali perintah pengujian dari Langkah 4. Anda seharusnya melihat hasil berikut:
RBAC: access denied
Fitur keamanan yang tersedia untuk permintaan HTTP standar pada gerbang ASM, seperti kebijakan otorisasi komprehensif, otentikasi JWT, dan layanan otorisasi eksternal kustom, juga berlaku untuk permintaan LLM. Dengan menerapkan kebijakan ini pada gerbang masuk, Anda dapat mengamankan aplikasi Anda secara lebih efektif.