Skip to content

Commit 01670f5

Browse files
kamilWyszynski1joestringer
authored andcommitted
Relax DisableCiliumEndpointCRD to work with CES and operator slim modede
Signed-off-by: Kamil Wyszyński <kwyszynski@google.com>
1 parent 346ab99 commit 01670f5

5 files changed

Lines changed: 31 additions & 12 deletions

File tree

pkg/k8s/synced/crd.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ func agentCRDResourceNames() []string {
4848

4949
if !option.Config.DisableCiliumEndpointCRD {
5050
result = append(result, CRDResourceName(v2.CEPName))
51-
if option.Config.EnableCiliumEndpointSlice {
52-
result = append(result, CRDResourceName(v2alpha1.CESName))
53-
}
51+
}
52+
if option.Config.EnableCiliumEndpointSlice {
53+
result = append(result, CRDResourceName(v2alpha1.CESName))
5454
}
5555

5656
if option.Config.EnableCiliumNodeCRD {

pkg/k8s/watchers/watcher.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,9 @@ func (k *K8sWatcher) enableK8sWatchers(ctx context.Context, resourceNames []stri
287287
k.k8sCiliumEndpointsWatcher.initCiliumEndpointOrSlices(ctx)
288288
}
289289
case k8sAPIGroupCiliumEndpointSliceV2Alpha1:
290-
// no-op; handled in k8sAPIGroupCiliumEndpointV2
290+
if !k.kcfg.IsEnabled() && option.Config.DisableCiliumEndpointCRD {
291+
k.k8sCiliumEndpointsWatcher.initCiliumEndpointOrSlices(ctx)
292+
}
291293
default:
292294
logging.Fatal(k.logger,
293295
"Not listening for Kubernetes resource updates for unhandled type",

pkg/option/config.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,8 @@ const (
574574
LogSystemLoadConfigName = "log-system-load"
575575

576576
// DisableCiliumEndpointCRDName is the name of the option to disable
577-
// use of the CEP CRD
577+
// use of the CEP CRD. Can be used along with operator's 'ces-controller-mode=slim'
578+
// mode to distribute endpoints without creating them.
578579
DisableCiliumEndpointCRDName = "disable-endpoint-crd"
579580

580581
// MaxCtrlIntervalName and MaxCtrlIntervalNameEnv allow configuration
@@ -2771,12 +2772,10 @@ func (c *DaemonConfig) Populate(logger *slog.Logger, vp *viper.Viper) {
27712772
logging.Fatal(logger, "Unable to parse excluded local addresses", logfields.Error, err)
27722773
}
27732774

2774-
// Ensure CiliumEndpointSlice is enabled only if CiliumEndpointCRD is enabled too.
2775+
// Relaxed: In operator-driven slim mode configurations, both CiliumEndpointSlices
2776+
// and DisableCiliumEndpointCRD can be true concurrently. The synchronization
2777+
// components skip standalone CEP creation in agent while leveraging CEPs.
27752778
c.EnableCiliumEndpointSlice = vp.GetBool(EnableCiliumEndpointSlice)
2776-
if c.EnableCiliumEndpointSlice && c.DisableCiliumEndpointCRD {
2777-
logging.Fatal(logger, fmt.Sprintf("Running Cilium with %s=%t requires %s set to false to enable CiliumEndpoint CRDs.",
2778-
EnableCiliumEndpointSlice, c.EnableCiliumEndpointSlice, DisableCiliumEndpointCRDName))
2779-
}
27802779

27812780
// To support K8s NetworkPolicy
27822781
c.EnableK8sNetworkPolicy = vp.GetBool(EnableK8sNetworkPolicy)
@@ -2805,7 +2804,7 @@ func (c *DaemonConfig) Populate(logger *slog.Logger, vp *viper.Viper) {
28052804
logger.Warn(fmt.Sprintf("Running Cilium with %q=%q requires identity allocation via CRDs. Changing %s to %q", KVStore, theKVStore, IdentityAllocationMode, IdentityAllocationModeCRD))
28062805
c.IdentityAllocationMode = IdentityAllocationModeCRD
28072806
}
2808-
if c.DisableCiliumEndpointCRD && NetworkPolicyEnabled(c) {
2807+
if c.DisableCiliumEndpointCRD && NetworkPolicyEnabled(c) && !c.EnableCiliumEndpointSlice {
28092808
logger.Warn(fmt.Sprintf("Running Cilium with %q=%q requires endpoint CRDs when network policy enforcement system is enabled. Changing %s to %t", KVStore, theKVStore, DisableCiliumEndpointCRDName, false))
28102809
c.DisableCiliumEndpointCRD = false
28112810
}

pkg/option/features.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func NetworkPolicyEnabled(cfg *DaemonConfig) bool {
1414
cfg.EnableK8sClusterNetworkPolicy,
1515
cfg.EnableCiliumNetworkPolicy,
1616
cfg.EnableCiliumClusterwideNetworkPolicy,
17-
!cfg.DisableCiliumEndpointCRD,
17+
(!cfg.DisableCiliumEndpointCRD || cfg.EnableCiliumEndpointSlice),
1818
cfg.IdentityAllocationMode != IdentityAllocationModeCRD,
1919
)
2020
}

pkg/option/features_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func TestNetworkPolicyEnabled(t *testing.T) {
1717
enableCNP bool
1818
enableCCNP bool
1919
disableCEP bool
20+
enableCES bool
2021
idAllocMode string
2122
}
2223

@@ -84,6 +85,22 @@ func TestNetworkPolicyEnabled(t *testing.T) {
8485
idAllocMode: "test",
8586
disableCEP: false,
8687
},
88+
{
89+
description: "enabled_slim_mode",
90+
want: true,
91+
enablePolicy: NeverEnforce,
92+
disableCEP: true,
93+
enableCES: true,
94+
idAllocMode: IdentityAllocationModeCRD,
95+
},
96+
{
97+
description: "enabled_traditional_slicing",
98+
want: true,
99+
enablePolicy: NeverEnforce,
100+
disableCEP: false,
101+
enableCES: true,
102+
idAllocMode: IdentityAllocationModeCRD,
103+
},
87104
}
88105

89106
for _, tc := range tcs {
@@ -93,6 +110,7 @@ func TestNetworkPolicyEnabled(t *testing.T) {
93110
EnableCiliumNetworkPolicy: tc.enableCNP,
94111
EnableCiliumClusterwideNetworkPolicy: tc.enableCCNP,
95112
DisableCiliumEndpointCRD: tc.disableCEP,
113+
EnableCiliumEndpointSlice: tc.enableCES,
96114
IdentityAllocationMode: tc.idAllocMode,
97115
}
98116

0 commit comments

Comments
 (0)