Todos os produtos
Search
Central de documentação

Microservices Engine:Rotear serviços gRPC com um Cloud Native Gateway

Última atualização: Aug 21, 2026

O protocolo gRPC utiliza HTTP/2 e oferece recursos como streaming bidirecional, compressão de cabeçalhos e multiplexação para aumentar a eficiência da rede. Este tópico demonstra como implantar uma aplicação gRPC em um cluster do Container Service for Kubernetes (ACK) e usar um Cloud Native Gateway para rotear o tráfego correspondente.

Pré-requisitos

Etapa 1: Implantar a aplicação gRPC

Para obter instruções detalhadas, consulte Crie uma carga de trabalho sem estado usando um Deployment.

Este exemplo utiliza a aplicação grpcbin como serviço de backend de amostra, pois ela implementa diversos métodos gRPC. Aplique os seguintes recursos no seu cluster ACK.

Nota

Em um Service do Kubernetes, o name da port que gerencia o tráfego gRPC deve conter grpc.

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

O código abaixo apresenta a definição proto deste serviço gRPC.

syntax = "proto3";

package grpcbin;

service GRPCBin {
  rpc Index(EmptyMessage) returns (IndexReply) {}
  // A method with no parameters that returns an empty response.
  rpc Empty(EmptyMessage) returns (EmptyMessage) {}
  // Echoes the request parameters in the response.
  rpc DummyUnary(DummyMessage) returns (DummyMessage) {}
  // A server-streaming call that returns 10 messages.
  rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {}
  // A client-streaming call that accepts 10 requests and returns the body of the last one.
  rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {}
  // A bidirectional streaming method.
  rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {}
  // This method returns a specified gRPC error.
  rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {}
  // This method returns a random error.
  rpc RandomError(EmptyMessage) returns (EmptyMessage) {}
  // This method returns headers.
  rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {}
  // This method 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;
}

Como o gRPC se baseia no protocolo HTTP/2, seus caminhos seguem o formato {PackageName}.{ServiceName}/{MethodName}. Essa estrutura permite que o Cloud Native Gateway roteie requisições com base no caminho. Por exemplo, uma chamada gRPC para o método Index do serviço grpcbin possui o caminho grpcbin.GRPCBin/Index.

Etapa 2: Configure o roteamento gRPC

Adicione o cluster ACK como source de serviço do gateway e, em seguida, adicione o serviço grpcbin.

Adicionar uma source de serviço

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

  2. No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Na página Gateways, clique em no ID do gateway.

  3. No painel de navegação à esquerda, clique em Routes. Em seguida, clique em na aba Source.

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

    Parâmetro

    Descrição

    ACK/ACK Serverless Cluster

    Selecione o cluster onde o serviço de backend está localizado.

    Nota

    Ao criar o gateway, selecione a mesma Virtual Private Cloud (VPC) do cluster de backend. Assim, ao adicionar a source de serviço, o sistema descobre automaticamente os clusters nessa VPC.

    Listen to Kubernetes Ingress

    • Ao ativar esta opção, o Cloud Native Gateway monitora automaticamente alterações nos recursos de Ingress e aplica as configurações de domínio e rota desses recursos.

    • Se você desativar esta opção, o Cloud Native Gateway para de monitorar recursos de Ingress e invalida as configurações aplicadas anteriormente a partir deles. Utilize esta opção com cautela.

    Importante

    As configurações de domínio e rota definidas manualmente no console têm prioridade maior do que as provenientes de recursos de Ingress.

    Ingress Class

    Monitora recursos de Ingress associados à IngressClass especificada.

    • Se deixado em branco, o gateway monitora todos os recursos de Ingress no cluster.

    • Ao especificar um valor (apenas um único valor é suportado), o gateway monitora recursos de Ingress cuja anotação class ou campo Spec.IngressClassName corresponda ao valor definido. Por exemplo, se você definir como nginx, o gateway monitorará recursos de Ingress com IngressClass nginx e também aqueles não associados a nenhuma IngressClass.

    Namespace

    Monitora recursos de Ingress em um namespace específico.

    • Se deixado em branco, o gateway monitora recursos de Ingress em todos os namespaces do cluster.

    • Ao especificar um valor (apenas um único valor é suportado), o gateway monitora recursos de Ingress no namespace indicado.

    Update Ingress Status

    Ao ativar esta opção, o sistema atualiza o endereço IP no campo Status do Ingress monitorado para o endereço IP da instância do Server Load Balancer (SLB) associada ao Cloud Native Gateway.

    Nota

    Este recurso requer a versão 1.2.9 ou posterior do gateway.

    Security Group Authorization

    Um grupo de segurança é configurado para o pool de nós do cluster de contêineres. Para permitir que componentes fora do cluster acessem serviços internos, abra as portas de serviço necessárias no grupo de segurança.

    É possível modifique o grupo de segurança. Para mais informações, consulte Defina security group rules.

