Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GRPC does not work? #1084

Open
Leonardo-Ferreira opened this issue Jul 8, 2024 · 5 comments
Open

GRPC does not work? #1084

Leonardo-Ferreira opened this issue Jul 8, 2024 · 5 comments
Labels
bug Something isn't working

Comments

@Leonardo-Ferreira
Copy link

Report

I'm trying to set the HTTP Add On for my GRPC but it's not working. When calling the service, it 'hangs' forever.

Side note: the TLS is "optional" (no forced redirect) at the ingress level and the certificate is signed by a internal CA with multiple SANs (aka common name is generic)

Expected Behavior

the service should reply

Actual Behavior

it hangs until timeout

Steps to Reproduce the Problem

  1. Create a GRPC service
  2. Publish it without keda and validate that its working
  3. Now put keda interceptor in the middle of the way to try to scale the service based on service requests

Logs from KEDA HTTP operator

example

HTTP Add-on Version

0.8.0

Kubernetes Version

< 1.28

Platform

Microsoft Azure

Anything else?

No response

@Leonardo-Ferreira Leonardo-Ferreira added the bug Something isn't working label Jul 8, 2024
@JorTurFer
Copy link
Member

I'm not an expert, but I'd say that GRPC needs HTTP/2 support and ??websockets?? to work well. Am i right? Supporting GRPC'd be nice if you are willing to open a PR

@Leonardo-Ferreira
Copy link
Author

Leonardo-Ferreira commented Sep 3, 2024

I'd be happy to! Would be so kind to point me the right direction of things here? im not familiar with the code here. Something on the lines of "start by checking src/this.go and src/that.go"

@JorTurFer
Copy link
Member

All the interception code is here -> https://github.com/kedacore/http-add-on/tree/main/interceptor

The interceptor works as a split component that route the traffic and exposes metrics, so you don't need to take into account anything else related :)

It has an entrypoint that creates all the deps and so on, and start serving traffic :) I guess that as gRPC keeps the connection open AFAIK, you will need to take this into account to not decrement the counter until the gRPC connection is closed

@wozniakjan
Copy link
Member

wozniakjan commented Sep 4, 2024

but I'd say that GRPC needs HTTP/2 support and ??websockets??

gRPC does need HTTP2 but works without WebSocket. Interceptor only supports gRPC over TLS (you have to mount the certs and explicitly enable TLS), the plaintext gRPC support is not implemented and the reasons why not relate to golang/go#14141.

Alternatively, there is Kedify HTTP Scaler that reuses parts of this http-add-on and has native gRPC support including both plaintext and TLS without any explicit configuration (mounting TLS certs). If you are interested, you can test it in one of the free tutorials https://kedify.io/tutorials/grpc

@araminian
Copy link

@Leonardo-Ferreira I did handle GRPC services using http-add-on with a trick. It might be useful for you.

I add another container to our GRPC services deployment. this container can be a dummy http server. So we can scale up GRPC services just by sending a request to that http server.

it might have not good UX, unless you use it in CI/CD workflows.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: To Triage
Development

No branches or pull requests

4 participants