Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Use um ingress gateway para acessar um serviço gRPC em uma instância do ASM

Última atualização: Jul 05, 2026

Use um ingress gateway do Service Mesh (ASM) para acessar serviços Google Remote Procedure Call (gRPC) em uma instância do ASM. Esse recurso permite implementar controle de acesso preciso nos serviços gRPC, aprimorar a governança de serviços e garantir a segurança na comunicação entre eles. Este tópico descreve como usar um ingress gateway para acessar um serviço gRPC em uma instância do ASM e como direcionar o tráfego entre duas versões de um serviço gRPC.

Pré-requisitos

Etapa 1: Implantar aplicações de exemplo

Implante a versão 1 e a versão 2 de um serviço gRPC: istio-grpc-server-v1 e istio-grpc-server-v2.

  1. Crie um arquivo chamado app.yaml e copie o seguinte conteúdo para ele:

    Clique para visualizar detalhes

    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. Execute o comando a seguir para implantar a aplicação:

    kubectl apply -f app.yaml

Etapa 2: Configurar uma regra de roteamento

Crie um gateway Istio, um serviço virtual e uma regra de destino para a instância do ASM a fim de rotear todo o tráfego de entrada para istio-grpc-server-v1.

  1. Execute o comando a seguir para criar um arquivo chamado rules.yaml e copie o conteúdo abaixo para ele:

    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. Execute o comando a seguir para implantar a regra de roteamento:

    kubectl apply -f rules.yaml

Etapa 3: Criar um ingress gateway ou usar um existente

Criar um ingress gateway

Crie um ingress gateway e defina a Service Port do ingress gateway como 8080.

Adicionar a porta 8080 a um ingress gateway existente

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.

  3. Na página Ingress Gateway, clique em nome do gateway desejado. Na seção Basic options da página Gateway Details, clique em ícone Dingtalk_20230104170049.jpg ao lado de Port. Na caixa de diálogo Port Mapping, clique em Add Port, defina Protocol como TCP, defina Service Port como 8080 e clique em Submit.

Etapa 4: Iniciar o cliente gRPC

  1. Instale a ferramenta de linha de comando grpcurl para executar o seguinte comando:

    grpcurl -d '{"name": "Jack"}' -plaintext {IP address of the ingress gateway}:8080 helloworld.Greeter/SayHello
  2. A saída indica que todas as solicitações são roteadas para istio-grpc-server-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!"     

Etapa 5: Roteamento de tráfego para o serviço gRPC v2 com base em uma proporção específica

Direcione 40% do tráfego para istio-grpc-server-v2 e 60% para istio-grpc-server-v1.

  1. Execute o comando a seguir para editar os serviços virtuais:

    kubectl edit VirtualService grpc-vs

    Modifique route conforme o comando a seguir e salve a regra:

    ....
          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. Execute o comando gRPCurl a seguir para acessar o serviço gRPC implantado na instância do ASM:

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

    A saída indica que 40% do tráfego é roteado para istio-grpc-server-v2.

    Nota

    O tráfego pode não ser distribuído entre istio-grpc-server-v1 e istio-grpc-server-v2 na proporção exata de 60:40. No entanto, a distribuição geral do tráfego permanece sempre próxima dessa proporção.

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