Todos os produtos
Search
Central de documentação

Microservices Engine:Route gRPC traffic through a cloud-native gateway

Última atualização: Jun 28, 2026

Este guia orienta você na implantação de uma aplicação gRPC em um cluster Container Service for Kubernetes (ACK) e na configuração de um gateway nativo da nuvem MSE para rotear o tráfego até ela. O gRPC opera sobre HTTP/2 e oferece suporte a streaming bidirecional, compactação de cabeçalhos e multiplexação.

Funcionamento do roteamento gRPC

Cada chamada gRPC corresponde a uma solicitação HTTP/2 com um caminho no seguinte formato:

/{PackageName}.{ServiceName}/{MethodName}

Por exemplo, ao chamar o método Index do serviço GRPCBin no pacote grpcbin, o caminho gerado é:

/grpcbin.GRPCBin/Index

Os gateways nativos da nuvem MSE identificam e roteiam solicitações gRPC com base nesse caminho. Ao criar uma rota, defina o prefixo do caminho como o pacote e o serviço que deseja expor.

Pré-requisitos

Antes de começar, verifique se você possui:

Etapa 1: Implantar uma aplicação gRPC no cluster ACK

Este exemplo utiliza o grpcbin, um servidor de teste gRPC open source que expõe diversos métodos RPC, incluindo unário, streaming de servidor, streaming de cliente e streaming bidirecional. O cluster ACK realiza a descoberta de serviços por meio do CoreDNS com APIs de serviço baseadas em anotações.

Para instruções gerais de implantação, consulte Criar uma aplicação stateless usando um Deployment.

Definições de recursos do Kubernetes

Aplique o seguinte Deployment, ServiceAccount e Service ao seu cluster ACK:

Importante

O campo name na definição de port do Service do Kubernetes deve conter grpc. Isso indica ao gateway que deve usar HTTP/2 para a conexão com o backend.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: grpcbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grpcbin
  template:
    metadata:
      labels:
        app: grpcbin
    spec:
      serviceAccountName: grpcbin
      containers:
      - image: docker.io/moul/grpcbin
        imagePullPolicy: IfNotPresent
        name: grpcbin
        ports:
        - containerPort: 9000
        - containerPort: 9001
        resources:
            requests:
              cpu: '1'
              memory: 2Gi
            limit:
              cpu: '1'
              memory: 2Gi
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: grpcbin
---
apiVersion: v1
kind: Service
metadata:
  name: grpcbin-grpc
  labels:
    app: grpcbin
spec:
  ports:
  - name: grpc
    port: 9000
    targetPort: 9000
  selector:
    app: grpcbin

Detalhes importantes da configuração:

Item

Valor

Descrição

name da porta do Service

grpc

Indica ao gateway para usar HTTP/2 na conexão com o backend

Portas do contêiner

9000, 9001

A porta 9000 atende ao tráfego gRPC

Solicitações e limites de recursos

1 CPU, 2 GiB de memória

Tanto as solicitações quanto os limites estão definidos com os mesmos valores

Definição do Proto

O serviço grpcbin define os seguintes métodos RPC:

syntax = "proto3";

package grpcbin;

service GRPCBin {
  rpc Index(EmptyMessage) returns (IndexReply) {}
  // Called without parameters. Returns an empty response.
  rpc Empty(EmptyMessage) returns (EmptyMessage) {}
  // Echoes the request parameters back.
  rpc DummyUnary(DummyMessage) returns (DummyMessage) {}
  // Server streaming: returns 10 response messages.
  rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {}
  // Client streaming: receives 10 requests, returns the last request body.
  rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {}
  // Bidirectional streaming.
  rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {}
  // Returns a specified gRPC error.
  rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {}
  // Returns a random error.
  rpc RandomError(EmptyMessage) returns (EmptyMessage) {}
  // Returns request headers.
  rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {}
  // Returns no response.
  rpc NoResponseUnary(EmptyMessage) returns (EmptyMessage) {}
}

message HeadersMessage {
  message Values {
    repeated string values = 1;
  }
  map<string, Values> Metadata = 1;
}

message SpecificErrorRequest {
  uint32 code = 1;
  string reason = 2;
}

message EmptyMessage {}

message DummyMessage {
  message Sub {
    string f_string = 1;
  }
  enum Enum {
    ENUM_0 = 0;
    ENUM_1 = 1;
    ENUM_2 = 2;
  }
  string f_string = 1;
  repeated string f_strings = 2;
  int32 f_int32 = 3;
  repeated int32 f_int32s = 4;
  Enum f_enum = 5;
  repeated Enum f_enums = 6;
  Sub f_sub = 7;
  repeated Sub f_subs = 8;
  bool f_bool = 9;
  repeated bool f_bools = 10;
  int64 f_int64 = 11;
  repeated int64 f_int64s= 12;
  bytes f_bytes = 13;
  repeated bytes f_bytess = 14;
  float f_float = 15;
  repeated float f_floats = 16;
}

