The most scalable and customizable permission server on the market. Fix your slow or broken permission system with Google's proven "Zanzibar" approach. Supports ACL, RBAC, and more. Written in Go, cloud native, headless, API-first. Available as a service on Ory Network and for self-hosters.
All gRPC requests sent to the keto pod on kubernetes (using the keto-write service) seems to be handled by the HTTP Handler instead of the gRPC handler.
It seems like Istio can multiplex both http2 and grpc requests over the same connection while cmux uses the connection and this might be the reason for the observed results, e.g. some previous plain http2 request is sent and cmux matches to HTTP1, then the same connection is reused for gRPC requests and they also get routed to HTTP1 handler
Possible workarounds:
Perhaps one could offer a configuration option to offer exclusive HTTP or GRPC APIs, at least for me i would be happy to just run the gRPC and not the HTTP.
Run gRPC and HTTP on seperate ports
Reproducing the bug
Create a kubernetes cluster (using kind, minikube, or even on GKE)
Install istio 1.12
Deploy keto to ory namespace
Deploy custom application to any other namespace
Both namespaces have istio-injection: enabled to ensure proxies are created
Send gRPC request from custom application to keto-write.ory:80
Preflight checklist
Describe the bug
All gRPC requests sent to the keto pod on kubernetes (using the keto-write service) seems to be handled by the HTTP Handler instead of the gRPC handler.
After numerous attempts trying to get it to work on kubernetes together with Istio, I still cant it to work and i think the culprit is https://github.com/ory/keto/blob/ef103eb231c6ca466d7c928ca73b29bf3d4c23d1/internal/driver/daemon.go#L189
It seems like Istio can multiplex both http2 and grpc requests over the same connection while cmux uses the connection and this might be the reason for the observed results, e.g. some previous plain http2 request is sent and cmux matches to HTTP1, then the same connection is reused for gRPC requests and they also get routed to HTTP1 handler
Possible workarounds:
Reproducing the bug
Relevant log output
Relevant configuration
Version
v0.8.0-alpha.0
On which operating system are you observing this issue?
Linux
In which environment are you deploying?
Kubernetes
Additional Context
No response