All Products
Search
Document Center

Alibaba Cloud Service Mesh:Akses layanan gRPC dalam mesh melalui gerbang ASM

Last Updated:Sep 01, 2026

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.

  1. Buat file bernama app.yaml.

    YAML

    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. 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.

  1. 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        
  2. 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

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

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

  3. Pada halaman Ingress Gateway, klik nama gerbang target. Pada halaman Gateway Details, di bagian Basic options, klik ikon Dingtalk_20230104170049.jpg 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

  1. Instal tool baris perintah grpcurl dan jalankan perintah berikut:

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

  1. Edit layanan virtual.

    kubectl edit VirtualService grpc-vs

    Ubah bagian route seperti 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
  2. Jalankan kembali perintah grpcurl untuk mengakses layanan gRPC dalam mesh.

    grpcurl -d '{"name": "Jack"}' -plaintext {IP address of the ingress gateway}:8080 helloworld.Greeter/SayHello

    Output menunjukkan bahwa sekitar 40% trafik diarahkan ke v2.

    Catatan

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