Gunakan gerbang masuk ASM untuk mengakses layanan gRPC dalam mesh Anda secara aman. Pendekatan ini memungkinkan kontrol akses yang presisi, tata kelola layanan yang lebih baik, serta komunikasi antarlayanan yang aman. Topik ini menjelaskan cara mengakses layanan gRPC melalui gerbang masuk dan mengalihkan trafik antara dua versi layanan tersebut.
Sebelum memulai
Langkah 1: Deploy aplikasi contoh
Deploy dua versi aplikasi contoh: istio-grpc-server-v1 dan istio-grpc-server-v2.
-
Buat file bernama
app.yaml. -
Deploy aplikasi tersebut.
kubectl apply -f app.yaml
Langkah 2: Atur aturan routing
Buat gerbang (gateway), layanan virtual (virtual service), dan aturan tujuan (destination rule) untuk mengarahkan seluruh trafik ke layanan istio-grpc-server-v1.
-
Buat file bernama
rules.yaml.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: 0 -
Terapkan aturan tersebut.
kubectl apply -f rules.yaml
Langkah 3: Deploy atau gunakan gerbang masuk
Gerbang baru
Buat gerbang masuk dan tambahkan port 8080 selama konfigurasi Port Mapping.
Gerbang yang sudah ada
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih .
-
Pada halaman Ingress Gateway, klik nama gerbang target. Pada halaman Gateway Details, di bagian Basic options, klik ikon
di samping Port. Pada kotak dialog Port Mapping, klik Add Port, atur Protocol menjadi TCP dan Service Port menjadi 8080, lalu klik Submit.
Langkah 4: Jalankan klien gRPC
-
Instal tool baris perintah grpcurl dan jalankan perintah berikut:
grpcurl -d '{"name": "Jack"}' -plaintext {IP address of the ingress gateway}:8080 helloworld.Greeter/SayHello -
Output menunjukkan bahwa semua permintaan diarahkan ke
v1."message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"
Langkah 5: Alihkan trafik dengan routing berbasis bobot
Perbarui layanan virtual untuk mengarahkan 40% trafik ke v2 dan sisanya 60% ke v1.
-
Edit layanan virtual.
kubectl edit VirtualService grpc-vsUbah bagian
routeseperti berikut dan simpan perubahan..... route: - destination: host: grpc-helloworld-py port: number: 50051 subset: v1 weight: 60 - destination: host: grpc-helloworld-py port: number: 50051 subset: v2 weight: 40 -
Jalankan kembali perintah
grpcurluntuk mengakses layanan gRPC dalam mesh.grpcurl -d '{"name": "Jack"}' -plaintext {IP address of the ingress gateway}:8080 helloworld.Greeter/SayHelloOutput menunjukkan bahwa sekitar 40% trafik diarahkan ke
v2.CatatanHasil Anda mungkin tidak menunjukkan pembagian tepat 40/60, tetapi distribusi trafik secara keseluruhan akan mendekati rasio tersebut seiring waktu.
"message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v2-7f56b49b7f-9vvr7!" "message": "Hello, Jack! I'm from grpc-helloworld-py-v1-79b5dc9654-cg4dq!"