@@ -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.
3739func (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 ).
112114func (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