получение кода состояния от конечной точки gRPC, не использующей клиент gRPC

#amazon-web-services #grpc

#amazon-web-services #grpc

Вопрос:

Как я могу получить код состояния от конечной точки gRPC без использования клиента gRPC?

Мне нужно протестировать некоторые конечные точки gRPC, которые находятся за AWS application load balancer ( target group ) с проверкой работоспособности, настроенной только на прием статуса 12

 UNIMPLEMENTED   12  The operation is not implemented or is not supported/enabled in this service.
 

Я пытался grpcurl , например:

grpcurl -plaintext 10.1.2.8:8443 AWS.ALB/healthcheck :

Но во многих случаях я получаю:

 Error invoking method "AWS.ALB/healthcheck": failed to query for service descriptor "AWS.ALB": server does not support the reflection API
 

Есть альтернативы или идеи? Меня просто интересует код состояния 12 или описание UNIMPLEMENTED

Комментарии:

1. У меня такая же проблема. В итоге вы нашли решение для этого?

2. не самый лучший, но я создал это crates.io/crates/grpc-status

3. 12 означает код ответа проверки работоспособности целевой группы. Мы устанавливаем для него значение 0 на нашем сервере

Ответ №1:

Код состояния 12 можно изменить с помощью

     alb.ingress.kubernetes.io/success-codes: '0'      // change success code to 0
spec:
  rules:
    - host: server.xxx.com
      http:
        paths:
          - path: /*                                 // set to * to match all grpc service paths
            backend:
              serviceName: server
              servicePort: 9420
 

Также включите отражение сервера

 @@ -40,6  40,7 @@ import (
        "google.golang.org/grpc"
        pb "google.golang.org/grpc/examples/helloworld/helloworld"
        "google.golang.org/grpc/reflection"
 )

 const (
@@ -61,6  62,8 @@ func main() {
        }
        s := grpc.NewServer()
        pb.RegisterGreeterService(s, amp;pb.GreeterService{SayHello: sayHello})
        // Register reflection service on gRPC server.
        reflection.Register(s)
        if err := s.Serve(lis); err != nil {
                log.Fatalf("failed to serve: %v", err)
        }