tcp: prevent idle stream timeouts for TCP and Websocket routes (#1744)

This commit is contained in:
Caleb Doxsey 2021-01-06 14:14:44 -07:00 committed by GitHub
parent 00734243b3
commit 8d085547c5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 0 deletions

View file

@ -192,6 +192,7 @@ func buildPolicyRoutes(options *config.Options, domain string) []*envoy_config_r
requestHeadersToAdd := toEnvoyHeaders(policy.SetRequestHeaders)
requestHeadersToRemove := getRequestHeadersToRemove(options, &policy)
routeTimeout := getRouteTimeout(options, &policy)
idleTimeout := getRouteIdleTimeout(&policy)
prefixRewrite, regexRewrite := getRewriteOptions(&policy)
upgradeConfigs := []*envoy_config_route_v3.RouteAction_UpgradeConfig{
@ -221,6 +222,7 @@ func buildPolicyRoutes(options *config.Options, domain string) []*envoy_config_r
AutoHostRewrite: &wrappers.BoolValue{Value: !policy.PreserveHostHeader},
},
Timeout: routeTimeout,
IdleTimeout: idleTimeout,
PrefixRewrite: prefixRewrite,
RegexRewrite: regexRewrite,
}
@ -334,6 +336,14 @@ func getRouteTimeout(options *config.Options, policy *config.Policy) *durationpb
return routeTimeout
}
func getRouteIdleTimeout(policy *config.Policy) *durationpb.Duration {
var idleTimeout *durationpb.Duration
if policy.AllowWebsockets || urlutil.IsTCP(policy.Source.URL) {
idleTimeout = ptypes.DurationProto(0)
}
return idleTimeout
}
func getRewriteOptions(policy *config.Policy) (prefixRewrite string, regexRewrite *envoy_type_matcher_v3.RegexMatchAndSubstitute) {
if policy.PrefixRewrite != "" {
prefixRewrite = policy.PrefixRewrite

View file

@ -300,6 +300,7 @@ func Test_buildPolicyRoutes(t *testing.T) {
"route": {
"autoHostRewrite": false,
"cluster": "policy-2",
"idleTimeout": "0s",
"timeout": "0s",
"upgradeConfigs": [
{ "enabled": true, "upgradeType": "websocket"},
@ -431,6 +432,7 @@ func Test_buildPolicyRoutes(t *testing.T) {
"route": {
"autoHostRewrite": false,
"cluster": "policy-7",
"idleTimeout": "0s",
"timeout": "0s",
"upgradeConfigs": [
{ "enabled": true, "upgradeType": "websocket"},
@ -455,6 +457,7 @@ func Test_buildPolicyRoutes(t *testing.T) {
"route": {
"autoHostRewrite": false,
"cluster": "policy-8",
"idleTimeout": "0s",
"timeout": "10s",
"upgradeConfigs": [
{ "enabled": true, "upgradeType": "websocket"},
@ -501,6 +504,7 @@ func Test_buildPolicyRoutes(t *testing.T) {
"route": {
"autoHostRewrite": true,
"cluster": "policy-9",
"idleTimeout": "0s",
"timeout": "0s",
"upgradeConfigs": [
{ "enabled": false, "upgradeType": "websocket"},
@ -526,6 +530,7 @@ func Test_buildPolicyRoutes(t *testing.T) {
"route": {
"autoHostRewrite": true,
"cluster": "policy-10",
"idleTimeout": "0s",
"timeout": "10s",
"upgradeConfigs": [
{ "enabled": false, "upgradeType": "websocket"},