Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b7d64fe
[release/v1.5] pin envoy and ratelimit image version (#6640)
zirain Jul 30, 2025
bc91e1e
[release/v1.5] chore: fix release notes name (#6644)
zirain Jul 30, 2025
2f3cebd
fix: allow imageRepository contains port (#6658)
woodgear Jul 31, 2025
b739468
[release/v1.5] cherrypick for rc.2 (#6696)
zirain Aug 5, 2025
b573ba4
[release-1.5] cherry pick for v1.5.0 (#6738)
zirain Aug 8, 2025
3e2f302
[release/v1.5] bump envoy and ratelimit image (#6958)
zirain Sep 15, 2025
44e3dcd
fix: cluster stat name: lowercase Kind (#6780)
guydc Aug 12, 2025
2e82d12
fix: envoy service cluster name for zone-aware routing (#6763)
y-rabie Aug 13, 2025
b1b8db6
conformance: update experimental test report (#6782)
zirain Aug 13, 2025
ed1f390
fix(api): image validation regex, support port in repository (#6819)
Windfarer Aug 20, 2025
ba0fdfd
fix: Actually update xdsIR with maxAcceptPerSocketEvent (#6834)
jukie Aug 25, 2025
cd2c2d6
bugfix: fix the topologyInjectorDisabled and the local cluster was no…
qicz Aug 27, 2025
c1758ca
fix(logging): correct log formatting to avoid DPANIC in controller-ru…
TomerJLevy Aug 28, 2025
38818d6
fix: handle context errors as transient errors (#6850)
TomerJLevy Aug 28, 2025
989b3dc
bugfix: the controller cannot read the EnvoyProxy attached gatewaycla…
qicz Aug 29, 2025
b9f22a6
chore: fix CVE (#6903)
shahar-h Sep 8, 2025
f8fb898
fix: nil pointer dereference in btp configmap indexer (#6921)
rudrakhp Sep 10, 2025
9defcbd
improve targetRef selection for targetSelectors (#6917)
arkodg Sep 10, 2025
7ac7f4c
fix: suppress lua validation logs (#6929)
rudrakhp Sep 11, 2025
3a438c8
fix: rm incorrectly set exclusiveMaximum field in CRD (#6926)
arkodg Sep 11, 2025
d00435e
fix: rm Strict SameSite default (#6941)
arkodg Sep 11, 2025
031edcb
Optimize pod cache (#6936)
jukie Sep 11, 2025
038b153
reduce DeepCopy in gateway-api layer (#6940)
arkodg Sep 12, 2025
457fe47
fix: validation for grpc routes with extension ref filters (#6949)
rudrakhp Sep 12, 2025
6c38467
fix: cleanup dangling route status conditions (#6812)
y-rabie Sep 13, 2025
e159100
Fix: Add missing patch annotations to Compression struct for proper M…
sudiptob2 Sep 13, 2025
9c046cf
fix: update distroless image to resolve glibc CVEs (#6953)
shahar-h Sep 14, 2025
2536d92
chore: bump golang to 1.24.7 (#6959)
zirain Sep 15, 2025
a8a56dd
fix: Make sure proxy protocol filter is the first listener filter (#6…
arkodg Sep 16, 2025
1185ebb
release notes
zirain Sep 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v1.5.0-rc.1
v1.5.0
5 changes: 4 additions & 1 deletion api/v1alpha1/backendtrafficpolicy_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,11 @@ type BackendTrafficPolicySpec struct {

// The compression config for the http streams.
//
// +patchMergeKey=type
// +patchStrategy=merge
//
// +optional
Compression []*Compression `json:"compression,omitempty"`
Compression []*Compression `json:"compression,omitempty" patchMergeKey:"type" patchStrategy:"merge"`

// ResponseOverride defines the configuration to override specific responses with a custom one.
// If multiple configurations are specified, the first one to match wins.
Expand Down
3 changes: 1 addition & 2 deletions api/v1alpha1/clienttrafficpolicy_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
gwapiv1a2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
)

Expand Down Expand Up @@ -159,7 +158,7 @@ type HeaderSettings struct {
// routing, tracing and built-in header manipulation.
//
// +optional
EarlyRequestHeaders *gwapiv1.HTTPHeaderFilter `json:"earlyRequestHeaders,omitempty"`
EarlyRequestHeaders *HTTPHeaderFilter `json:"earlyRequestHeaders,omitempty"`
}

// WithUnderscoresAction configures the action to take when an HTTP header with underscores
Expand Down
4 changes: 2 additions & 2 deletions api/v1alpha1/cors_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package v1alpha1

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
import gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"

// Origin is defined by the scheme (protocol), hostname (domain), and port of
// the URL used to access it. The hostname can be "precise" which is just the
Expand Down Expand Up @@ -61,7 +61,7 @@ type CORS struct {
// It specifies the value in the Access-Control-Max-Age CORS response header..
//
// +optional
MaxAge *metav1.Duration `json:"maxAge,omitempty"`
MaxAge *gwapiv1.Duration `json:"maxAge,omitempty"`

// AllowCredentials indicates whether a request can include user credentials
// like cookies, authentication headers, or TLS client certificates.
Expand Down
8 changes: 6 additions & 2 deletions api/v1alpha1/dns_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package v1alpha1

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
import gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"

// DNSLookupFamily defines the behavior of Envoy when resolving DNS for hostnames
// +enum
Expand All @@ -31,10 +31,14 @@ const (
type DNS struct {
// DNSRefreshRate specifies the rate at which DNS records should be refreshed.
// Defaults to 30 seconds.
DNSRefreshRate *metav1.Duration `json:"dnsRefreshRate,omitempty"`
//
// +optional
DNSRefreshRate *gwapiv1.Duration `json:"dnsRefreshRate,omitempty"`
// RespectDNSTTL indicates whether the DNS Time-To-Live (TTL) should be respected.
// If the value is set to true, the DNS refresh rate will be set to the resource record’s TTL.
// Defaults to true.
//
// +optional
RespectDNSTTL *bool `json:"respectDnsTtl,omitempty"`
// LookupFamily determines how Envoy would resolve DNS for Routes where the backend is specified as a fully qualified domain name (FQDN).
// If set, this configuration overrides other defaults.
Expand Down
10 changes: 10 additions & 0 deletions api/v1alpha1/envoygateway_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,16 @@ func (e *EnvoyGateway) GatewayNamespaceMode() bool {
*e.Provider.Kubernetes.Deploy.Type == KubernetesDeployModeTypeGatewayNamespace
}

// TopologyInjectorDisabled checks whether the provided EnvoyGateway disables TopologyInjector
func (e *EnvoyGateway) TopologyInjectorDisabled() bool {
if e.Provider != nil &&
e.Provider.Kubernetes != nil &&
e.Provider.Kubernetes.TopologyInjector != nil {
return ptr.Deref(e.Provider.Kubernetes.TopologyInjector.Disable, false)
}
return false
}

// defaultRuntimeFlags are the default runtime flags for Envoy Gateway.
var defaultRuntimeFlags = map[RuntimeFlag]bool{
XDSNameSchemeV2: false,
Expand Down
21 changes: 16 additions & 5 deletions api/v1alpha1/envoygateway_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,13 +143,21 @@ type KubernetesClientRateLimit struct {
// LeaderElection defines the desired leader election settings.
type LeaderElection struct {
// LeaseDuration defines the time non-leader contenders will wait before attempting to claim leadership.
// It's based on the timestamp of the last acknowledged signal. The default setting is 15 seconds.
// It's based on the timestamp of the last acknowledged signal.
// The default setting is 15 seconds.
//
// +optional
LeaseDuration *gwapiv1.Duration `json:"leaseDuration,omitempty"`
// RenewDeadline represents the time frame within which the current leader will attempt to renew its leadership
// status before relinquishing its position. The default setting is 10 seconds.
// status before relinquishing its position.
// The default setting is 10 seconds.
//
// +optional
RenewDeadline *gwapiv1.Duration `json:"renewDeadline,omitempty"`
// RetryPeriod denotes the interval at which LeaderElector clients should perform action retries.
// The default setting is 2 seconds.
//
// +optional
RetryPeriod *gwapiv1.Duration `json:"retryPeriod,omitempty"`
// Disable provides the option to turn off leader election, which is enabled by default.
Disable *bool `json:"disable,omitempty"`
Expand All @@ -173,7 +181,7 @@ type EnvoyGatewayLogging struct {
}

// EnvoyGatewayLogComponent defines a component that supports a configured logging level.
// +kubebuilder:validation:Enum=default;provider;gateway-api;xds-translator;xds-server;infrastructure;global-ratelimit
// +kubebuilder:validation:Enum=default;provider;gateway-api;xds-translator;xds-server;xds;infrastructure;global-ratelimit
type EnvoyGatewayLogComponent string

const (
Expand All @@ -193,6 +201,9 @@ const (
// LogComponentXdsServerRunner defines the "xds-server" runner component.
LogComponentXdsServerRunner EnvoyGatewayLogComponent = "xds-server"

// LogComponentXdsRunner defines the "xds" runner component.
LogComponentXdsRunner EnvoyGatewayLogComponent = "xds"

// LogComponentInfrastructureRunner defines the "infrastructure" runner component.
LogComponentInfrastructureRunner EnvoyGatewayLogComponent = "infrastructure"

Expand Down Expand Up @@ -432,9 +443,9 @@ type RateLimit struct {

// Timeout specifies the timeout period for the proxy to access the ratelimit server
// If not set, timeout is 20ms.
//
// +optional
// +kubebuilder:validation:Format=duration
Timeout *metav1.Duration `json:"timeout,omitempty"`
Timeout *gwapiv1.Duration `json:"timeout,omitempty"`

// FailClosed is a switch used to control the flow of traffic
// when the response from the ratelimit server cannot be obtained.
Expand Down
10 changes: 8 additions & 2 deletions api/v1alpha1/envoyproxy_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,12 @@ const (
// EnvoyFilterRateLimit defines the Envoy HTTP rate limit filter.
EnvoyFilterRateLimit EnvoyFilter = "envoy.filters.http.ratelimit"

// EnvoyFilterGRPCWeb defines the Envoy HTTP gRPC-web filter.
EnvoyFilterGRPCWeb EnvoyFilter = "envoy.filters.http.grpc_web"

// EnvoyFilterGRPCStats defines the Envoy HTTP gRPC stats filter.
EnvoyFilterGRPCStats EnvoyFilter = "envoy.filters.http.grpc_stats"

// EnvoyFilterCustomResponse defines the Envoy HTTP custom response filter.
EnvoyFilterCustomResponse EnvoyFilter = "envoy.filters.http.custom_response"

Expand Down Expand Up @@ -344,12 +350,12 @@ type ShutdownConfig struct {
// If unspecified, defaults to 60 seconds.
//
// +optional
DrainTimeout *metav1.Duration `json:"drainTimeout,omitempty"`
DrainTimeout *gwapiv1.Duration `json:"drainTimeout,omitempty"`
// MinDrainDuration defines the minimum drain duration allowing time for endpoint deprogramming to complete.
// If unspecified, defaults to 10 seconds.
//
// +optional
MinDrainDuration *metav1.Duration `json:"minDrainDuration,omitempty"`
MinDrainDuration *gwapiv1.Duration `json:"minDrainDuration,omitempty"`
}

// +kubebuilder:validation:XValidation:rule="((has(self.envoyDeployment) && !has(self.envoyDaemonSet)) || (!has(self.envoyDeployment) && has(self.envoyDaemonSet))) || (!has(self.envoyDeployment) && !has(self.envoyDaemonSet))",message="only one of envoyDeployment or envoyDaemonSet can be specified"
Expand Down
4 changes: 2 additions & 2 deletions api/v1alpha1/fault_injection.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package v1alpha1

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
import gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"

// FaultInjection defines the fault injection policy to be applied. This configuration can be used to
// inject delays and abort requests to mimic failure scenarios such as service failures and overloads
Expand All @@ -29,7 +29,7 @@ type FaultInjectionDelay struct {
// FixedDelay specifies the fixed delay duration
//
// +required
FixedDelay *metav1.Duration `json:"fixedDelay"`
FixedDelay *gwapiv1.Duration `json:"fixedDelay"`

// Percentage specifies the percentage of requests to be delayed. Default 100%, if set 0, no requests will be delayed. Accuracy to 0.0001%.
// +optional
Expand Down
18 changes: 5 additions & 13 deletions api/v1alpha1/healthcheck_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
)
import gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"

// HealthCheck configuration to decide which endpoints
// are healthy and can be used for routing.
Expand Down Expand Up @@ -42,10 +39,9 @@ type PassiveHealthCheck struct {

// Interval defines the time between passive health checks.
//
// +kubebuilder:validation:Format=duration
// +kubebuilder:default="3s"
// +optional
Interval *metav1.Duration `json:"interval,omitempty"`
Interval *gwapiv1.Duration `json:"interval,omitempty"`

// ConsecutiveLocalOriginFailures sets the number of consecutive local origin failures triggering ejection.
// Parameter takes effect only when split_external_local_origin_errors is set to true.
Expand All @@ -68,10 +64,9 @@ type PassiveHealthCheck struct {

// BaseEjectionTime defines the base duration for which a host will be ejected on consecutive failures.
//
// +kubebuilder:validation:Format=duration
// +kubebuilder:default="30s"
// +optional
BaseEjectionTime *metav1.Duration `json:"baseEjectionTime,omitempty"`
BaseEjectionTime *gwapiv1.Duration `json:"baseEjectionTime,omitempty"`

// MaxEjectionPercent sets the maximum percentage of hosts in a cluster that can be ejected.
//
Expand All @@ -90,22 +85,19 @@ type PassiveHealthCheck struct {
type ActiveHealthCheck struct {
// Timeout defines the time to wait for a health check response.
//
// +kubebuilder:validation:Format=duration
// +kubebuilder:default="1s"
// +optional
Timeout *metav1.Duration `json:"timeout"`
Timeout *gwapiv1.Duration `json:"timeout"`

// Interval defines the time between active health checks.
//
// +kubebuilder:validation:Format=duration
// +kubebuilder:default="3s"
// +optional
Interval *metav1.Duration `json:"interval"`
Interval *gwapiv1.Duration `json:"interval"`

// InitialJitter defines the maximum time Envoy will wait before the first health check.
// Envoy will randomly select a value between 0 and the initial jitter value.
//
// +kubebuilder:validation:Format=duration
// +optional
InitialJitter *gwapiv1.Duration `json:"initialJitter,omitempty"`

Expand Down
10 changes: 3 additions & 7 deletions api/v1alpha1/loadbalancer_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package v1alpha1

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
import gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"

// LoadBalancer defines the load balancer policy to be applied.
// +union
Expand Down Expand Up @@ -47,7 +47,6 @@ type LoadBalancer struct {
// ZoneAware defines the configuration related to the distribution of requests between locality zones.
//
// +optional
// +notImplementedHide
ZoneAware *ZoneAware `json:"zoneAware,omitempty"`
}

Expand Down Expand Up @@ -120,7 +119,7 @@ type Cookie struct {
// Max-Age attribute value.
//
// +optional
TTL *metav1.Duration `json:"ttl,omitempty"`
TTL *gwapiv1.Duration `json:"ttl,omitempty"`
// Additional Attributes to set for the generated cookie.
//
// +optional
Expand All @@ -147,7 +146,7 @@ type SlowStart struct {
// Currently only supports linear growth of traffic. For additional details,
// see https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/cluster.proto#config-cluster-v3-cluster-slowstartconfig
// +kubebuilder:validation:Required
Window *metav1.Duration `json:"window"`
Window *gwapiv1.Duration `json:"window"`
// TODO: Add support for non-linear traffic increases based on user usage.
}

Expand All @@ -156,7 +155,6 @@ type ZoneAware struct {
// PreferLocalZone configures zone-aware routing to prefer sending traffic to the local locality zone.
//
// +optional
// +notImplementedHide
PreferLocal *PreferLocalZone `json:"preferLocal,omitempty"`
}

Expand All @@ -166,13 +164,11 @@ type PreferLocalZone struct {
// which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally.
//
// +optional
// +notImplementedHide
Force *ForceLocalZone `json:"force,omitempty"`

// MinEndpointsThreshold is the minimum number of total upstream endpoints across all zones required to enable zone-aware routing.
//
// +optional
// +notImplementedHide
MinEndpointsThreshold *uint64 `json:"minEndpointsThreshold,omitempty"`
}

Expand Down
7 changes: 3 additions & 4 deletions api/v1alpha1/oidc_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
)

Expand Down Expand Up @@ -110,7 +109,7 @@ type OIDC struct {
// OAuth flow will fail.
//
// +optional
DefaultTokenTTL *metav1.Duration `json:"defaultTokenTTL,omitempty"`
DefaultTokenTTL *gwapiv1.Duration `json:"defaultTokenTTL,omitempty"`

// RefreshToken indicates whether the Envoy should automatically refresh the
// id token and access token when they expire.
Expand All @@ -127,8 +126,9 @@ type OIDC struct {
//
// If not specified, defaults to 604800s (one week).
// Note: this field is only applicable when the "refreshToken" field is set to true.
//
// +optional
DefaultRefreshTokenTTL *metav1.Duration `json:"defaultRefreshTokenTTL,omitempty"`
DefaultRefreshTokenTTL *gwapiv1.Duration `json:"defaultRefreshTokenTTL,omitempty"`

// Skips OIDC authentication when the request contains a header that will be extracted by the JWT filter. Unless
// explicitly stated otherwise in the extractFrom field, this will be the "Authorization: Bearer ..." header.
Expand Down Expand Up @@ -232,6 +232,5 @@ const (
type OIDCCookieConfig struct {
// +optional
// +kubebuilder:validation:Enum=Lax;Strict;None
// +kubebuilder:default=Strict
SameSite *string `json:"sameSite,omitempty"`
}
10 changes: 8 additions & 2 deletions api/v1alpha1/ratelimit_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,9 +285,9 @@ type RateLimitValue struct {
}

// RateLimitUnit specifies the intervals for setting rate limits.
// Valid RateLimitUnit values are "Second", "Minute", "Hour", and "Day".
// Valid RateLimitUnit values are "Second", "Minute", "Hour", "Day", "Month" and "Year".
//
// +kubebuilder:validation:Enum=Second;Minute;Hour;Day
// +kubebuilder:validation:Enum=Second;Minute;Hour;Day;Month;Year
type RateLimitUnit string

// RateLimitUnit constants.
Expand All @@ -303,4 +303,10 @@ const (

// RateLimitUnitDay specifies the rate limit interval to be 1 day.
RateLimitUnitDay RateLimitUnit = "Day"

// RateLimitUnitMonth specifies the rate limit interval to be 1 month.
RateLimitUnitMonth RateLimitUnit = "Month"

// RateLimitUnitYear specifies the rate limit interval to be 1 year.
RateLimitUnitYear RateLimitUnit = "Year"
)
Loading