Adicionar um serviço

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

  2. No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Na página Gateways, clique em no ID do gateway.

  3. No painel de navegação à esquerda, clique em Routes. Em seguida, clique em na aba Services.

  4. Clique em Create Service, configure os parâmetros no painel e clique em OK.

    Parâmetro

    Descrição

    Service Sources

    Selecione Container Service.

    Namespaces

    Selecione o namespace do cluster de destino.

    Services

    Escolha o serviço na lista.

Adicionar uma rota grpcbin

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

  2. No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Na página Gateways, clique em no ID do gateway.

  3. No painel de navegação à esquerda, clique em Routes. Em seguida, clique em na aba Routes.

  4. Clique em Add Route. Na página Add Route, configure os parâmetros da rota e clique em Save and Advertise. Para instruções detalhadas, consulte Add a route.

    Parâmetro

    Descrição

    Route Name

    Defina como grpc.

    Domain Name

    Selecione o domínio padrão *.

    Path

    Defina a condição de correspondência como Prefix e o valor do caminho como /grpcbin.GRPCBin.

    Nota

    O formato de caminho para um serviço gRPC é {PackageName}.{ServiceName}/{MethodName}. Configure uma rota baseada em prefixo seguindo este formato.

    Scenario

    Defina Scenario como Single Service.

    Backend Service

    Selecione o serviço de destino e a porta do serviço.

Verifique os resultados

Utilize o bloomrpc para testar o serviço gRPC. Uma resposta bem-sucedida confirma a disponibilidade do serviço.

Outros clientes gRPC também podem ser usados para testes.

Use o BloomRPC para iniciar uma Unary Call no método grpcbin.GRPCBin.DummyUnary. Exemplo de corpo da requisição:

{
  "f_string": "Hello",
  "f_strings": [
    "Hello"
  ],
  "f_int32": 10,
  "f_int32s": [
    10
  ],
  "f_enum": 0,
  "f_enums": [
    0
  ],
  "f_sub": {
    "f_string": "Hello"
  },
  "f_subs": [
    {
      "f_string": "Hello"
    }
  ],
  "f_bool": true,
  "f_bools": [
    true
  ],
  "f_int64": 20,
  "f_int64s": [
    20
  ],
  "f_bytes": {}
}

Exemplo de resposta do servidor (latência: ~0,14s):

{
  "f_strings": [
    "Hello"
  ],
  "f_int32s": [
    10
  ],
  "f_enums": [
    "ENUM_0"
  ],
  "f_subs": [
    {
      "f_string": "Hello"
    }
  ],
  "f_bools": [
    true
  ],
  "f_int64s": [
    "20"
  ],
  "f_bytess": [],
  "f_floats": [
    1.100000023841858
  ],
  "f_string": "Hello",
  "f_int32": 10,
  "f_enum": "ENUM_0",
  "f_sub": {
    "f_string": "Hello"
  }
}