diff --git a/api/v1alpha1/envoyproxy_metric_types.go b/api/v1alpha1/envoyproxy_metric_types.go index e01ebee4dac..bfefc09196c 100644 --- a/api/v1alpha1/envoyproxy_metric_types.go +++ b/api/v1alpha1/envoyproxy_metric_types.go @@ -79,10 +79,7 @@ type ProxyOpenTelemetrySink struct { type ProxyPrometheusProvider struct { // Disable the Prometheus endpoint. Disable bool `json:"disable,omitempty"` - // Enable the compression on Prometheus endpoint. - EnableCompression bool `json:"enableCompression,omitempty"` - // Compression type - // +kubebuilder:validation:Enum=gzip;brotli;zstd - // +kubebuilder:default=gzip - CompressionLibrary string `json:"compressionLibrary,omitempty"` + // Configure the compression on Prometheus endpoint. + // +optional + Compression *Compression `json:"compression,omitempty"` } diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 1b0a97fa77a..3f19e8b9918 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -3068,7 +3068,7 @@ func (in *ProxyMetrics) DeepCopyInto(out *ProxyMetrics) { if in.Prometheus != nil { in, out := &in.Prometheus, &out.Prometheus *out = new(ProxyPrometheusProvider) - **out = **in + (*in).DeepCopyInto(*out) } if in.Sinks != nil { in, out := &in.Sinks, &out.Sinks @@ -3126,6 +3126,11 @@ func (in *ProxyOpenTelemetrySink) DeepCopy() *ProxyOpenTelemetrySink { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProxyPrometheusProvider) DeepCopyInto(out *ProxyPrometheusProvider) { *out = *in + if in.Compression != nil { + in, out := &in.Compression, &out.Compression + *out = new(Compression) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProxyPrometheusProvider. diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml index 7b78ae6ee67..7ac124d0a18 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml @@ -6227,20 +6227,24 @@ spec: description: Prometheus defines the configuration for Admin endpoint `/stats/prometheus`. properties: - compressionLibrary: - default: gzip - description: Compression type - enum: - - gzip - - brotli - - zstd - type: string + compression: + description: Configure the compression on Prometheus endpoint. + properties: + gzip: + description: The configuration for GZIP compressor. + type: object + type: + description: CompressorType defines the compressor + type to use for compression. + enum: + - Gzip + type: string + required: + - type + type: object disable: description: Disable the Prometheus endpoint. type: boolean - enableCompression: - description: Enable the compression on Prometheus endpoint. - type: boolean type: object sinks: description: Sinks defines the metric sinks where metrics diff --git a/internal/xds/bootstrap/bootstrap.go b/internal/xds/bootstrap/bootstrap.go index 8b3b1f0a439..68146e2ddaf 100644 --- a/internal/xds/bootstrap/bootstrap.go +++ b/internal/xds/bootstrap/bootstrap.go @@ -153,10 +153,10 @@ func GetRenderedBootstrapConfig(opts *RenderBootsrapConfigOptions) (string, erro if proxyMetrics.Prometheus != nil { enablePrometheus = !proxyMetrics.Prometheus.Disable - enablePrometheusCompression = proxyMetrics.Prometheus.EnableCompression - if proxyMetrics.Prometheus.EnableCompression { - PrometheusCompressionLibrary = proxyMetrics.Prometheus.CompressionLibrary + if proxyMetrics.Prometheus.Compression != nil { + enablePrometheusCompression = true + PrometheusCompressionLibrary = string(proxyMetrics.Prometheus.Compression.Type) } } diff --git a/internal/xds/bootstrap/bootstrap_test.go b/internal/xds/bootstrap/bootstrap_test.go index 821284d4cbf..a913fbb082c 100644 --- a/internal/xds/bootstrap/bootstrap_test.go +++ b/internal/xds/bootstrap/bootstrap_test.go @@ -47,30 +47,9 @@ func TestGetRenderedBootstrapConfig(t *testing.T) { opts: &RenderBootsrapConfigOptions{ ProxyMetrics: &egv1a1.ProxyMetrics{ Prometheus: &egv1a1.ProxyPrometheusProvider{ - EnableCompression: true, - CompressionLibrary: "gzip", - }, - }, - }, - }, - { - name: "enable-prometheus-brotli-compression", - opts: &RenderBootsrapConfigOptions{ - ProxyMetrics: &egv1a1.ProxyMetrics{ - Prometheus: &egv1a1.ProxyPrometheusProvider{ - EnableCompression: true, - CompressionLibrary: "brotli", - }, - }, - }, - }, - { - name: "enable-prometheus-zstd-compression", - opts: &RenderBootsrapConfigOptions{ - ProxyMetrics: &egv1a1.ProxyMetrics{ - Prometheus: &egv1a1.ProxyPrometheusProvider{ - EnableCompression: true, - CompressionLibrary: "zstd", + Compression: &egv1a1.Compression{ + Type: "gzip", + }, }, }, }, diff --git a/internal/xds/bootstrap/testdata/render/enable-prometheus-brotli-compression.yaml b/internal/xds/bootstrap/testdata/render/enable-prometheus-brotli-compression.yaml deleted file mode 100644 index b37944e2c8a..00000000000 --- a/internal/xds/bootstrap/testdata/render/enable-prometheus-brotli-compression.yaml +++ /dev/null @@ -1,137 +0,0 @@ -admin: - access_log: - - name: envoy.access_loggers.file - typed_config: - "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog - path: /dev/null - address: - socket_address: - address: 127.0.0.1 - port_value: 19000 -layered_runtime: - layers: - - name: global_config - static_layer: - envoy.restart_features.use_eds_cache_for_ads: true - re2.max_program_size.error_level: 4294967295 - re2.max_program_size.warn_level: 1000 -dynamic_resources: - ads_config: - api_type: DELTA_GRPC - transport_api_version: V3 - grpc_services: - - envoy_grpc: - cluster_name: xds_cluster - set_node_on_first_message_only: true - lds_config: - ads: {} - resource_api_version: V3 - cds_config: - ads: {} - resource_api_version: V3 -static_resources: - listeners: - - name: envoy-gateway-proxy-ready-0.0.0.0-19001 - address: - socket_address: - address: 0.0.0.0 - port_value: 19001 - protocol: TCP - filter_chains: - - filters: - - name: envoy.filters.network.http_connection_manager - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager - stat_prefix: eg-ready-http - route_config: - name: local_route - virtual_hosts: - - name: prometheus_stats - domains: - - "*" - routes: - - match: - prefix: /stats/prometheus - route: - cluster: prometheus_stats - typed_per_filter_config: - envoy.filters.http.compression: - "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.CompressorPerRoute - compressor_library: - name: text_optimized - typed_config: - "@type": type.googleapis.com/envoy.extensions.compression.brotli.compressor.v3.Brotli - http_filters: - - name: envoy.filters.http.health_check - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck - pass_through_mode: false - headers: - - name: ":path" - string_match: - exact: /ready - - name: envoy.filters.http.router - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router - clusters: - - name: prometheus_stats - connect_timeout: 0.250s - type: STATIC - lb_policy: ROUND_ROBIN - load_assignment: - cluster_name: prometheus_stats - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: 127.0.0.1 - port_value: 19000 - - connect_timeout: 10s - load_assignment: - cluster_name: xds_cluster - endpoints: - - load_balancing_weight: 1 - lb_endpoints: - - load_balancing_weight: 1 - endpoint: - address: - socket_address: - address: envoy-gateway - port_value: 18000 - typed_extension_protocol_options: - envoy.extensions.upstreams.http.v3.HttpProtocolOptions: - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions" - explicit_http_config: - http2_protocol_options: - connection_keepalive: - interval: 30s - timeout: 5s - name: xds_cluster - type: STRICT_DNS - transport_socket: - name: envoy.transport_sockets.tls - typed_config: - "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext - common_tls_context: - tls_params: - tls_maximum_protocol_version: TLSv1_3 - tls_certificate_sds_secret_configs: - - name: xds_certificate - sds_config: - path_config_source: - path: "/sds/xds-certificate.json" - resource_api_version: V3 - validation_context_sds_secret_config: - name: xds_trusted_ca - sds_config: - path_config_source: - path: "/sds/xds-trusted-ca.json" - resource_api_version: V3 -overload_manager: - refresh_interval: 0.25s - resource_monitors: - - name: "envoy.resource_monitors.global_downstream_max_connections" - typed_config: - "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig - max_active_downstream_connections: 50000 diff --git a/internal/xds/bootstrap/testdata/render/enable-prometheus-zstd-compression.yaml b/internal/xds/bootstrap/testdata/render/enable-prometheus-zstd-compression.yaml deleted file mode 100644 index 922247b8340..00000000000 --- a/internal/xds/bootstrap/testdata/render/enable-prometheus-zstd-compression.yaml +++ /dev/null @@ -1,137 +0,0 @@ -admin: - access_log: - - name: envoy.access_loggers.file - typed_config: - "@type": type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog - path: /dev/null - address: - socket_address: - address: 127.0.0.1 - port_value: 19000 -layered_runtime: - layers: - - name: global_config - static_layer: - envoy.restart_features.use_eds_cache_for_ads: true - re2.max_program_size.error_level: 4294967295 - re2.max_program_size.warn_level: 1000 -dynamic_resources: - ads_config: - api_type: DELTA_GRPC - transport_api_version: V3 - grpc_services: - - envoy_grpc: - cluster_name: xds_cluster - set_node_on_first_message_only: true - lds_config: - ads: {} - resource_api_version: V3 - cds_config: - ads: {} - resource_api_version: V3 -static_resources: - listeners: - - name: envoy-gateway-proxy-ready-0.0.0.0-19001 - address: - socket_address: - address: 0.0.0.0 - port_value: 19001 - protocol: TCP - filter_chains: - - filters: - - name: envoy.filters.network.http_connection_manager - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager - stat_prefix: eg-ready-http - route_config: - name: local_route - virtual_hosts: - - name: prometheus_stats - domains: - - "*" - routes: - - match: - prefix: /stats/prometheus - route: - cluster: prometheus_stats - typed_per_filter_config: - envoy.filters.http.compression: - "@type": type.googleapis.com/envoy.extensions.filters.http.compressor.v3.CompressorPerRoute - compressor_library: - name: text_optimized - typed_config: - "@type": type.googleapis.com/envoy.extensions.compression.zstd.compressor.v3.Zstd - http_filters: - - name: envoy.filters.http.health_check - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.health_check.v3.HealthCheck - pass_through_mode: false - headers: - - name: ":path" - string_match: - exact: /ready - - name: envoy.filters.http.router - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router - clusters: - - name: prometheus_stats - connect_timeout: 0.250s - type: STATIC - lb_policy: ROUND_ROBIN - load_assignment: - cluster_name: prometheus_stats - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: 127.0.0.1 - port_value: 19000 - - connect_timeout: 10s - load_assignment: - cluster_name: xds_cluster - endpoints: - - load_balancing_weight: 1 - lb_endpoints: - - load_balancing_weight: 1 - endpoint: - address: - socket_address: - address: envoy-gateway - port_value: 18000 - typed_extension_protocol_options: - envoy.extensions.upstreams.http.v3.HttpProtocolOptions: - "@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions" - explicit_http_config: - http2_protocol_options: - connection_keepalive: - interval: 30s - timeout: 5s - name: xds_cluster - type: STRICT_DNS - transport_socket: - name: envoy.transport_sockets.tls - typed_config: - "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext - common_tls_context: - tls_params: - tls_maximum_protocol_version: TLSv1_3 - tls_certificate_sds_secret_configs: - - name: xds_certificate - sds_config: - path_config_source: - path: "/sds/xds-certificate.json" - resource_api_version: V3 - validation_context_sds_secret_config: - name: xds_trusted_ca - sds_config: - path_config_source: - path: "/sds/xds-trusted-ca.json" - resource_api_version: V3 -overload_manager: - refresh_interval: 0.25s - resource_monitors: - - name: "envoy.resource_monitors.global_downstream_max_connections" - typed_config: - "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig - max_active_downstream_connections: 50000 diff --git a/site/content/en/latest/api/extension_types.md b/site/content/en/latest/api/extension_types.md index 2f395d635c7..23cd85ba313 100644 --- a/site/content/en/latest/api/extension_types.md +++ b/site/content/en/latest/api/extension_types.md @@ -455,6 +455,7 @@ This can help reduce the bandwidth at the expense of higher CPU. _Appears in:_ - [BackendTrafficPolicySpec](#backendtrafficpolicyspec) +- [ProxyPrometheusProvider](#proxyprometheusprovider) | Field | Type | Required | Description | | --- | --- | --- | --- | @@ -2316,8 +2317,7 @@ _Appears in:_ | Field | Type | Required | Description | | --- | --- | --- | --- | | `disable` | _boolean_ | true | Disable the Prometheus endpoint. | -| `enableCompression` | _boolean_ | true | Enable the compression on Prometheus endpoint. | -| `compressionLibrary` | _string_ | true | Compression type | +| `compression` | _[Compression](#compression)_ | false | Configure the compression on Prometheus endpoint. | #### ProxyProtocol