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:
Um gateway nativo da nuvem MSE. Para mais detalhes, consulte Criar um gateway nativo da nuvem MSE
Um cluster gerenciado ACK na mesma VPC do gateway. Para mais detalhes, consulte Criar um cluster gerenciado ACK
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:
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 |
|
|
|
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
Faça login no console MSE. Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Clique em no nome do gateway.
No painel de navegação à esquerda, clique em Routes e selecione a aba Sources.
Clique em Add Source. No painel Add Source, defina Source Type como Container Service, configure os parâmetros abaixo e clique em OK.
| Parâmetro | Descrição |
|---|---|
| ACK/ACK Serverless Cluster | Selecione 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 Ingress | Ative 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 Class | Restrinja 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. |
| Namespace | Restrinja o monitoramento a recursos Ingress em um namespace específico. Deixe em branco para monitorar todos os namespaces. |
| Update Ingress Status | Defina 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 Rules | Os 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
Faça login no console MSE. Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Clique em no nome do gateway.
No painel de navegação à esquerda, clique em Routes e selecione a aba Services.
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 |
Criar uma rota para o serviço grpcbin
Faça login no console MSE. Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Clique em no nome do gateway.
No painel de navegação à esquerda, clique em Routes e selecione a aba Routes.
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âmetro | Descrição |
|---|---|
| Routing Rule Name | Insira grpc. |
| Domain name | Selecione o domínio curinga padrão *. |
| Path | Selecione Prefix e insira /grpcbin.GRPCBin. Isso corresponde a todos os métodos do serviço GRPCBin. Nota O formato do caminho gRPC é |
| Scenario | Selecione Single Service. |
| Backend Service | Selecione 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.

Próximos passos
Criar uma rota -- explore opções avançadas de roteamento, como correspondência baseada em cabeçalhos e divisão de tráfego
Configurar regras de grupo de segurança -- abra as portas necessárias para o tráfego gRPC