I’m building a gRPC health check service (https://ack.al) and have a known-working gRPC healthcheck server that implements the gRPC Health Check protocol.
I deployed the container to Koyeb and it deployed successfully, first time. I found the UI unfamiliar and initially didn’t make the container’s (default|50051) port public.
I’m unable to gRPCurl the service’s endpoint.
The UI Dashboard shows that the app’s healthy and the app logs are expected.
I was unclear whether the service would be published under 443 or 50051 but think 443 is correct. I’m able to query the endpoint’s TLS:
I think this is because the reflect api seems to not be available through our load balancer layer (cloudflare), the connection seems to keep hanging. We will try to investigate with them why.
You can directly use it using a go client with a proto and also using grpcurl but you need to provide a proto file.
I thought that reflection would only be involved for `list`'ing services|methods and not for direct method invocation e.g. `grpc.health.v1.Health/Check`:
I’m so used to using gRPC reflection that I’d become unfamiliar with how gRPC behaves without it. I just confirmed that reflection is required even to invoke a specific method.
So far Cloudflare has some hypotheses on why it would be blocked but we didn’t confirm nor reproduce in an isolated setup.
Basically, we are not able to enable at the same time the WAF and the gRPC reflect. The buffering of the request for inspection by the WAF might be the reason why gRPC reflect is not working.
We will re-assess this later, but it might also be possible to use an unbuffered stream, with some minimal WAF setup. Alternatively, we plan to offer direct connectivity, which could also depending of the need solve this.
As a workaround, you should be able to spawn a debug service/worker and use grpcurl with reflection directly by accessing the gRPC service using the mesh DNS entry.
Also as mentioned before, grpcurl using the proto file is also working fine, but I agree that sometimes it’s not the simplest, especially with external dependencies.