-
Notifications
You must be signed in to change notification settings - Fork 4.4k
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
Updating from go-grpc v1.64.0 to v1.68.1 broke our AWS deployments, migration path is unclear #7922
Comments
So, as I said above, I wouldn't be shocked this is just closed as a On our side, we'll look into enabling ALPN. |
We will be making the following changes:
|
Thanks! I'd like to ask to keep a workaround available for a while. I've been working with a customer that run into downtime due to this change. The customer was using the NGINX Stream module with a config that looked like: stream {
upstream backend {
server <some IP>:2305;
}
server {
listen <some IP>3305;
proxy_pass backend;
proxy_ssl on;
}
} Here's the confusing part: the NGINX Stream module is a TCP load balancer that also happens to speak TLS. However, it does not decrypt the application-layer (HTTP/2, gRPC) traffic, so it's still considered a Layer 4 load balancer. The NGINX stream module has a key setting sequenceDiagram
autonumber
participant Client as Client
participant NGINX as NGINX Stream Proxy
participant Backend as Backend
Client->>NGINX: Establish TLS Session (w/ ALPN Extension)
NGINX->>Backend: Establish TLS Session (w/ ALPN Extension)
Client->>NGINX: Encrypted TCP packets
NGINX->>Backend: Encrypted TCP packets
Backend->>NGINX: Encrypted Response
NGINX->>Client: Encrypted Response
However, when the sequenceDiagram
autonumber
participant Client as Client
participant NGINX as NGINX Stream Proxy
participant Backend as Praefect
Client->>NGINX: Establish TLS Session (w/ ALPN Extension)
NGINX->>Backend: Establish New TLS Session
Client->>NGINX: Encrypted TCP packets
NGINX-->>NGINX: Decrypt TCP packets
NGINX->>Backend: Forwarded, re-encrypted TCP packets
Backend->>NGINX: Encrypted Response
NGINX->>NGINX: Decrypt Response
NGINX-->>Client: Re-encrypted TCP packets
Note on step 2, ALPN is currently not used, and this is why grpc-go v1.67.0 fails to accept the connection. In 2017, someone proposed a patch to add
Note that if the native gRPC support is used, ALPN is fully supported. However, due a sidechannel to bypass gRPC for performance reasons, our software can't yet a gRPC load balancer, so we're working on fixing that. |
What version of gRPC are you using?
v1.68.1
What version of Go are you using (
go version
)?go1.22.10
What operating system (Linux, Windows, …) and version?
Linux 4.14.348-265.565.amzn2.x86_64
What did you do?
We routinely updated our dependencies and released a new patch version without thinking too much about it since it built locally, passed integration tests, built in Github actions and all...
We deployed it in our test AWS environment and it is now somewhat broken:
So it was really just the newer nodes being unable to talk to each other, while being fine with the older ones, which led us to discover #7769 which in turn led us to discover that release v1.67.0 introduced the new behaviour:
Here is our current use case that broke:
It is unclear what the path forward is for us in order to support ALPN, and you said to file a bug if we encountered any issues with the new behaviour, so here am I.
But I don't think there's anything to do on your side, except maybe have a migration path / improved documentation around that error message since a little Google search didn't return anything recent about this issue. Hopefully this issue might point developers googling the issue in the right direction.
What did you expect to see?
Nodes continuing to connect to each others just fine.
In case of big breaking changes such as these, some documentation explaining how to typically enable ALPN in a go-grpc deployment, and including common reverse proxies use-cases such as nginx, AWS or GCP.
What did you see instead?
ALPN-related errors and no related documentation or issues about it.
The text was updated successfully, but these errors were encountered: