Skip to content

Commit b602c0f

Browse files
committed
azurefile: kata-cc: add confidential node conditional
1 parent 713758d commit b602c0f

File tree

3 files changed

+56
-9
lines changed

3 files changed

+56
-9
lines changed

deploy/rbac-csi-azurefile-node.yaml

+21
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,24 @@ roleRef:
5454
name: csi-azurefile-node-katacc-role
5555
apiGroup: rbac.authorization.k8s.io
5656
---
57+
kind: ClusterRole
58+
apiVersion: rbac.authorization.k8s.io/v1
59+
metadata:
60+
name: csi-azurefile-node-role
61+
rules:
62+
- apiGroups: [""]
63+
resources: ["nodes"]
64+
verbs: ["get"]
65+
---
66+
kind: ClusterRoleBinding
67+
apiVersion: rbac.authorization.k8s.io/v1
68+
metadata:
69+
name: csi-azurefile-node-binding
70+
subjects:
71+
- kind: ServiceAccount
72+
name: csi-azurefile-node-sa
73+
namespace: kube-system
74+
roleRef:
75+
kind: ClusterRole
76+
name: csi-azurefile-node-role
77+
apiGroup: rbac.authorization.k8s.io

pkg/azurefile/azurefile.go

+31
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import (
4545
apierrors "k8s.io/apimachinery/pkg/api/errors"
4646
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4747
"k8s.io/apimachinery/pkg/util/wait"
48+
clientset "k8s.io/client-go/kubernetes"
4849
"k8s.io/klog/v2"
4950
"k8s.io/kubernetes/pkg/volume/util"
5051
mount "k8s.io/mount-utils"
@@ -449,7 +450,12 @@ func (d *Driver) Run(ctx context.Context) error {
449450
csi.RegisterControllerServer(server, d)
450451
csi.RegisterNodeServer(server, d)
451452
d.server = server
453+
val, val2, err := getNodeInfoFromLabels(ctx, d.NodeID, d.cloud.KubeClient)
454+
if err != nil {
455+
klog.Warningf("failed to get node info from labels: %v", err)
456+
}
452457

458+
klog.V(2).Infof("Node info from labels: %s, %s", val, val2)
453459
listener, err := csicommon.ListenEndpoint(d.endpoint)
454460
if err != nil {
455461
klog.Fatalf("failed to listen endpoint: %v", err)
@@ -1242,3 +1248,28 @@ func (d *Driver) getStorageEndPointSuffix() string {
12421248
}
12431249
return d.cloud.Environment.StorageEndpointSuffix
12441250
}
1251+
1252+
func getNodeInfoFromLabels(ctx context.Context, nodeId string, kubeClient clientset.Interface) (string, string, error) {
1253+
if kubeClient == nil || kubeClient.CoreV1() == nil {
1254+
return "", "", fmt.Errorf("kubeClient is nil")
1255+
}
1256+
1257+
node, err := kubeClient.CoreV1().Nodes().Get(ctx, nodeId, metav1.GetOptions{})
1258+
if err != nil {
1259+
return "", "", fmt.Errorf("get node(%s) failed with %v", nodeId, err)
1260+
}
1261+
1262+
if len(node.Labels) == 0 {
1263+
return "", "", fmt.Errorf("node(%s) label is empty", nodeId)
1264+
}
1265+
return node.Labels["kubernetes.azure.com/kata-mshv-vm-isolation"], node.Labels["katacontainers.io/kata-runtime"], nil
1266+
}
1267+
1268+
func isNodeConfidential(ctx context.Context, nodeId string, kubeClient clientset.Interface) bool {
1269+
val, val2, err := getNodeInfoFromLabels(ctx, nodeId, kubeClient)
1270+
if err != nil {
1271+
klog.Warningf("get node(%s) confidential label failed with %v", nodeId, err)
1272+
return false
1273+
}
1274+
return val == "true" || val2 == "true"
1275+
}

pkg/azurefile/nodeserver.go

+4-9
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ func (d *Driver) NodePublishVolume(ctx context.Context, req *csi.NodePublishVolu
101101
}
102102

103103
if d.enableKataCCMount {
104-
enableKataCCMount := getValueInMap(context, enableKataCCMountField)
105-
if strings.EqualFold(enableKataCCMount, trueValue) && context[podNameField] != "" && context[podNamespaceField] != "" {
104+
enableKataCCMount := isNodeConfidential(ctx, d.NodeID, d.cloud.KubeClient)
105+
if enableKataCCMount && context[podNameField] != "" && context[podNamespaceField] != "" {
106106
runtimeClass, err := getRuntimeClassForPodFunc(ctx, d.cloud.KubeClient, context[podNameField], context[podNamespaceField])
107107
if err != nil {
108108
return nil, status.Errorf(codes.Internal, "failed to get runtime class for pod %s/%s: %v", context[podNamespaceField], context[podNameField], err)
@@ -252,7 +252,7 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
252252
// don't respect fsType from req.GetVolumeCapability().GetMount().GetFsType()
253253
// since it's ext4 by default on Linux
254254
var fsType, server, protocol, ephemeralVolMountOptions, storageEndpointSuffix, folderName string
255-
var ephemeralVol, enableKataCCMount bool
255+
var ephemeralVol bool
256256
fileShareNameReplaceMap := map[string]string{}
257257

258258
mountPermissions := d.mountPermissions
@@ -284,11 +284,6 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
284284
fileShareNameReplaceMap[pvcNameMetadata] = v
285285
case pvNameKey:
286286
fileShareNameReplaceMap[pvNameMetadata] = v
287-
case enableKataCCMountField:
288-
enableKataCCMount, err = strconv.ParseBool(v)
289-
if err != nil {
290-
return nil, status.Errorf(codes.InvalidArgument, "invalid %s: %s in storage class", enableKataCCMountField, v)
291-
}
292287
case mountPermissionsField:
293288
if v != "" {
294289
var err error
@@ -423,7 +418,7 @@ func (d *Driver) NodeStageVolume(ctx context.Context, req *csi.NodeStageVolumeRe
423418
}
424419
klog.V(2).Infof("volume(%s) mount %s on %s succeeded", volumeID, source, cifsMountPath)
425420
}
426-
421+
enableKataCCMount := isNodeConfidential(ctx, d.NodeID, d.cloud.KubeClient)
427422
// If runtime OS is not windows and protocol is not nfs, save mountInfo.json
428423
if d.enableKataCCMount && enableKataCCMount {
429424
if runtime.GOOS != "windows" && protocol != nfs {

0 commit comments

Comments
 (0)