Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Deploy a gRPC Service in Knative

Última atualização: Sep 17, 2026

Se o seu Knative Service adota uma arquitetura de sistema distribuído ou microsserviços, use o protocolo gRPC para aumentar a eficiência da comunicação entre cliente e servidor. O ACK Knative oferece suporte aos protocolos HTTP e HTTP/2, incluindo gRPC.

Pré-requisitos

O Knative deve estar implantado em seu cluster. Para mais informações, consulte Deploy and gerencie Knative components.

Etapa 1: Implantar um service gRPC

  1. Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique em no nome do cluster que deseja gerenciar e escolha Applications > Knative no painel de navegação à esquerda.

  3. Na página Knative, clique em na aba Services. Defina o Namespace como default, clique em Create from Template e selecione Custom na lista suspensa Sample Template. Copie o conteúdo abaixo para o editor de modelo e clique em Create para crie um Knative Service chamado helloworld-grpc.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-grpc
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: mpa.autoscaling.knative.dev
        spec:
          containers:
          - image: docker.io/moul/grpcbin # The image contains a tool that is used to test gRPC by providing a gRPC Service to respond to requests. 
            env:
            - name: TARGET
              value: "Knative"
            ports:
            - containerPort: 9000
              name: h2c # Set the name of the gRPC Service in the Knative port section to h2c. 
              protocol: TCP
  4. Adicione um mapeamento ao arquivo Hosts. Mapeie o nome de domínio padrão na coluna Default Domain para o endereço do gateway na coluna Gateway da aba Services.

    Localize o arquivo Hosts em sua máquina e adicione o mapeamento. O formato deve ser Endereço do gateway + Caractere de espaço + Nome de domínio padrão. Em seguida, utilize o nome de domínio padrão para acessar o service gRPC.

    Exemplo:

    121.xx.xxx.xx helloworld-grpc.default.example.com

Etapa 2: Verifique a disponibilidade do service gRPC

  1. Acesse o repositório grpcbin e instale a versão do BloomRPC compatível com seu sistema operacional.

  2. Copie o conteúdo a seguir para o arquivo gRPC.proto e salve-o em sua máquina local:

    syntax = "proto3";
    
    package grpcbin;
    
    service GRPCBin {
      rpc Index(EmptyMessage) returns (IndexReply) {}
      // Define an RPC method that takes an empty message as the input and returns an empty message as the output. 
      rpc Empty(EmptyMessage) returns (EmptyMessage) {}
      // Define an RPC method that takes a dummy message as the input and returns a dummy message as the output. 
      rpc DummyUnary(DummyMessage) returns (DummyMessage) {}
      // Define an RPC method that takes a dummy message as the input and returns a stream of dummy messages (10 messages) as the output. 
      rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {}
      // Define an RPC method that takes a stream of dummy messages (10 messages) as the input and returns a dummy message as the output. 
      rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {}
      // Define an RPC method that takes a stream of dummy messages as the input and returns a stream of dummy messages as the output. 
      rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {}
      // Define an RPC method that returns a message of the specified gRPC error. 
      rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {}
      // Define an RPC method that returns a message of a random error.
      rpc RandomError(EmptyMessage) returns (EmptyMessage) {}
      // Define an RPC method that returns a header. 
      rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {}
      // Define an RPC method that does not return any messages. 
      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;
    }

    O service gRPC utiliza HTTP/2. O caminho desse service segue o formato {Nome do pacote}.{Nome do service}/{Nome do método}. Configure o gateway do Knative para rotear pacotes gRPC definindo o campo Path conforme esse padrão. Por exemplo, para invocar o método Index do pacote grpcbin, o caminho será grpcbin.GRPCBin/Index.

  3. Utilize o BloomRPC para validar a disponibilidade do service gRPC. A confirmação ocorre quando o servidor retorna respostas normalmente.

    1. Importe o arquivo gRPC.proto no BloomRPC.

    2. No painel de navegação à esquerda, clique em no método DummyUnary e especifique Nome de domínio:Porta na parte superior da página. Exemplo: helloworld-grpc.default.example.com:80.

    3. Clique em no botão verde e verifique se as respostas retornadas pelo servidor estão corretas.

Referências

É possível configure um certificado para acessar services via HTTPS usando um nome de domínio personalizado. Para mais detalhes, consulte Configure HTTPS access.