Service Mesh (ASM) memungkinkan akses ke layanan LLM eksternal melalui egress gateway. Hal ini sangat berguna untuk skenario di mana peminta berada di dalam cluster dan memiliki sidecar yang diinjeksi. Topik ini menjelaskan proses mengakses layanan di luar cluster melalui egress gateway.
Prasyarat
Tambahkan kluster ke instance ASM versi 1.22 atau lebih baru.
Sebarkan aplikasi sampel sleep. Untuk langkah-langkah spesifik, lihat Buat aplikasi uji bernama sleep.
Alibaba Cloud Model Studio telah diaktifkan dan Kunci API yang valid telah diperoleh. Untuk langkah-langkah spesifik, lihat Peroleh Kunci API.
Ikhtisar
Tanpa egress gateway, permintaan klien diintersep oleh sidecar, yang kemudian memulai permintaan ke penyedia LLM. Baik sidecar maupun klien berada dalam pod yang sama, menyajikan risiko keamanan seperti paparan Kunci API dan akses tidak sah. Untuk mengurangi risiko ini, disarankan menggunakan model routing egress gateway.
Dengan mengintegrasikan ASM egress gateway yang ditempatkan secara terpisah dari klien ke dalam jejak permintaan, Anda dapat dengan mudah mengelola akses ke egress gateway menggunakan mekanisme RBAC yang disediakan oleh kluster ACK, sehingga meningkatkan tingkat keamanan. Selain itu, manajemen Kunci API dan kebijakan otentikasi dikonfigurasikan untuk egress gateway, memungkinkan Anda memanfaatkan semua kemampuan keamanan dari gateway ASM.
Jejak permintaan yang dibahas dalam topik ini adalah sebagai berikut:
Langkah 1: Buat egress gateway dan aturan gateway
Buat egress gateway, aktifkan port 80 untuk gateway, dan aktifkan Support two-way TLS authentication. Untuk langkah-langkah spesifik, lihat Buat Egress Gateway.
Buat file bernama egress-gw.yaml dengan 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_MUTUALJalankan perintah berikut untuk membuat aturan gateway menggunakan file kubeconfig dari instance ASM:
kubectl apply -f egress-gw.yaml
Langkah 2: Buat LLMProvider yang hanya berlaku pada egress gateway
Membuat LLMProvider yang hanya efektif pada egress gateway memastikan bahwa KUNCI API tetap berada hanya di memori egress gateway, mencegah akses mudah oleh klien.
Buat file bernama dashscope-qwen.yaml dengan 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 # Qwen seri sumber terbuka besar 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.yaml dengan konten berikut untuk mengarahkan lalu lintas ke egress gateway:
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 dari dashscope.aliyuncs.com, teruskan ke egress gateway matches: - gateways: - mesh backendRefs: - providerHost: istio-egressgateway.istio-system.svc.cluster.local - name: egress-gw-route # Setelah egress gateway menerima permintaan dari dashscope.aliyuncs.com, teruskan ke penyedia asli matches: - gateways: - istio-system/egress-gw backendRefs: - providerHost: dashscope.aliyuncs.comJalankan perintah berikut untuk membuat LLMRoute:
kubectl apply -f dashscope-route.yaml
Langkah 4: Verifikasi
Jalankan perintah berikut untuk memulai pengujian menggunakan file kubeconfig dari kluster ACK pada bidang data plane:
kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
--header 'Content-Type: application/json' \
--data '{
"messages": [
{"role": "user", "content": "Silakan perkenalkan diri Anda"}
]
}'Output yang Diharapkan:
{"choices":[{"message":{"role":"assistant","content":"Halo! Saya adalah Qwen, model bahasa pra-latih yang dikembangkan oleh Alibaba Cloud. Tujuan saya adalah membantu pengguna dalam menghasilkan berbagai jenis teks, seperti artikel, cerita, puisi, dan menjawab pertanyaan dengan memanfaatkan pengetahuan luas dan pemahaman konteks saya. Meskipun saya adalah AI, saya tidak memiliki tubuh fisik atau pengalaman pribadi seperti manusia, tetapi saya telah dilatih pada kumpulan data teks yang sangat besar, yang memungkinkan saya terlibat dalam percakapan, memberikan informasi, atau membantu berbagai tugas sebaik mungkin. Jadi, jangan ragu untuk bertanya apa pun, dan saya akan melakukan yang terbaik untuk memberikan tanggapan yang membantu dan informatif!"},"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.yaml dengan 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: egressgatewayJalankan perintah berikut untuk mengonfigurasi kebijakan otorisasi menggunakan kubeconfig dari instance ASM:
kubectl apply -f authpolicy.yamlJalankan ulang perintah dari Langkah 4 untuk memulai pengujian lain:
Output yang Diharapkan:
RBAC: akses ditolakOutput menunjukkan bahwa permintaan ditolak.
Fitur keamanan dari gateway ASM untuk permintaan HTTP standar juga berlaku untuk permintaan LLM, termasuk kebijakan otorisasi komprehensif, otentikasi JWT, dan layanan otorisasi kustom. Mengimplementasikan kebijakan-kebijakan ini pada egress gateway dapat secara signifikan meningkatkan keamanan aplikasi Anda.