如何在AKS中使用托管标识通过PV/PVC访问存储账户
使用用户分配托管标识创建AKS的PV和PVC访问Azure存储账户
1. 为托管标识分配存储账户权限
首先给已添加到AKS的用户分配托管标识授予访问目标存储账户的权限:
- 若使用Azure Files:分配
Storage File Data SMB Share Contributor角色到存储账户或具体文件共享 - 若使用Azure Blob存储:分配
Storage Blob Data Contributor角色到存储账户或具体Blob容器
可通过Azure门户、Azure CLI或ARM模板完成权限分配,确保角色作用范围覆盖目标存储资源。
2. 创建静态Persistent Volume(PV)
根据存储类型编写PV的YAML配置,核心是指定托管标识的客户端ID:
示例:Azure Files类型PV
apiVersion: v1 kind: PersistentVolume metadata: name: azurefile-mi-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany storageClassName: azurefile-csi csi: driver: file.csi.azure.com volumeHandle: <存储账户名称>/<文件共享名称> volumeAttributes: resourceGroup: <存储账户所在资源组名称> storageAccount: <存储账户名称> shareName: <文件共享名称> managedIdentityClientID: <用户分配托管标识的客户端ID> # CSI驱动要求指定该字段,实际不会使用密钥,需提前创建空secret nodeStageSecretRef: name: dummy-secret
示例:Azure Blob类型PV
apiVersion: v1 kind: PersistentVolume metadata: name: azureblob-mi-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany storageClassName: azureblob-csi csi: driver: blob.csi.azure.com volumeHandle: <存储账户名称>/<Blob容器名称> volumeAttributes: resourceGroup: <存储账户所在资源组名称> storageAccount: <存储账户名称> containerName: <Blob容器名称> managedIdentityClientID: <用户分配托管标识的客户端ID> # CSI驱动要求指定该字段,实际不会使用密钥,需提前创建空secret nodeStageSecretRef: name: dummy-secret
3. 创建占位符Secret
由于CSI驱动要求必须指定nodeStageSecretRef,但使用托管标识时不会用到存储密钥,因此创建一个空的占位符secret:
kubectl create secret generic dummy-secret --from-literal=azurestorageaccountname=placeholder --from-literal=azurestorageaccountkey=placeholder
4. 创建Persistent Volume Claim(PVC)
编写PVC YAML绑定到上述PV:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile-mi-pvc spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi resources: requests: storage: 10Gi volumeName: azurefile-mi-pv # 对应PV的名称
5. 验证挂载(可选)
创建测试Pod挂载PVC,确认存储访问正常:
apiVersion: v1 kind: Pod metadata: name: storage-test-pod spec: containers: - name: test-container image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine volumeMounts: - name: storage-volume mountPath: /mnt/storage volumes: - name: storage-volume persistentVolumeClaim: claimName: azurefile-mi-pvc
关键注意事项
- 确保AKS集群已启用CSI驱动(默认AKS集群已启用,若未启用需先开启)
- 托管标识的客户端ID可通过以下命令获取:
az identity show --name <用户分配标识名称> --resource-group <标识所在资源组> --query clientId -o tsv - 存储类
azurefile-csi和azureblob-csi需存在于集群中,若不存在可手动创建对应的存储类
内容的提问来源于stack exchange,提问作者László Marton
相关产品推荐
相关产品推荐

