diff --git a/api/v1alpha1/loadbalancer_types.go b/api/v1alpha1/loadbalancer_types.go index d4d0925d61..a148832e5e 100644 --- a/api/v1alpha1/loadbalancer_types.go +++ b/api/v1alpha1/loadbalancer_types.go @@ -12,6 +12,7 @@ import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" // // +kubebuilder:validation:XValidation:rule="self.type == 'ConsistentHash' ? has(self.consistentHash) : !has(self.consistentHash)",message="If LoadBalancer type is consistentHash, consistentHash field needs to be set." // +kubebuilder:validation:XValidation:rule="self.type in ['Random', 'ConsistentHash'] ? !has(self.slowStart) : true ",message="Currently SlowStart is only supported for RoundRobin and LeastRequest load balancers." +// +kubebuilder:validation:XValidation:rule="self.type == 'ConsistentHash' ? !has(self.zoneAware) : true ",message="Currently ZoneAware is only supported for LeastRequest, Random, and RoundRobin load balancers." type LoadBalancer struct { // Type decides the type of Load Balancer policy. // Valid LoadBalancerType values are @@ -34,6 +35,12 @@ type LoadBalancer struct { // // +optional SlowStart *SlowStart `json:"slowStart,omitempty"` + + // ZoneAware defines the configuration related to the distribution of requests between locality zones. + // + // +optional + // +notImplementedHide + ZoneAware *ZoneAware `json:"zoneAware,omitempty"` } // LoadBalancerType specifies the types of LoadBalancer. @@ -135,3 +142,39 @@ type SlowStart struct { Window *metav1.Duration `json:"window"` // TODO: Add support for non-linear traffic increases based on user usage. } + +// ZoneAware defines the configuration related to the distribution of requests between locality zones. +type ZoneAware struct { + // PreferLocalZone configures zone-aware routing to prefer sending traffic to the local locality zone. + // + // +optional + // +notImplementedHide + PreferLocal *PreferLocalZone `json:"preferLocal,omitempty"` +} + +// PreferLocalZone configures zone-aware routing to prefer sending traffic to the local locality zone. +type PreferLocalZone struct { + // ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + // 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:"minEndpointsCount,omitempty"` +} + +// ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior +// which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. +type ForceLocalZone struct { + // MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + // override. This is useful for protecting zones with fewer endpoints. + // + // +optional + // +notImplementedHide + MinEndpointsInZoneThreshold *uint32 `json:"minEndpointsInZoneThreshold,omitempty"` +} diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index fe790712a4..46e3fdb29f 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -2882,6 +2882,26 @@ func (in *FilterPosition) DeepCopy() *FilterPosition { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ForceLocalZone) DeepCopyInto(out *ForceLocalZone) { + *out = *in + if in.MinEndpointsInZoneThreshold != nil { + in, out := &in.MinEndpointsInZoneThreshold, &out.MinEndpointsInZoneThreshold + *out = new(uint32) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ForceLocalZone. +func (in *ForceLocalZone) DeepCopy() *ForceLocalZone { + if in == nil { + return nil + } + out := new(ForceLocalZone) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GRPCActiveHealthChecker) DeepCopyInto(out *GRPCActiveHealthChecker) { *out = *in @@ -4405,6 +4425,11 @@ func (in *LoadBalancer) DeepCopyInto(out *LoadBalancer) { *out = new(SlowStart) (*in).DeepCopyInto(*out) } + if in.ZoneAware != nil { + in, out := &in.ZoneAware, &out.ZoneAware + *out = new(ZoneAware) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancer. @@ -4887,6 +4912,31 @@ func (in *PolicyTargetReferences) DeepCopy() *PolicyTargetReferences { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PreferLocalZone) DeepCopyInto(out *PreferLocalZone) { + *out = *in + if in.Force != nil { + in, out := &in.Force, &out.Force + *out = new(ForceLocalZone) + (*in).DeepCopyInto(*out) + } + if in.MinEndpointsThreshold != nil { + in, out := &in.MinEndpointsThreshold, &out.MinEndpointsThreshold + *out = new(uint64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PreferLocalZone. +func (in *PreferLocalZone) DeepCopy() *PreferLocalZone { + if in == nil { + return nil + } + out := new(PreferLocalZone) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Principal) DeepCopyInto(out *Principal) { *out = *in @@ -6649,3 +6699,23 @@ func (in *ZipkinTracingProvider) DeepCopy() *ZipkinTracingProvider { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ZoneAware) DeepCopyInto(out *ZoneAware) { + *out = *in + if in.PreferLocal != nil { + in, out := &in.PreferLocal, &out.PreferLocal + *out = new(PreferLocalZone) + (*in).DeepCopyInto(*out) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ZoneAware. +func (in *ZoneAware) DeepCopy() *ZoneAware { + if in == nil { + return nil + } + out := new(ZoneAware) + in.DeepCopyInto(out) + return out +} diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml index 67814955a0..3c652ac044 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml @@ -691,6 +691,34 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related to the + distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware routing + to prefer sending traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum number + of total upstream endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -703,6 +731,10 @@ spec: LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) : + true ' mergeType: description: |- MergeType determines how this configuration is merged with existing BackendTrafficPolicy diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml index 3513591318..c91a2fd0ca 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml @@ -769,6 +769,35 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum + number of total upstream endpoints across + all zones required to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -781,6 +810,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml index bfafe4985b..41b8e303ed 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml @@ -11361,6 +11361,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -11374,6 +11407,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -12395,6 +12433,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -12408,6 +12479,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -13514,6 +13590,38 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests + between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending + traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of total + upstream endpoints across all + zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -13526,6 +13634,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin + load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -14552,6 +14665,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the + local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -14564,6 +14708,10 @@ spec: RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for + LeastRequest, Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml index 1fd41c1afc..681ac85e0e 100644 --- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml +++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml @@ -1268,6 +1268,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -1280,6 +1311,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -2200,6 +2235,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -2212,6 +2278,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -3338,6 +3408,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending traffic + to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -3350,6 +3451,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin load + balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -4464,6 +4570,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -4476,6 +4613,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml index f177f55e64..73e551f531 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml @@ -690,6 +690,34 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related to the + distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware routing + to prefer sending traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum number + of total upstream endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -702,6 +730,10 @@ spec: LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) : + true ' mergeType: description: |- MergeType determines how this configuration is merged with existing BackendTrafficPolicy diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml index e825e8284e..511913c576 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml @@ -768,6 +768,35 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum + number of total upstream endpoints across + all zones required to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -780,6 +809,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. 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 b352b9e369..7790869abd 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml @@ -11360,6 +11360,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -11373,6 +11406,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -12394,6 +12432,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -12407,6 +12478,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -13513,6 +13589,38 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests + between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending + traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of total + upstream endpoints across all + zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -13525,6 +13633,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin + load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -14551,6 +14664,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the + local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -14563,6 +14707,10 @@ spec: RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for + LeastRequest, Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml index 6467cbfde4..58fe239465 100644 --- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml +++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml @@ -1267,6 +1267,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -1279,6 +1310,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -2199,6 +2234,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -2211,6 +2277,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -3337,6 +3407,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending traffic + to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -3349,6 +3450,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin load + balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -4463,6 +4569,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -4475,6 +4612,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. diff --git a/site/content/en/latest/api/extension_types.md b/site/content/en/latest/api/extension_types.md index e2025a0da8..e5aa9a8b09 100644 --- a/site/content/en/latest/api/extension_types.md +++ b/site/content/en/latest/api/extension_types.md @@ -1969,6 +1969,20 @@ _Appears in:_ | `after` | _[EnvoyFilter](#envoyfilter)_ | true | | After defines the filter that should come after the filter.
Only one of Before or After must be set. | +#### ForceLocalZone + + + +ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior +which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + +_Appears in:_ +- [PreferLocalZone](#preferlocalzone) + +| Field | Type | Required | Default | Description | +| --- | --- | --- | --- | --- | + + #### GRPCActiveHealthChecker @@ -3447,6 +3461,19 @@ _Appears in:_ | `targetSelectors` | _[TargetSelector](#targetselector) array_ | true | | TargetSelectors allow targeting resources for this policy based on labels | +#### PreferLocalZone + + + +PreferLocalZone configures zone-aware routing to prefer sending traffic to the local locality zone. + +_Appears in:_ +- [ZoneAware](#zoneaware) + +| Field | Type | Required | Default | Description | +| --- | --- | --- | --- | --- | + + #### Principal @@ -5056,3 +5083,16 @@ _Appears in:_ | `disableSharedSpanContext` | _boolean_ | false | | DisableSharedSpanContext determines whether the default Envoy behaviour of
client and server spans sharing the same span context should be disabled. | +#### ZoneAware + + + +ZoneAware defines the configuration related to the distribution of requests between locality zones. + +_Appears in:_ +- [LoadBalancer](#loadbalancer) + +| Field | Type | Required | Default | Description | +| --- | --- | --- | --- | --- | + + diff --git a/test/cel-validation/backendtrafficpolicy_test.go b/test/cel-validation/backendtrafficpolicy_test.go index 4a966b877b..5770b378d9 100644 --- a/test/cel-validation/backendtrafficpolicy_test.go +++ b/test/cel-validation/backendtrafficpolicy_test.go @@ -342,7 +342,34 @@ func TestBackendTrafficPolicyTarget(t *testing.T) { "spec.loadBalancer.consistentHash: Invalid value: \"object\": If consistent hash type is cookie, the cookie field must be set", }, }, - + { + desc: "consistentHash lb with zoneAware", + mutate: func(btp *egv1a1.BackendTrafficPolicy) { + btp.Spec = egv1a1.BackendTrafficPolicySpec{ + PolicyTargetReferences: egv1a1.PolicyTargetReferences{ + TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{ + LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{ + Group: gwapiv1a2.Group("gateway.networking.k8s.io"), + Kind: gwapiv1a2.Kind("Gateway"), + Name: gwapiv1a2.ObjectName("eg"), + }, + }, + }, + ClusterSettings: egv1a1.ClusterSettings{ + LoadBalancer: &egv1a1.LoadBalancer{ + Type: egv1a1.ConsistentHashLoadBalancerType, + ConsistentHash: &egv1a1.ConsistentHash{ + Type: "SourceIP", + }, + ZoneAware: &egv1a1.ZoneAware{}, + }, + }, + } + }, + wantErrors: []string{ + "spec.loadBalancer: Invalid value: \"object\": Currently ZoneAware is only supported for LeastRequest, Random, and RoundRobin load balancers", + }, + }, { desc: "leastRequest with ConsistentHash nil", mutate: func(btp *egv1a1.BackendTrafficPolicy) { @@ -365,6 +392,29 @@ func TestBackendTrafficPolicyTarget(t *testing.T) { }, wantErrors: []string{}, }, + { + desc: "leastRequest with ZoneAware set", + mutate: func(btp *egv1a1.BackendTrafficPolicy) { + btp.Spec = egv1a1.BackendTrafficPolicySpec{ + PolicyTargetReferences: egv1a1.PolicyTargetReferences{ + TargetRef: &gwapiv1a2.LocalPolicyTargetReferenceWithSectionName{ + LocalPolicyTargetReference: gwapiv1a2.LocalPolicyTargetReference{ + Group: gwapiv1a2.Group("gateway.networking.k8s.io"), + Kind: gwapiv1a2.Kind("Gateway"), + Name: gwapiv1a2.ObjectName("eg"), + }, + }, + }, + ClusterSettings: egv1a1.ClusterSettings{ + LoadBalancer: &egv1a1.LoadBalancer{ + Type: egv1a1.LeastRequestLoadBalancerType, + ZoneAware: &egv1a1.ZoneAware{}, + }, + }, + } + }, + wantErrors: []string{}, + }, { desc: "leastRequest with SlowStar is set", mutate: func(btp *egv1a1.BackendTrafficPolicy) { diff --git a/test/helm/gateway-crds-helm/all.out.yaml b/test/helm/gateway-crds-helm/all.out.yaml index 784cd04012..4fbcd8f1b3 100644 --- a/test/helm/gateway-crds-helm/all.out.yaml +++ b/test/helm/gateway-crds-helm/all.out.yaml @@ -18330,6 +18330,34 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related to the + distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware routing + to prefer sending traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum number + of total upstream endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -18342,6 +18370,10 @@ spec: LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) : + true ' mergeType: description: |- MergeType determines how this configuration is merged with existing BackendTrafficPolicy @@ -21949,6 +21981,35 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum + number of total upstream endpoints across + all zones required to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -21961,6 +22022,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -34942,6 +35007,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -34955,6 +35053,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -35976,6 +36079,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -35989,6 +36125,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -37095,6 +37236,38 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests + between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending + traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of total + upstream endpoints across all + zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -37107,6 +37280,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin + load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -38133,6 +38311,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the + local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -38145,6 +38354,10 @@ spec: RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for + LeastRequest, Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -39984,6 +40197,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -39996,6 +40240,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -40916,6 +41164,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -40928,6 +41207,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -42054,6 +42337,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending traffic + to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -42066,6 +42380,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin load + balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -43180,6 +43499,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -43192,6 +43542,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. diff --git a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml index a5c4a590c6..56549ef0fa 100644 --- a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml +++ b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml @@ -1018,6 +1018,34 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related to the + distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware routing + to prefer sending traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum number + of total upstream endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -1030,6 +1058,10 @@ spec: LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) : + true ' mergeType: description: |- MergeType determines how this configuration is merged with existing BackendTrafficPolicy @@ -4637,6 +4669,35 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the minimum + number of total upstream endpoints across + all zones required to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -4649,6 +4710,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -17630,6 +17695,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -17643,6 +17741,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -18664,6 +18767,39 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the + configuration related to the distribution + of requests between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer + sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of + total upstream endpoints + across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -18677,6 +18813,11 @@ spec: load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only + supported for LeastRequest, Random, + and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' + ? !has(self.zoneAware) : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with @@ -19783,6 +19924,38 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests + between locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending + traffic to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold + is the minimum number of total + upstream endpoints across all + zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -19795,6 +19968,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin + load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -20821,6 +20999,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the + local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -20833,6 +21042,10 @@ spec: RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for + LeastRequest, Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -22672,6 +22885,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -22684,6 +22928,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -23604,6 +23852,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -23616,6 +23895,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -24742,6 +25025,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration + related to the distribution of requests between + locality zones. + properties: + preferLocal: + description: PreferLocalZone configures + zone-aware routing to prefer sending traffic + to the local locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is + the minimum number of total upstream + endpoints across all zones required + to enable zone-aware routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -24754,6 +25068,11 @@ spec: for RoundRobin and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported + for LeastRequest, Random, and RoundRobin load + balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend. @@ -25868,6 +26187,37 @@ spec: - Random - RoundRobin type: string + zoneAware: + description: ZoneAware defines the configuration related + to the distribution of requests between locality + zones. + properties: + preferLocal: + description: PreferLocalZone configures zone-aware + routing to prefer sending traffic to the local + locality zone. + properties: + force: + description: |- + ForceLocalZone defines override configuration for forcing all traffic to stay within the local zone instead of the default behavior + which maintains equal distribution among upstream endpoints while sending as much traffic as possible locally. + properties: + minEndpointsInZoneThreshold: + description: |- + MinEndpointsInZoneThreshold is the minimum number of upstream endpoints in the local zone required to honor the forceLocalZone + override. This is useful for protecting zones with fewer endpoints. + format: int32 + type: integer + type: object + minEndpointsCount: + description: MinEndpointsThreshold is the + minimum number of total upstream endpoints + across all zones required to enable zone-aware + routing. + format: int64 + type: integer + type: object + type: object required: - type type: object @@ -25880,6 +26230,10 @@ spec: and LeastRequest load balancers. rule: 'self.type in [''Random'', ''ConsistentHash''] ? !has(self.slowStart) : true ' + - message: Currently ZoneAware is only supported for LeastRequest, + Random, and RoundRobin load balancers. + rule: 'self.type == ''ConsistentHash'' ? !has(self.zoneAware) + : true ' proxyProtocol: description: ProxyProtocol enables the Proxy Protocol when communicating with the backend.