全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Gunakan ingress gateway untuk mengakses layanan gRPC di instance ASM

更新时间:Jul 02, 2025

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.

  1. Buat file bernama app.yaml dan salin konten berikut ke dalam file:

    Klik untuk melihat detail

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-helloworld-py-v1
      labels:
        app: grpc-helloworld-py
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: grpc-helloworld-py
          version: v1
      template:
        metadata:
          labels:
            app: grpc-helloworld-py
            version: v1
        spec:
          containers:
            - name: grpc-helloworld-py
              image: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-grpc-server:grpc-helloworld-py-v1.0
              imagePullPolicy: Always
              env:
                - name: podname
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.name
              ports:
                - containerPort: 50051
                  name: grpc-port
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: grpc-helloworld-py-v2
      labels:
        app: grpc-helloworld-py
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: grpc-helloworld-py
          version: v2
      template:
        metadata:
          labels:
            app: grpc-helloworld-py
            version: v2
        spec:
          containers:
            - name: grpc-helloworld-py
              image: registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-grpc-server:grpc-helloworld-py-v1.0
              imagePullPolicy: Always
              env:
                - name: podname
                  valueFrom:
                    fieldRef:
                      apiVersion: v1
                      fieldPath: metadata.name
              ports:
                - containerPort: 50051
                  name: grpc-port
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: grpc-helloworld-py
      labels:
        app: grpc-helloworld-py
    spec:
      ports:
        - port: 50051
          name: grpc-port
      selector:
        app: grpc-helloworld-py
  2. 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.

  1. 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: 0        
  2. Jalankan 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

  1. Masuk ke Konsol ASM. Di panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi sebelah kiri, pilih ASM Gateways > Ingress Gateway.

  3. Di halaman Ingress Gateway, klik nama gateway yang diinginkan. Di bagian Basic options halaman Gateway Details, klik ikon Dingtalk_20230104170049.jpg 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

  1. Instal alat baris perintah grpcurl untuk menjalankan perintah berikut:

    grpcurl -d '{"name": "Jack"}' -plaintext {Alamat IP ingress gateway}:8080 helloworld.Greeter/SayHello
  2. Output 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.

  1. Jalankan perintah berikut untuk mengedit layanan virtual:

    kubectl edit VirtualService grpc-vs

    Jalankan perintah berikut untuk memodifikasi route dan 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: 40
  2. Jalankan 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/SayHello

    Output menunjukkan bahwa 40% lalu lintas dirutekan ke istio-grpc-server-v2.

    Catatan

    Lalu 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!"