You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:14:50