Topik ini menjelaskan cara menggunakan Gerbang Keluar (Egress Gateway) Service Mesh (ASM) untuk mengakses layanan LLM eksternal. Metode ini ideal untuk skenario di mana klien berjalan di dalam kluster dan telah disuntikkan Sidecar.
Prasyarat
-
Kluster ACK telah ditambahkan ke instans ASM versi 1.22 atau yang lebih baru.
-
Kebijakan Injeksi Sidecar telah dikonfigurasi.
-
Ingress Gateway telah dibuat.
-
Aplikasi sampel sleep telah diterapkan. Untuk informasi selengkapnya, lihat Buat Aplikasi uji sleep.
-
Anda telah mengaktifkan Alibaba Cloud Model Studio dan memperoleh Kunci API yang valid.
Ikhtisar
Tanpa Gerbang Keluar, permintaan klien dicegat oleh Sidecar Proxy, yang kemudian meneruskan permintaan tersebut ke penyedia layanan LLM. Karena Sidecar ditempatkan di pod yang sama dengan klien, pendekatan ini menimbulkan risiko keamanan, seperti kebocoran Kunci API dan akses tidak sah. Jika Anda khawatir terhadap risiko tersebut, kami sangat menyarankan penggunaan Gerbang Keluar.
Dengan memasukkan Gerbang Keluar ASM ke dalam jalur permintaan, keamanan dapat ditingkatkan. Gerbang Keluar ditempatkan secara terpisah dari klien. Pemisahan ini memungkinkan Anda menggunakan mekanisme RBAC pada Kluster ACK untuk membatasi izin pengelolaan gerbang. Kunci API disuntikkan secara dinamis, serta kebijakan otentikasi dan otorisasi diberlakukan di Gerbang Keluar, sehingga Anda dapat memanfaatkan seluruh fitur keamanan Gerbang ASM.
Diagram berikut menunjukkan jalur permintaan yang digunakan dalam topik ini:
Langkah 1: Buat gerbang keluar dan gateway
-
Buat Egress Gateway, konfigurasikan Port 80, dan aktifkan Mutual TLS (mTLS) Authentication. Untuk informasi selengkapnya, lihat Buat Egress Gateway.
-
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 -
Jalankan perintah berikut menggunakan kubeconfig instans ASM untuk membuat Gateway:
kubectl apply -f egress-gw.yaml
Langkah 2: Buat LLMProvider dengan cakupan gateway
Membatasi cakupan LLMProvider hanya pada Gerbang Keluar memastikan Kunci API hanya disimpan di memori Gerbang Keluar dan 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 traffic 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 # Setelah 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 # Setelah 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
Jalankan perintah berikut menggunakan kubeconfig Kluster ACK Anda untuk menguji konfigurasi:
kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' --header 'Content-Type: application/json' --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 users' questions, provide information, and engage in conversations. I can understand users' questions 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":1720680044,"system_fingerprint":null,"model":"qwen1.5-72b-chat","id":"chatcmpl-1c33b950-3220-9bfe-9066-xxxxxxxxxxxx"}
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 -
Jalankan perintah berikut menggunakan kubeconfig ASM untuk menerapkan Kebijakan Otorisasi:
kubectl apply -f authpolicy.yaml -
Jalankan kembali perintah di Langkah 4.
Output yang diharapkan:
RBAC: access deniedPermintaan ditolak.
Gerbang ASM menyediakan kemampuan keamanan yang sama untuk permintaan LLM seperti halnya untuk permintaan HTTP biasa, termasuk Kebijakan Otorisasi, otentikasi JWT, dan layanan otorisasi kustom. Dengan menerapkan kebijakan ini di Gerbang Keluar, Anda dapat lebih efektif mengamankan aplikasi Anda.