ASM memungkinkan Anda mengakses layanan LLM eksternal melalui gerbang keluar (egress gateway). Pendekatan ini ditujukan terutama untuk skenario di mana aplikasi klien berada di dalam kluster. Topik ini menjelaskan cara menggunakan gerbang keluar untuk mengakses layanan eksternal dari aplikasi yang berjalan di dalam kluster dengan proxy sidecar yang telah disuntikkan.
Prasyarat
-
Kluster ACK telah ditambahkan ke instans ASM versi 1.22 atau lebih baru.
-
Kebijakan injeksi sidecar telah dikonfigurasi.
-
Gerbang masuk (ingress gateway) telah dibuat.
-
Aplikasi contoh sleep telah diterapkan. Untuk informasi selengkapnya, lihat Buat Aplikasi Uji sleep.
-
Anda telah mengaktifkan Alibaba Cloud Model Studio dan memperoleh Kunci API yang valid. Untuk informasi selengkapnya, lihat Dapatkan Kunci API.
Ikhtisar
Tanpa gerbang keluar, permintaan klien dicegat oleh proxy sidecar, yang kemudian meneruskan permintaan tersebut ke penyedia LLM. Karena sidecar dan klien berada dalam Pod yang sama, metode ini menimbulkan beberapa risiko keamanan, seperti kebocoran Kunci API dan akses tidak sah. Jika Anda khawatir terhadap risiko tersebut, kami sangat menyarankan penggunaan gerbang keluar untuk mengarahkan permintaan.
Penggunaan gerbang keluar ASM meningkatkan keamanan. Karena gerbang keluar ditempatkan terpisah dari klien, Anda dapat memanfaatkan mekanisme Role-Based Access Control (RBAC) pada kluster ACK untuk membatasi siapa yang dapat mengelolanya, sehingga meningkatkan keamanan keseluruhan gerbang tersebut. Gerbang keluar menangani semua operasi keamanan, seperti penambahan dinamis Kunci API serta penerapan kebijakan otentikasi dan otorisasi. Desain ini memungkinkan Anda memanfaatkan seluruh fitur keamanan gerbang ASM secara optimal.
Diagram berikut menunjukkan alur permintaan yang digunakan dalam topik ini:
Langkah 1: Buat gerbang keluar dan resource Gateway
-
Buat gerbang keluar, buka port 80, dan aktifkan Support two-way TLS authentication. Untuk detailnya, lihat Buat Gerbang Keluar.
-
Buat file bernama
egress-gw.yamldengan konten berikut.apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: egress-gw namespace: istio-system spec: selector: istio: egressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTPS tls: mode: ISTIO_MUTUAL -
Gunakan file kubeconfig untuk instans ASM Anda untuk menjalankan perintah berikut dan membuat resource Gateway.
kubectl apply -f egress-gw.yaml
Langkah 2: Buat LLMProvider untuk gerbang keluar
Penerapan LLMProvider hanya pada gerbang keluar memastikan Kunci API disimpan hanya di memori gerbang tersebut, sehingga tidak dapat diakses oleh klien.
-
Buat file bernama
dashscope-qwen.yamldengan konten berikut.apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMProvider metadata: name: dashscope-qwen namespace: istio-system spec: workloadSelector: labels: istio: egressgateway host: dashscope.aliyuncs.com path: /compatible-mode/v1/chat/completions configs: defaultConfig: openAIConfig: model: qwen1.5-72b-chat # Seri model besar open-source Qwen stream: false apiKey: ${API_KEY} -
Jalankan perintah berikut untuk membuat LLMProvider.
kubectl apply -f dashscope-qwen.yaml
Langkah 3: Buat LLMRoute
-
Buat file bernama
dashscope-route.yamldengan konten berikut untuk mengarahkan trafik ke gerbang keluar.apiVersion: istio.alibabacloud.com/v1beta1 kind: LLMRoute metadata: name: dashscope-route spec: host: dashscope.aliyuncs.com gateways: - mesh - istio-system/egress-gw rules: - name: mesh-route # Saat sidecar menerima permintaan untuk dashscope.aliyuncs.com, permintaan tersebut diteruskan ke gerbang keluar. matches: - gateways: - mesh backendRefs: - providerHost: istio-egressgateway.istio-system.svc.cluster.local - name: egress-gw-route # Saat gerbang keluar menerima permintaan untuk dashscope.aliyuncs.com, permintaan tersebut diteruskan ke penyedia sebenarnya. matches: - gateways: - istio-system/egress-gw backendRefs: - providerHost: dashscope.aliyuncs.com -
Jalankan perintah berikut untuk membuat LLMRoute.
kubectl apply -f dashscope-route.yaml
Langkah 4: Uji konfigurasi
Gunakan file kubeconfig untuk kluster ACK Anda untuk menjalankan perintah berikut guna menguji konfigurasi.
kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
--header 'Content-Type: application/json' \
--data '{
"messages": [
{"role": "user", "content": "Introduce yourself"}
]
}'
Output yang diharapkan:
{"choices":[{"message":{"role":"assistant","content":"Hello! I am Qwen, a pre-trained language model developed by Alibaba Cloud. My purpose is to assist users in generating various types of text, such as articles, stories, poems, and answering questions by leveraging my extensive knowledge and understanding of context. Although I'm an AI, I don't have a physical body or personal experiences like human beings do, but I've been trained on a vast corpus of text data, which allows me to engage in conversations, provide information, or help with various tasks to the best of my abilities. So, feel free to ask me anything, and I'll do my best to provide helpful and informative responses!"},"finish_reason":"stop","index":0,"logprobs":null}],"object":"chat.completion","usage":{"prompt_tokens":12,"completion_tokens":130,"total_tokens":142},"created":1720680044,"system_fingerprint":null,"model":"qwen1.5-72b-chat","id":"chatcmpl-3608dcd5-e3ad-9ade-bc70-xxxxxxxxxxxxxx"}
Langkah 5: Konfigurasikan kebijakan otorisasi
-
Buat file bernama
authpolicy.yamldengan konten berikut.apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: test namespace: istio-system spec: action: DENY rules: - from: - source: principals: - cluster.local/ns/default/sa/sleep to: - operation: hosts: - dashscope.aliyuncs.com selector: matchLabels: istio: egressgateway -
Gunakan file kubeconfig untuk instans ASM Anda untuk menjalankan perintah berikut guna menerapkan kebijakan otorisasi.
kubectl apply -f authpolicy.yaml -
Jalankan kembali perintah dari Langkah 4 untuk menguji kebijakan tersebut.
Output yang diharapkan:
RBAC: access deniedOutput tersebut menunjukkan bahwa permintaan ditolak.
Kemampuan keamanan yang disediakan gerbang ASM untuk permintaan HTTP standar juga berlaku untuk permintaan LLM. Kemampuan tersebut mencakup berbagai kebijakan otorisasi, otentikasi JWT, dan layanan otorisasi kustom. Dengan menerapkan kebijakan ini pada gerbang keluar, Anda dapat mengamankan aplikasi Anda secara lebih efektif.