-
Notifications
You must be signed in to change notification settings - Fork 83
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
Envoy circuit breakers hit with HTTP/2 #839
Comments
As a follow-up, this is mainly overflowing the
There are also some The dynamic clusters are getting default circuit breaker values.
And looking where new clusters appear to be created via the API, there is no circuit breaker config: As my testing has shown, the requests from multiple clients still triggers this overflow. Otherwise, I could create some transport pool to spread the load. I do think each individual Kourier instance should be able to handle > 1024 concurrent requests to a service. |
This issue is stale because it has been open for 90 days with no |
/remove-lifecycle stale |
/reopen |
@mbrancato: Reopened this issue. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
I'm currently working around this with the following hack, but since it is not configurable it requires a custom build on my part: // HTTP/2 expanded max defaults
cluster.CircuitBreakers = &envoyclusterv3.CircuitBreakers{
Thresholds: []*envoyclusterv3.CircuitBreakers_Thresholds{
{
Priority: envoycorev3.RoutingPriority_DEFAULT,
MaxConnections: &wrappers.UInt32Value{Value: 1024},
MaxPendingRequests: &wrappers.UInt32Value{Value: 1024*1024},
MaxRequests: &wrappers.UInt32Value{Value: 1024*1024},
MaxRetries: nil,
RetryBudget: nil,
TrackRemaining: false,
MaxConnectionPools: nil,
},
{
Priority: envoycorev3.RoutingPriority_HIGH,
MaxConnections: &wrappers.UInt32Value{Value: 1024},
MaxPendingRequests: &wrappers.UInt32Value{Value: 1024*1024},
MaxRequests: &wrappers.UInt32Value{Value: 1024*1024},
MaxRetries: nil,
RetryBudget: nil,
TrackRemaining: false,
MaxConnectionPools: nil,
},
},
} |
This issue is stale because it has been open for 90 days with no |
This issue or pull request is stale because it has been open for 90 days with no activity. This bot triages issues and PRs according to the following rules:
You can:
/lifecycle stale |
This issue is stale because it has been open for 90 days with no |
/remove-lifecycle stale |
This issue is stale because it has been open for 90 days with no |
/reopen |
@mbrancato: Reopened this issue. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
This issue is stale because it has been open for 90 days with no |
/reopen |
/remove-lifecycle stale |
This issue is stale because it has been open for 90 days with no |
/remove-lifecycle stale |
This issue is stale because it has been open for 90 days with no |
/reopen |
@mbrancato: Reopened this issue. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
/remove-lifecycle stale |
I use a custom client to send requests to Knative services with a Kourier gateway. It has a slow-start algorithm that gradually scales up concurrent requests until a configured limit is reached, or until error rates are too high. Under normal conditions, with HTTP/1.1, this can easily scale to 10k concurrent requests with just a few Kourier pods. Using HTTP/1.1 is more fragile as it could hit socket limits. However, if I switch that same config to HTTP/2, once the concurrency hits approximately 1000 (maybe slightly lower), Kourier / envoy responds with:
If I reduce the concurrency, but increase the number of clients sending requests, once the total concurrent requests goes above 1000, the same result happens. This might depend on the number of upstream service pods, I was testing with just 2.
Is there a way to tune this setting in the Kourier config? Ideally, if requests per socket connection need to be limited, it would allow spawning more connections when the limit is reached.
edit: to clarify, the upstream Service is not changing here, just how the client connects. The upstream service port is defined as a named port (
h2c
).The text was updated successfully, but these errors were encountered: