Anda dapat menggunakan Ingress Gateway Service Mesh (ASM) untuk mengakses layanan Google Remote Procedure Call (gRPC) dalam instance ASM. Hal ini memungkinkan Anda menerapkan kontrol akses yang presisi pada layanan gRPC, meningkatkan tata kelola layanan, dan memastikan keamanan komunikasi antar layanan. Topik ini menjelaskan cara menggunakan Ingress Gateway untuk mengakses layanan gRPC dalam instance ASM serta cara mengalihkan lalu lintas antara dua versi layanan gRPC.
Prasyarat
Langkah 1: Menyebarkan aplikasi contoh
Sebarkan versi 1 dan versi 2 dari layanan gRPC: istio-grpc-server-v1 dan istio-grpc-server-v2.
Buat file bernama app.yaml dan salin konten berikut ke dalam file:
Jalankan perintah berikut untuk menyebarkan aplikasi:
kubectl apply -f app.yaml
Langkah 2: Mengonfigurasi aturan routing
Buat gateway Istio, layanan virtual, dan aturan tujuan untuk instance ASM guna merutekan semua lalu lintas arah masuk ke istio-grpc-server-v1.
Jalankan perintah berikut untuk membuat file bernama rules.yaml dan salin konten berikut ke dalam file:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: grpc-gateway spec: selector: istio: ingressgateway servers: - port: number: 8080 name: grpc protocol: GRPC hosts: - "*" --- apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: dr-istio-grpc-server spec: host: grpc-helloworld-py trafficPolicy: loadBalancer: simple: ROUND_ROBIN subsets: - name: v1 labels: version: "v1" - name: v2 labels: version: "v2" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: grpc-vs spec: hosts: - "*" gateways: - grpc-gateway http: - match: - port: 8080 route: - destination: host: grpc-helloworld-py port: number: 50051 subset: v1 weight: 100 - destination: host: grpc-helloworld-py port: number: 50051 subset: v2 weight: 0Jalankan perintah berikut untuk menyebarkan aturan routing:
kubectl apply -f rules.yaml
Langkah 3: Buat ingress gateway atau gunakan ingress gateway yang ada
Buat ingress gateway
Buat Ingress Gateway dan atur Service Port dari Ingress Gateway menjadi 8080.
Tambahkan port 8080 ke ingress gateway yang ada
Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih .
Di halaman Ingress Gateway, klik nama gateway yang diinginkan. Di bagian Basic options halaman Gateway Details, klik ikon
di samping Port. Dalam kotak dialog Port Mapping, klik Add Port, atur Protocol menjadi TCP, atur Service Port menjadi 8080, lalu klik Submit.
Langkah 4: Mulai klien gRPC
Instal alat baris perintah grpcurl untuk menjalankan perintah berikut:
grpcurl -d '{"name": "Jack"}' -plaintext {Alamat IP ingress gateway}:8080 helloworld.Greeter/SayHelloOutput menunjukkan bahwa semua permintaan dirutekan ke istio-grpc-server-v1.
"message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
Langkah 5: Rutekan lalu lintas ke layanan gRPC v2 berdasarkan rasio tertentu
Rutekan 40% lalu lintas ke istio-grpc-server-v2 dan 60% lalu lintas ke istio-grpc-server-v1.
Jalankan perintah berikut untuk mengedit layanan virtual:
kubectl edit VirtualService grpc-vsJalankan perintah berikut untuk memodifikasi
routedan simpan aturan:.... route: - destination: host: grpc-helloworld-py port: number: 50051 subset: v1 weight: 60 - destination: host: grpc-helloworld-py port: number: 50051 subset: v2 weight: 40Jalankan perintah gRPCurl berikut untuk mengakses layanan gRPC yang Anda sebarkan di instance ASM:
grpcurl -d '{"name": "Jack"}' -plaintext {Alamat IP ingress gateway}:8080 helloworld.Greeter/SayHelloOutput menunjukkan bahwa 40% lalu lintas dirutekan ke istio-grpc-server-v2.
CatatanLalu lintas mungkin tidak dirutekan ke istio-grpc-server-v1 dan istio-grpc-server-v2 dengan rasio tepat 60:40. Namun, distribusi lalu lintas secara keseluruhan selalu mendekati rasio ini.
"message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Halo, Jack! Saya dari grpc-helloworld-py-v1-79b5dc9654-cg4dq!"