Skip to content

Commit 2cc4d16

Browse files
committed
api: drop MergeBackendsConfig.Enabled, presence alone enables MergeBackends
Mirrors the existing MergeGateways *bool precedent: mergeBackends being set at all (even empty) now enables cluster deduplication, so there is no separate on/off toggle to get out of sync with field presence. This also simplifies the mergeGateways/mergeBackends mutual-exclusion CEL rule to a presence check. Signed-off-by: Muhammad Waqar <mwaqar@confluent.io>
1 parent 7c9c1e8 commit 2cc4d16

84 files changed

Lines changed: 109 additions & 271 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

api/v1alpha1/envoyproxy_types.go

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ type EnvoyProxy struct {
3535
}
3636

3737
// EnvoyProxySpec defines the desired state of EnvoyProxy.
38-
// +kubebuilder:validation:XValidation:message="mergeGateways and mergeBackends cannot both be enabled",rule="!(has(self.mergeGateways) && self.mergeGateways && has(self.mergeBackends) && has(self.mergeBackends.enabled) && self.mergeBackends.enabled)"
38+
// +kubebuilder:validation:XValidation:message="mergeGateways and mergeBackends cannot both be enabled",rule="!(has(self.mergeGateways) && self.mergeGateways && has(self.mergeBackends))"
3939
type EnvoyProxySpec struct {
4040
// Provider defines the desired resource provider and provider-specific configuration.
4141
// If unspecified, the "Kubernetes" resource provider is used with default configuration
@@ -100,7 +100,8 @@ type EnvoyProxySpec struct {
100100
// rule. This reduces xDS size, active health-check traffic, and stats cardinality, and
101101
// improves upstream connection pooling.
102102
//
103-
// Disabled when unset. Mutually exclusive with MergeGateways.
103+
// Disabled when unset; specifying this field at all (even without further configuration)
104+
// enables it. Mutually exclusive with MergeGateways.
104105
//
105106
// +optional
106107
MergeBackends *MergeBackendsConfig `json:"mergeBackends,omitempty"`
@@ -231,17 +232,10 @@ type EnvoyProxySpec struct {
231232
MergeType *MergeType `json:"mergeType,omitempty"`
232233
}
233234

234-
// MergeBackendsConfig configures backend cluster deduplication (MergeBackends).
235-
type MergeBackendsConfig struct {
236-
// Enabled toggles whether cluster deduplication is considered at all. Defaults to false.
237-
//
238-
// A backendRef is only merged into a shared cluster when safe to do so; otherwise it falls
239-
// back to a dedicated per-route cluster.
240-
//
241-
// +optional
242-
// +kubebuilder:default=false
243-
Enabled *bool `json:"enabled,omitempty"`
244-
}
235+
// MergeBackendsConfig configures backend cluster deduplication (MergeBackends). Its mere
236+
// presence on EnvoyProxySpec enables it; a backendRef is only merged into a shared cluster when
237+
// safe to do so, otherwise it falls back to a dedicated per-route cluster.
238+
type MergeBackendsConfig struct{}
245239

246240
// EnvoyProxyGeoIP defines shared GeoIP provider settings for EnvoyProxy.
247241
type EnvoyProxyGeoIP struct {

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 1 addition & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -785,16 +785,8 @@ spec:
785785
rule. This reduces xDS size, active health-check traffic, and stats cardinality, and
786786
improves upstream connection pooling.
787787

788-
Disabled when unset. Mutually exclusive with MergeGateways.
789-
properties:
790-
enabled:
791-
default: false
792-
description: |-
793-
Enabled toggles whether cluster deduplication is considered at all. Defaults to false.
794-
795-
A backendRef is only merged into a shared cluster when safe to do so; otherwise it falls
796-
back to a dedicated per-route cluster.
797-
type: boolean
788+
Disabled when unset; specifying this field at all (even without further configuration)
789+
enables it. Mutually exclusive with MergeGateways.
798790
type: object
799791
mergeGateways:
800792
description: |-
@@ -18134,8 +18126,7 @@ spec:
1813418126
type: object
1813518127
x-kubernetes-validations:
1813618128
- message: mergeGateways and mergeBackends cannot both be enabled
18137-
rule: '!(has(self.mergeGateways) && self.mergeGateways && has(self.mergeBackends)
18138-
&& has(self.mergeBackends.enabled) && self.mergeBackends.enabled)'
18129+
rule: '!(has(self.mergeGateways) && self.mergeGateways && has(self.mergeBackends))'
1813918130
status:
1814018131
description: EnvoyProxyStatus defines the actual state of EnvoyProxy.
1814118132
properties:

charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -784,16 +784,8 @@ spec:
784784
rule. This reduces xDS size, active health-check traffic, and stats cardinality, and
785785
improves upstream connection pooling.
786786

787-
Disabled when unset. Mutually exclusive with MergeGateways.
788-
properties:
789-
enabled:
790-
default: false
791-
description: |-
792-
Enabled toggles whether cluster deduplication is considered at all. Defaults to false.
793-
794-
A backendRef is only merged into a shared cluster when safe to do so; otherwise it falls
795-
back to a dedicated per-route cluster.
796-
type: boolean
787+
Disabled when unset; specifying this field at all (even without further configuration)
788+
enables it. Mutually exclusive with MergeGateways.
797789
type: object
798790
mergeGateways:
799791
description: |-
@@ -18133,8 +18125,7 @@ spec:
1813318125
type: object
1813418126
x-kubernetes-validations:
1813518127
- message: mergeGateways and mergeBackends cannot both be enabled
18136-
rule: '!(has(self.mergeGateways) && self.mergeGateways && has(self.mergeBackends)
18137-
&& has(self.mergeBackends.enabled) && self.mergeBackends.enabled)'
18128+
rule: '!(has(self.mergeGateways) && self.mergeGateways && has(self.mergeBackends))'
1813818129
status:
1813918130
description: EnvoyProxyStatus defines the actual state of EnvoyProxy.
1814018131
properties:

internal/gatewayapi/helpers.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -702,13 +702,12 @@ func IsMergeBackendsEnabled(resources *resource.Resources) bool {
702702
// Check GatewayClass-level EnvoyProxy first (higher priority)
703703
if resources.EnvoyProxyForGatewayClass != nil &&
704704
resources.EnvoyProxyForGatewayClass.Spec.MergeBackends != nil {
705-
return ptr.Deref(resources.EnvoyProxyForGatewayClass.Spec.MergeBackends.Enabled, false)
705+
return true
706706
}
707707

708708
// Fall back to default EnvoyProxySpec from EnvoyGateway configuration
709-
if resources.EnvoyProxyDefaultSpec != nil &&
710-
resources.EnvoyProxyDefaultSpec.MergeBackends != nil {
711-
return ptr.Deref(resources.EnvoyProxyDefaultSpec.MergeBackends.Enabled, false)
709+
if resources.EnvoyProxyDefaultSpec != nil {
710+
return resources.EnvoyProxyDefaultSpec.MergeBackends != nil
712711
}
713712

714713
return false

internal/gatewayapi/helpers_test.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1608,8 +1608,7 @@ func TestIrBackendClusterName(t *testing.T) {
16081608
}
16091609

16101610
func TestIsMergeBackendsEnabled(t *testing.T) {
1611-
enabled := &egv1a1.MergeBackendsConfig{Enabled: new(true)}
1612-
disabled := &egv1a1.MergeBackendsConfig{Enabled: new(false)}
1611+
enabled := &egv1a1.MergeBackendsConfig{}
16131612

16141613
tests := []struct {
16151614
name string
@@ -1630,14 +1629,6 @@ func TestIsMergeBackendsEnabled(t *testing.T) {
16301629
},
16311630
want: true,
16321631
},
1633-
{
1634-
name: "gatewayclass envoyproxy takes precedence over default spec",
1635-
res: &resource.Resources{
1636-
EnvoyProxyForGatewayClass: &egv1a1.EnvoyProxy{Spec: egv1a1.EnvoyProxySpec{MergeBackends: disabled}},
1637-
EnvoyProxyDefaultSpec: &egv1a1.EnvoyProxySpec{MergeBackends: enabled},
1638-
},
1639-
want: false,
1640-
},
16411632
{
16421633
name: "gatewayclass envoyproxy set but MergeBackends nil falls back to default spec",
16431634
res: &resource.Resources{

internal/gatewayapi/route.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -582,7 +582,7 @@ func (t *Translator) shouldMergeBackend(
582582
// override (via gatewayCtx.envoyProxy) win over t.MergeBackends' GatewayClass/default value.
583583
func (t *Translator) isMergeBackendsEnabledForGateway(gatewayCtx *GatewayContext) bool {
584584
if gatewayCtx != nil && gatewayCtx.envoyProxy != nil && gatewayCtx.envoyProxy.Spec.MergeBackends != nil {
585-
return ptr.Deref(gatewayCtx.envoyProxy.Spec.MergeBackends.Enabled, false)
585+
return true
586586
}
587587
return t.MergeBackends
588588
}

internal/gatewayapi/route_test.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -610,20 +610,11 @@ func TestShouldMergeBackend(t *testing.T) {
610610
name: "disabled globally, but Gateway-level EnvoyProxy enables it",
611611
mergeEnabled: false,
612612
gatewayEnvoyProxy: &egv1a1.EnvoyProxy{
613-
Spec: egv1a1.EnvoyProxySpec{MergeBackends: &egv1a1.MergeBackendsConfig{Enabled: new(true)}},
613+
Spec: egv1a1.EnvoyProxySpec{MergeBackends: &egv1a1.MergeBackendsConfig{}},
614614
},
615615
backendRef: serviceBackendRef,
616616
want: true,
617617
},
618-
{
619-
name: "enabled globally, but Gateway-level EnvoyProxy disables it",
620-
mergeEnabled: true,
621-
gatewayEnvoyProxy: &egv1a1.EnvoyProxy{
622-
Spec: egv1a1.EnvoyProxySpec{MergeBackends: &egv1a1.MergeBackendsConfig{Enabled: new(false)}},
623-
},
624-
backendRef: serviceBackendRef,
625-
want: false,
626-
},
627618
{
628619
name: "enabled, no routing type anywhere: baseline == effective (both Endpoint)",
629620
mergeEnabled: true,

internal/gatewayapi/testdata/mergebackends-gateway-mergegateways-conflict.in.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ envoyProxyForGatewayClass:
77
spec:
88
mergeGateways: true
99
envoyProxyDefaultSpec:
10-
mergeBackends:
11-
enabled: true
10+
mergeBackends: {}
1211
gateways:
1312
- apiVersion: gateway.networking.k8s.io/v1
1413
kind: Gateway

internal/gatewayapi/testdata/mergebackends-grpc-shared-cluster.in.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ envoyProxyForGatewayClass:
55
namespace: envoy-gateway-system
66
name: test
77
spec:
8-
mergeBackends:
9-
enabled: true
8+
mergeBackends: {}
109
gateways:
1110
- apiVersion: gateway.networking.k8s.io/v1
1211
kind: Gateway

0 commit comments

Comments
 (0)