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

disableCompression: Expose configuration to toggle Envoy GZIP compression on the responses #6546

Open
wants to merge 26 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
b4d5b67
build(deps): bump docker/setup-buildx-action from 3.3.0 to 3.4.0 (#6543)
dependabot[bot] Jul 8, 2024
081a47c
Adds "disableCompression" as a feature to turnon/off Envoy's GZIP res…
Jul 9, 2024
818ccf0
Merge remote-tracking branch 'upstream/main'
Aug 7, 2024
7ddb6f0
This fixes linter nag parameter 'conf' seems to be unused
Aug 22, 2024
8df07e2
This fixes linter nag File is not gci-ed with ...
Aug 22, 2024
100bf40
This fixes linter nag File is not gci-ed with ...
Aug 22, 2024
56e4ee7
This fixes linter nag File is not gofumpt-ed with -extra
Aug 22, 2024
548981e
This fixes linter nag File is not gofumpt-ed with -extra
Aug 22, 2024
934ca48
Fix table borders
Aug 21, 2024
2efb693
Add disableCompression flag to configuration docs.
Aug 21, 2024
b0cfe71
add changelog file
Aug 22, 2024
72e0e9c
Merge remote-tracking branch 'upstream/main'
geomacy Sep 7, 2024
73c4b67
Merge remote-tracking branch 'upstream/main'
Sep 30, 2024
235acc3
Merge remote-tracking branch 'upstream/main'
Oct 8, 2024
7e843b7
rework as --compression flag with options gzip, brotli, zstd, disabled
geomacy Sep 7, 2024
36dbadb
Merge pull request #1 from chaosbox/compression-flag
geomacy Oct 8, 2024
f7b261b
add validation to crd compression field
Oct 19, 2024
b68f0b1
delete unnecessary output log
Oct 19, 2024
5dcdc33
define compression with a struct for API extensibility
Oct 21, 2024
3d83394
lint fixes
Oct 23, 2024
cda9c76
test fix
Oct 24, 2024
ff84c37
fix flag handling
Oct 28, 2024
5725a53
api lint
Oct 28, 2024
630541e
parameters_test
Oct 28, 2024
4610b80
update comment
Oct 28, 2024
45ea946
fix assertion arg order and bump timeout
Oct 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions apis/projectcontour/v1alpha1/compression.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Copyright Project Contour Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1alpha1

import "fmt"

type EnvoyCompressionType string

func (c EnvoyCompressionType) Validate() error {
switch c {
case BrotliCompression, DisabledCompression, GzipCompression, ZstdCompression:
return nil
default:
return fmt.Errorf("invalid compression type: %q", c)
}
}

const (
// BrotliCompression specifies brotli as the default HTTP filter chain compression mechanism
BrotliCompression EnvoyCompressionType = "brotli"

// DisabledCompression specifies that there will be no compression in the default HTTP filter chain
DisabledCompression EnvoyCompressionType = "disabled"

// GzipCompression specifies gzip as the default HTTP filter chain compression mechanism
GzipCompression EnvoyCompressionType = "gzip"

// ZstdCompression specifies zstd as the default HTTP filter chain compression mechanism
ZstdCompression EnvoyCompressionType = "zstd"
)
32 changes: 32 additions & 0 deletions apis/projectcontour/v1alpha1/compression_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// Copyright Project Contour Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package v1alpha1_test

import (
"testing"

"github.com/stretchr/testify/require"

contour_v1alpha1 "github.com/projectcontour/contour/apis/projectcontour/v1alpha1"
)

func TestValidateEnvoyCompressionType(t *testing.T) {
require.Error(t, contour_v1alpha1.EnvoyCompressionType("").Validate())
require.Error(t, contour_v1alpha1.EnvoyCompressionType("foo").Validate())

require.NoError(t, contour_v1alpha1.BrotliCompression.Validate())
require.NoError(t, contour_v1alpha1.DisabledCompression.Validate())
require.NoError(t, contour_v1alpha1.GzipCompression.Validate())
require.NoError(t, contour_v1alpha1.ZstdCompression.Validate())
}
6 changes: 6 additions & 0 deletions apis/projectcontour/v1alpha1/contourconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,12 @@ type EnvoyListenerConfig struct {
// +optional
UseProxyProto *bool `json:"useProxyProtocol,omitempty"`

// Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
// Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
// Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
// +optional
Compression EnvoyCompressionType `json:"compression,omitempty"`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we use // +kubebuilder:validation:Enum=gzip,brotli,zstd,disabled as well?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 sounds good, I will add that

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hi @davinci26 added this in f7b261b

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Example:

$ kubectl apply -f - <<-EOF
> apiVersion: projectcontour.io/v1alpha1
kind: ContourConfiguration
metadata:
  name: example-contour-config-1
spec:
  envoy:
    listener:
      compression: bogus
EOF
The ContourConfiguration "example-contour-config-1" is invalid: spec.envoy.listener.compression: Unsupported value: "bogus": supported values: "gzip", "brotli", "zstd", "disabled"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The API here is fairly constrained so we might want to think through how would we extend it if anyone comes up with the feature request to tune the API on different compression levels

I think adding another field called Compression Strategy might be fine or create a struct that right now has a single object

Compression *EnvoyCompression `json:"compression,omitempty"`
Member

type  EnvoyCompression struct {
Aglorithm Algorithm `json:"algorithm,omitempty"
}

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did think (briefly) about making the configurability greater, and/or having a wider range of compression algorithms. In the end I decided against it, at least for this PR -

  • while one could add more compression algorithms I thought that exposing the ones from envoy/extensions was a nice and easily explained choice. There are a couple of others in contrib/envoy/extensions but gzip/br/zstd seems like the ones that are most likely to be widely wanted. And I certainly didn't want to start thinking about making the algorithm choice be more "pluggable"!
  • as for configurability of algorithms I thought it wasn't something I felt I wanted to start making decisions on - I expect contour project members would perhaps not want to expose all the configuration options for every algorithm, but then this leaves you with the question of how to sensibly define some configuration that supports enough configurability for the different algorithms. It felt like a bit of a rabbit hole and I thought it would be something kept separate from this PR - better to try to keep changes as small as possible, and this one is meaty enough already.

Believe it or not I actually took a bit of inspiration from the Contour Philosophy 😆 (I did read around on how to contribute), particularly the bit on Sensible Defaults. I felt these kind of gave permission to simply offer a choice of a few widely used algorithms, using default settings. While a strategy field could be added here, it would be something of a no-op feature unless we took the time to implement at least basic configurability in it. I feel this would be best left to another PR. Would that be OK?

Copy link

@geomacy geomacy Oct 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also now that I think of it, the feature here of most interest to us in our project is the compression disabling, so from an admittedly selfish point of view I would like to leave the configurability to a separate bit of work. Like everyone else we're very busy, and I have ended up having to do most of this work in my own time in the evenings and weekends :-(

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be transparent I dont want to design how we extend it but I am trying to think through if we leave enough space to extend the api.

In the end I decided against it, at least for this PR

My only issue is that if we go with the approach here and in 3 months we wanted to add another compression knob then we have two options:

  • Make a breaking change which might be fine due to the fact that this is a v1alpha1 package.
  • Add the option topline object in type EnvoyListenerConfig struct

If we think that these are fine options I think the api is good. I am just proponent of adding another struct that has a single member so we can extend just that struct

Like everyone else we're very busy, and I have ended up having to do most of this work in my own time in the evenings and weekends :-(

Yeah, a lot of the people contributing to this project to this into this capacity so I feel you.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will defer to @projectcontour/maintainers

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah now that you have laid it out like that I see what you mean. Let me take a look at it, hopefully this wouldn't be too large a change.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hi @davinci26 I have taken a stab at this in 5dcdc33, could you have a look and see what you think?

Copy link

@geomacy geomacy Oct 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I still need to test this, I see some failures in e2e and will want also to run it on a local cluster, will try to get that done this week and add results in a comment.


// DisableAllowChunkedLength disables the RFC-compliant Envoy behavior to
// strip the "Content-Length" header if "Transfer-Encoding: chunked" is
// also set. This is an emergency off-switch to revert back to Envoy's
Expand Down
1 change: 1 addition & 0 deletions changelogs/unreleased/6546-chaosbox-small.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add "compression" flag to set/disable the compression type applied in the default HTTP filter chain.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this might need update as well based on the new api

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

included in 5dcdc33

4 changes: 4 additions & 0 deletions cmd/contour/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@
}
serve.Flag("accesslog-format", "Format for Envoy access logs.").PlaceHolder("<envoy|json>").StringVar((*string)(&ctx.Config.AccessLogFormat))

serve.Flag("compression", "Set or disable compression type in default Listener filters.").PlaceHolder("<gzip|brotli|zstd|disabled>").StringVar((*string)(&ctx.Config.Compression))
serve.Flag("config-path", "Path to base configuration.").Short('c').PlaceHolder("/path/to/file").Action(parseConfig).ExistingFileVar(&configFile)
serve.Flag("contour-cafile", "CA bundle file name for serving gRPC with TLS.").Envar("CONTOUR_CAFILE").StringVar(&ctx.caFile)
serve.Flag("contour-cert-file", "Contour certificate file name for serving gRPC over TLS.").PlaceHolder("/path/to/file").Envar("CONTOUR_CERT_FILE").StringVar(&ctx.contourCert)
Expand Down Expand Up @@ -447,6 +448,7 @@
}

listenerConfig := xdscache_v3.ListenerConfig{
Compression: contourConfiguration.Envoy.Listener.Compression,

Check warning on line 451 in cmd/contour/serve.go

View check run for this annotation

Codecov / codecov/patch

cmd/contour/serve.go#L451

Added line #L451 was not covered by tests
UseProxyProto: *contourConfiguration.Envoy.Listener.UseProxyProto,
HTTPAccessLog: contourConfiguration.Envoy.HTTPListener.AccessLog,
HTTPSAccessLog: contourConfiguration.Envoy.HTTPSListener.AccessLog,
Expand All @@ -471,6 +473,8 @@
SocketOptions: contourConfiguration.Envoy.Listener.SocketOptions,
}

s.log.WithField("context", "listenerConfig").Infof("compression setting: %s", listenerConfig.Compression)

Check warning on line 476 in cmd/contour/serve.go

View check run for this annotation

Codecov / codecov/patch

cmd/contour/serve.go#L476

Added line #L476 was not covered by tests
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this from debugging?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually left this in here deliberately - I think it's quite nice to be able to see the choice of algorithm reflected in the initial log output. But if that's not a typical contour thing to do I'll take it out. Let me know what would be preferred.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

took this out in b68f0b1


if listenerConfig.TracingConfig, err = s.setupTracingService(contourConfiguration.Tracing); err != nil {
return err
}
Expand Down
13 changes: 13 additions & 0 deletions cmd/contour/servecontext.go
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,18 @@
accessLogLevel = contour_v1alpha1.LogLevelDisabled
}

var compression contour_v1alpha1.EnvoyCompressionType
switch ctx.Config.Compression {
case config.CompressionBrotli:
compression = contour_v1alpha1.BrotliCompression
case config.CompressionDisabled:
compression = contour_v1alpha1.DisabledCompression

Check warning on line 341 in cmd/contour/servecontext.go

View check run for this annotation

Codecov / codecov/patch

cmd/contour/servecontext.go#L338-L341

Added lines #L338 - L341 were not covered by tests
case config.CompressionGzip:
compression = contour_v1alpha1.GzipCompression
case config.CompressionZstd:
compression = contour_v1alpha1.ZstdCompression

Check warning on line 345 in cmd/contour/servecontext.go

View check run for this annotation

Codecov / codecov/patch

cmd/contour/servecontext.go#L344-L345

Added lines #L344 - L345 were not covered by tests
}

var defaultHTTPVersions []contour_v1alpha1.HTTPVersionType
for _, version := range ctx.Config.DefaultHTTPVersions {
switch version {
Expand Down Expand Up @@ -519,6 +531,7 @@
Envoy: &contour_v1alpha1.EnvoyConfig{
Listener: &contour_v1alpha1.EnvoyListenerConfig{
UseProxyProto: &ctx.useProxyProto,
Compression: compression,
DisableAllowChunkedLength: &ctx.Config.DisableAllowChunkedLength,
DisableMergeSlashes: &ctx.Config.DisableMergeSlashes,
ServerHeaderTransformation: serverHeaderTransformation,
Expand Down
3 changes: 3 additions & 0 deletions cmd/contour/servecontext_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,7 @@ func TestConvertServeContext(t *testing.T) {
},
Listener: &contour_v1alpha1.EnvoyListenerConfig{
UseProxyProto: ptr.To(false),
Compression: "gzip",
DisableAllowChunkedLength: ptr.To(false),
DisableMergeSlashes: ptr.To(false),
ServerHeaderTransformation: contour_v1alpha1.OverwriteServerHeader,
Expand Down Expand Up @@ -892,12 +893,14 @@ func TestConvertServeContext(t *testing.T) {
ctx.Config.Listener.MaxRequestsPerIOCycle = ptr.To(uint32(10))
ctx.Config.Listener.HTTP2MaxConcurrentStreams = ptr.To(uint32(30))
ctx.Config.Listener.MaxConnectionsPerListener = ptr.To(uint32(50))
ctx.Config.Compression = "gzip"
return ctx
},
getContourConfiguration: func(cfg contour_v1alpha1.ContourConfigurationSpec) contour_v1alpha1.ContourConfigurationSpec {
cfg.Envoy.Listener.MaxRequestsPerIOCycle = ptr.To(uint32(10))
cfg.Envoy.Listener.HTTP2MaxConcurrentStreams = ptr.To(uint32(30))
cfg.Envoy.Listener.MaxConnectionsPerListener = ptr.To(uint32(50))
cfg.Envoy.Listener.Compression = "gzip"
return cfg
},
},
Expand Down
12 changes: 12 additions & 0 deletions examples/contour/01-crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down Expand Up @@ -4063,6 +4069,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down
12 changes: 12 additions & 0 deletions examples/render/contour-deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down Expand Up @@ -4283,6 +4289,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down
12 changes: 12 additions & 0 deletions examples/render/contour-gateway-provisioner.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down Expand Up @@ -4074,6 +4080,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down
12 changes: 12 additions & 0 deletions examples/render/contour-gateway.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down Expand Up @@ -4099,6 +4105,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down
12 changes: 12 additions & 0 deletions examples/render/contour.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down Expand Up @@ -4283,6 +4289,12 @@ spec:
description: Listener hold various configurable Envoy listener
values.
properties:
compression:
description: |-
Compression selects the compression type applied in the compression HTTP filter of the default Listener filters.
Values: `gzip` (default), `brotli`, `zstd`, `disabled`.
Setting this to `disabled` will make Envoy skip "Accept-Encoding: gzip,deflate" request header and always return uncompressed response
type: string
connectionBalancer:
description: |-
ConnectionBalancer. If the value is exact, the listener will use the exact connection balancer
Expand Down
1 change: 1 addition & 0 deletions internal/contourconfig/contourconfiguration.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ func Defaults() contour_v1alpha1.ContourConfigurationSpec {
Envoy: &contour_v1alpha1.EnvoyConfig{
Listener: &contour_v1alpha1.EnvoyListenerConfig{
UseProxyProto: ptr.To(false),
Compression: contour_v1alpha1.GzipCompression,
DisableAllowChunkedLength: ptr.To(false),
DisableMergeSlashes: ptr.To(false),
ServerHeaderTransformation: contour_v1alpha1.OverwriteServerHeader,
Expand Down
5 changes: 3 additions & 2 deletions internal/contourconfig/contourconfiguration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,11 @@ func TestOverlayOnDefaults(t *testing.T) {
Envoy: &contour_v1alpha1.EnvoyConfig{
Listener: &contour_v1alpha1.EnvoyListenerConfig{
UseProxyProto: ptr.To(true),
DisableAllowChunkedLength: ptr.To(true),
DisableMergeSlashes: ptr.To(true),
Compression: "brotli",
MaxRequestsPerConnection: ptr.To(uint32(1)),
HTTP2MaxConcurrentStreams: ptr.To(uint32(10)),
DisableAllowChunkedLength: ptr.To(true),
DisableMergeSlashes: ptr.To(true),
ServerHeaderTransformation: contour_v1alpha1.PassThroughServerHeader,
ConnectionBalancer: "yesplease",
TLS: &contour_v1alpha1.EnvoyTLS{
Expand Down
Loading