Skip to content

Commit 7b6bd26

Browse files
committed
configuration: Add support for Envoys MaxStreamDuration configuration
Fixes #6873 Signed-off-by: Nicholas Burgin <nick@burgin.au>
1 parent 39c7cb9 commit 7b6bd26

20 files changed

+309
-3
lines changed

apis/projectcontour/v1/httpproxy.go

+6
Original file line numberDiff line numberDiff line change
@@ -1142,6 +1142,12 @@ type TimeoutPolicy struct {
11421142
// +optional
11431143
// +kubebuilder:validation:Pattern=`^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$`
11441144
IdleConnection string `json:"idleConnection,omitempty"`
1145+
1146+
// Maximum allowed duration a streaming request can run for.
1147+
// If not supplied, the global setting is used.
1148+
// +optional
1149+
// +kubebuilder:validation:Pattern=`^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$`
1150+
MaxStreamDuration string `json:"maxStreamDuration,omitempty"`
11451151
}
11461152

11471153
// RetryOn is a string type alias with validation to ensure that the value is valid.

apis/projectcontour/v1alpha1/contourconfig.go

+9
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,15 @@ type TimeoutParameters struct {
585585
// +optional
586586
MaxConnectionDuration *string `json:"maxConnectionDuration,omitempty"`
587587

588+
// MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
589+
// The stream will be reset if the time limit is reached. Omit or set to "infinity" for
590+
// no max duration.
591+
//
592+
// See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
593+
// for more information.
594+
// +optional
595+
MaxStreamDuration *string `json:"maxStreamDuration,omitempty"`
596+
588597
// DelayedCloseTimeout defines how long envoy will wait, once connection
589598
// close processing has been initiated, for the downstream peer to close
590599
// the connection before Envoy closes the socket associated with the connection.

apis/projectcontour/v1alpha1/zz_generated.deepcopy.go

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add support for Envoys MaxStreamDuration setting Globally and on Routes

cmd/contour/servecontext.go

+3
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,9 @@ func (ctx *serveContext) convertToContourConfigurationSpec() contour_v1alpha1.Co
358358
if len(ctx.Config.Timeouts.MaxConnectionDuration) > 0 {
359359
timeoutParams.MaxConnectionDuration = ptr.To(ctx.Config.Timeouts.MaxConnectionDuration)
360360
}
361+
if len(ctx.Config.Timeouts.MaxStreamDuration) > 0 {
362+
timeoutParams.MaxStreamDuration = ptr.To(ctx.Config.Timeouts.MaxStreamDuration)
363+
}
361364
if len(ctx.Config.Timeouts.DelayedCloseTimeout) > 0 {
362365
timeoutParams.DelayedCloseTimeout = ptr.To(ctx.Config.Timeouts.DelayedCloseTimeout)
363366
}

examples/contour/01-crds.yaml

+28
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,14 @@ spec:
583583
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
584584
for more information.
585585
type: string
586+
maxStreamDuration:
587+
description: |-
588+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
589+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
590+
no max duration.
591+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
592+
for more information.
593+
type: string
586594
requestTimeout:
587595
description: |-
588596
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -4399,6 +4407,14 @@ spec:
43994407
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
44004408
for more information.
44014409
type: string
4410+
maxStreamDuration:
4411+
description: |-
4412+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
4413+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
4414+
no max duration.
4415+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
4416+
for more information.
4417+
type: string
44024418
requestTimeout:
44034419
description: |-
44044420
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -5274,6 +5290,12 @@ spec:
52745290
If not supplied, Envoy's default value of 1h applies.
52755291
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
52765292
type: string
5293+
maxStreamDuration:
5294+
description: |-
5295+
Maximum allowed duration a streaming request can run for.
5296+
If not supplied, the global setting is used.
5297+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
5298+
type: string
52775299
response:
52785300
description: |-
52795301
Timeout for receiving a response from the server after processing a request from client.
@@ -7021,6 +7043,12 @@ spec:
70217043
If not supplied, Envoy's default value of 1h applies.
70227044
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
70237045
type: string
7046+
maxStreamDuration:
7047+
description: |-
7048+
Maximum allowed duration a streaming request can run for.
7049+
If not supplied, the global setting is used.
7050+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
7051+
type: string
70247052
response:
70257053
description: |-
70267054
Timeout for receiving a response from the server after processing a request from client.

examples/render/contour-deployment.yaml

+28
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,14 @@ spec:
798798
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
799799
for more information.
800800
type: string
801+
maxStreamDuration:
802+
description: |-
803+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
804+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
805+
no max duration.
806+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
807+
for more information.
808+
type: string
801809
requestTimeout:
802810
description: |-
803811
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -4614,6 +4622,14 @@ spec:
46144622
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
46154623
for more information.
46164624
type: string
4625+
maxStreamDuration:
4626+
description: |-
4627+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
4628+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
4629+
no max duration.
4630+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
4631+
for more information.
4632+
type: string
46174633
requestTimeout:
46184634
description: |-
46194635
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -5489,6 +5505,12 @@ spec:
54895505
If not supplied, Envoy's default value of 1h applies.
54905506
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
54915507
type: string
5508+
maxStreamDuration:
5509+
description: |-
5510+
Maximum allowed duration a streaming request can run for.
5511+
If not supplied, the global setting is used.
5512+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
5513+
type: string
54925514
response:
54935515
description: |-
54945516
Timeout for receiving a response from the server after processing a request from client.
@@ -7236,6 +7258,12 @@ spec:
72367258
If not supplied, Envoy's default value of 1h applies.
72377259
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
72387260
type: string
7261+
maxStreamDuration:
7262+
description: |-
7263+
Maximum allowed duration a streaming request can run for.
7264+
If not supplied, the global setting is used.
7265+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
7266+
type: string
72397267
response:
72407268
description: |-
72417269
Timeout for receiving a response from the server after processing a request from client.

examples/render/contour-gateway-provisioner.yaml

+28
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,14 @@ spec:
594594
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
595595
for more information.
596596
type: string
597+
maxStreamDuration:
598+
description: |-
599+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
600+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
601+
no max duration.
602+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
603+
for more information.
604+
type: string
597605
requestTimeout:
598606
description: |-
599607
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -4410,6 +4418,14 @@ spec:
44104418
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
44114419
for more information.
44124420
type: string
4421+
maxStreamDuration:
4422+
description: |-
4423+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
4424+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
4425+
no max duration.
4426+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
4427+
for more information.
4428+
type: string
44134429
requestTimeout:
44144430
description: |-
44154431
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -5285,6 +5301,12 @@ spec:
52855301
If not supplied, Envoy's default value of 1h applies.
52865302
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
52875303
type: string
5304+
maxStreamDuration:
5305+
description: |-
5306+
Maximum allowed duration a streaming request can run for.
5307+
If not supplied, the global setting is used.
5308+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
5309+
type: string
52885310
response:
52895311
description: |-
52905312
Timeout for receiving a response from the server after processing a request from client.
@@ -7032,6 +7054,12 @@ spec:
70327054
If not supplied, Envoy's default value of 1h applies.
70337055
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
70347056
type: string
7057+
maxStreamDuration:
7058+
description: |-
7059+
Maximum allowed duration a streaming request can run for.
7060+
If not supplied, the global setting is used.
7061+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
7062+
type: string
70357063
response:
70367064
description: |-
70377065
Timeout for receiving a response from the server after processing a request from client.

examples/render/contour-gateway.yaml

+28
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,14 @@ spec:
619619
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
620620
for more information.
621621
type: string
622+
maxStreamDuration:
623+
description: |-
624+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
625+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
626+
no max duration.
627+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
628+
for more information.
629+
type: string
622630
requestTimeout:
623631
description: |-
624632
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -4435,6 +4443,14 @@ spec:
44354443
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-connection-duration
44364444
for more information.
44374445
type: string
4446+
maxStreamDuration:
4447+
description: |-
4448+
MaxStreamDuration defines the maximum duration a HTTP stream is kept alive.
4449+
The stream will be reset if the time limit is reached. Omit or set to "infinity" for
4450+
no max duration.
4451+
See https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#envoy-v3-api-field-config-core-v3-httpprotocoloptions-max-stream-duration
4452+
for more information.
4453+
type: string
44384454
requestTimeout:
44394455
description: |-
44404456
RequestTimeout sets the client request timeout globally for Contour. Note that
@@ -5310,6 +5326,12 @@ spec:
53105326
If not supplied, Envoy's default value of 1h applies.
53115327
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
53125328
type: string
5329+
maxStreamDuration:
5330+
description: |-
5331+
Maximum allowed duration a streaming request can run for.
5332+
If not supplied, the global setting is used.
5333+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
5334+
type: string
53135335
response:
53145336
description: |-
53155337
Timeout for receiving a response from the server after processing a request from client.
@@ -7057,6 +7079,12 @@ spec:
70577079
If not supplied, Envoy's default value of 1h applies.
70587080
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
70597081
type: string
7082+
maxStreamDuration:
7083+
description: |-
7084+
Maximum allowed duration a streaming request can run for.
7085+
If not supplied, the global setting is used.
7086+
pattern: ^(((\d*(\.\d*)?h)|(\d*(\.\d*)?m)|(\d*(\.\d*)?s)|(\d*(\.\d*)?ms)|(\d*(\.\d*)?us)|(\d*(\.\d*)?µs)|(\d*(\.\d*)?ns))+|infinity|infinite)$
7087+
type: string
70607088
response:
70617089
description: |-
70627090
Timeout for receiving a response from the server after processing a request from client.

0 commit comments

Comments
 (0)