message IndexReply {
  message Endpoint {
    string path = 1;
    string description = 2;
  }
  string description = 1;
  repeated Endpoint endpoints = 2;
}

Etapa 2: Configurar o gateway para rotear solicitações gRPC

Conecte o gateway ao backend grpcbin executando três tarefas: adicionar o cluster ACK como source de serviço, importar o serviço e criar uma rota.

Adicionar uma source de serviço

  1. Faça login no console MSE. Na barra de navegação superior, selecione uma região.

  2. No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Clique em no nome do gateway.

  3. No painel de navegação à esquerda, clique em Routes e selecione a aba Sources.

  4. Clique em Add Source. No painel Add Source, defina Source Type como Container Service, configure os parâmetros abaixo e clique em OK.

ParâmetroDescrição
ACK/ACK Serverless ClusterSelecione o cluster que hospeda os serviços de backend.
Importante

O gateway deve estar na mesma VPC do cluster. Ao criar um gateway e selecionar uma VPC, os clusters nessa VPC são descobertos automaticamente.

Listen to Kubernetes IngressAtive para que o gateway detecte automaticamente alterações nos recursos Ingress e aplique as configurações correspondentes de domínio e rota. Desative para parar de monitorar. Tenha cuidado ao desativar esta opção.
Importante

Nomes de domínio e rotas configurados manualmente no console MSE têm prioridade sobre aqueles provenientes de recursos Ingress.

Ingress ClassRestrinja quais recursos Ingress o gateway monitora. Deixe em branco para monitorar todos os recursos Ingress. Se definido com um valor como nginx, o gateway monitorará recursos Ingress cuja anotação class ou Spec.IngressClassName corresponda, além de quaisquer recursos Ingress não associados a uma classe.
NamespaceRestrinja o monitoramento a recursos Ingress em um namespace específico. Deixe em branco para monitorar todos os namespaces.
Update Ingress StatusDefina como Open para atualizar o endereço IP do Ingress para o IP da instância do Server Load Balancer (SLB) associada ao gateway.
Nota

Requer a versão 1.2.9 ou posterior do gateway.

Security Group RulesOs grupos de segurança são configurados no pool de nós do cluster ACK. O acesso externo aos serviços dentro do cluster geralmente requer a abertura das portas relevantes. Para mais detalhes, consulte Configurar regras de grupo de segurança.

Adicionar um serviço

  1. Faça login no console MSE. Na barra de navegação superior, selecione uma região.

  2. No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Clique em no nome do gateway.

  3. No painel de navegação à esquerda, clique em Routes e selecione a aba Services.

  4. Clique em Add Service. No painel Add Service, configure os parâmetros abaixo e clique em OK.

Parâmetro

Descrição

Source Type

Selecione Container Service.

Namespace

Selecione o namespace do cluster.

Services

Selecione um ou mais serviços na lista. Escolha o serviço grpcbin-grpc.

Criar uma rota para o serviço grpcbin

  1. Faça login no console MSE. Na barra de navegação superior, selecione uma região.

  2. No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Clique em no nome do gateway.

  3. No painel de navegação à esquerda, clique em Routes e selecione a aba Routes.

  4. Clique em Add Route. Configure os parâmetros a seguir e clique em Save and Advertise. Para a referência completa de parâmetros, consulte Criar uma rota.

ParâmetroDescrição
Routing Rule NameInsira grpc.
Domain nameSelecione o domínio curinga padrão *.
PathSelecione Prefix e insira /grpcbin.GRPCBin. Isso corresponde a todos os métodos do serviço GRPCBin.
Nota

O formato do caminho gRPC é /{PackageName}.{ServiceName}/{MethodName}. Defina o prefixo para corresponder ao pacote e ao serviço que deseja expor.

ScenarioSelecione Single Service.
Backend ServiceSelecione o serviço grpcbin-grpc e defina a porta do serviço como 9000.

Verificar o resultado

Após publicar a rota, teste o serviço gRPC para confirmar que o tráfego flui pelo gateway.

Utilize o bloomrpc para testar a disponibilidade do serviço gRPC. Se uma resposta for retornada, o serviço gRPC está disponível. Você também pode usar outros clientes gRPC para realizar testes.

Test gRPC service availability

Próximos passos