Skip to content

Commit f105738

Browse files
authored
Merge pull request #1160 from ajaypvictor/baremetal-ibm-se
controllers: create kata-se runtime class
2 parents cdf7df7 + a7161c4 commit f105738

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

controllers/confidential_handler.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ const (
1818
// TEE node labels
1919
intelTDXNodeLabel = "intel.feature.node.kubernetes.io/tdx"
2020
amdSNPNodeLabel = "amd.feature.node.kubernetes.io/snp"
21+
ibmSENodeLabel = "ibm.feature.node.kubernetes.io/se"
2122

2223
// RuntimeClass handlers for TEE
2324
kataCCIntelHandler = "kata-tdx"
2425
kataCCAmdHandler = "kata-snp"
26+
kataCCIbmHandler = "kata-se"
2527

2628
// Extended resources for TEE
2729
intelTDXExtendedResource = "tdx.intel.com/keys"
@@ -31,7 +33,7 @@ const (
3133
// When the feature is enabled, handleFeatureConfidential configures confidential computing support.
3234
//
3335
// For peer pods: sets ImageConfigMap and peer pods configMap to enable confidential images and CVM support.
34-
// For baremetal: creates kata-cc runtime classes with TEE-specific handlers (Intel TDX or AMD SNP).
36+
// For baremetal: creates kata-cc runtime classes with TEE-specific handlers (Intel TDX, AMD SNP or IBM SE).
3537
//
3638
// When the feature is disabled, handleFeatureConfidential resets config maps and deletes runtime classes.
3739
func (r *KataConfigOpenShiftReconciler) handleFeatureConfidential(state FeatureGateState) error {
@@ -108,7 +110,7 @@ func (r *KataConfigOpenShiftReconciler) handleConfidentialPeerPods(state Feature
108110
}
109111

110112
// handleConfidentialBaremetal configures confidential computing for baremetal deployments.
111-
// It manages kata-cc runtime classes with TEE-specific handlers (Intel TDX or AMD SNP).
113+
// It manages kata-cc runtime classes with TEE-specific handlers (Intel TDX, AMD SNP or IBM SE).
112114
func (r *KataConfigOpenShiftReconciler) handleConfidentialBaremetal(state FeatureGateState) error {
113115
if state == Enabled {
114116
r.Log.Info("Creating " + kataCCRuntimeClassName + " runtime class for confidential containers")
@@ -168,18 +170,32 @@ func (r *KataConfigOpenShiftReconciler) computeTEEHandlerAndLabel() (string, str
168170
return "", "", fmt.Errorf("failed to list nodes: %w", err)
169171
}
170172

171-
var hasIntelTDX bool
172-
var hasAmdSNP bool
173+
var hasIntelTDX, hasAmdSNP, hasIbmSE bool
174+
173175
for _, n := range nodes.Items {
174176
if v, ok := n.Labels[intelTDXNodeLabel]; ok && v == "true" {
175177
hasIntelTDX = true
176178
}
177179
if v, ok := n.Labels[amdSNPNodeLabel]; ok && v == "true" {
178180
hasAmdSNP = true
179181
}
182+
if v, ok := n.Labels[ibmSENodeLabel]; ok && v == "true" {
183+
hasIbmSE = true
184+
}
180185
}
181186

182-
if hasIntelTDX && hasAmdSNP {
187+
count := 0
188+
if hasIntelTDX {
189+
count++
190+
}
191+
if hasAmdSNP {
192+
count++
193+
}
194+
if hasIbmSE {
195+
count++
196+
}
197+
198+
if count >= 2 {
183199
return "", "", fmt.Errorf("multiple TEE platforms detected; only one per cluster supported")
184200
}
185201

@@ -189,6 +205,9 @@ func (r *KataConfigOpenShiftReconciler) computeTEEHandlerAndLabel() (string, str
189205
if hasAmdSNP {
190206
return kataCCAmdHandler, amdSNPNodeLabel, nil
191207
}
208+
if hasIbmSE {
209+
return kataCCIbmHandler, ibmSENodeLabel, nil
210+
}
192211

193-
return "", "", fmt.Errorf("no TEE platform labels found (expected %s or %s)", intelTDXNodeLabel, amdSNPNodeLabel)
212+
return "", "", fmt.Errorf("no TEE platform labels found (expected %s, %s or %s)", intelTDXNodeLabel, amdSNPNodeLabel, ibmSENodeLabel)
194213
}

0 commit comments

Comments
 (0)