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

如何在AKS中通过CSI Secret Store Driver按需挂载Keyvault指定密钥?

解决方案:在CSI Secret Store Driver中实现按需挂载特定密钥

针对你在AKS中使用CSI Secret Store Driver连接Keyvault时,希望在Pod卷级别选择特定密钥而非挂载全部的需求,有以下几种实现方式:

方法1:创建多个专用SecretProviderClass

为不同应用分别定义只包含其所需密钥的SecretProviderClass,每个应用的Pod挂载对应的Class即可仅获取自身需要的密钥。

示例:针对App1的SecretProviderClass

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: secretcls-app1
spec:
  provider: azure
  parameters:
    keyvaultName: "your-keyvault-name"
    tenantId: "your-tenant-id"
    objects: |
      array:
        - |
          objectName: app1-db-password
          objectType: secret
        - |
          objectName: app1-api-key
          objectType: secret

对应Pod配置

volumes:
  - name: secrets-provider-volume
    csi:
      driver: secrets-store.csi.k8s.io
      readOnly: true
      volumeAttributes:
        secretProviderClass: secretcls-app1
containers:
  - name: your-app-container
    volumeMounts:
      - name: secrets-provider-volume
        mountPath: /etc/.secrets
        readOnly: true

方法2:使用Inline卷属性直接指定密钥(推荐)

从CSI Secret Store Driver v1.1.0版本开始,支持在Pod的卷定义中直接指定要拉取的密钥,无需依赖预定义的SecretProviderClass,完全在卷级别控制所需密钥。

示例Pod配置

volumes:
  - name: secrets-provider-volume
    csi:
      driver: secrets-store.csi.k8s.io
      readOnly: true
      volumeAttributes:
        provider: "azure"
        keyvaultName: "your-keyvault-name"
        tenantId: "your-tenant-id"
        objects: |
          array:
            - |
              objectName: app-db-password
              objectType: secret
            - |
              objectName: app-api-token
              objectType: secret
containers:
  - name: your-app-container
    volumeMounts:
      - name: secrets-provider-volume
        mountPath: /etc/.secrets
        readOnly: true

方法3:结合Secret同步与密钥投影

如果需要基于已有的全量密钥SecretProviderClass,可先将所需密钥同步到Kubernetes Secret,再通过密钥投影挂载特定密钥:

步骤1:修改SecretProviderClass添加同步配置

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: secretcls
spec:
  provider: azure
  parameters:
    keyvaultName: "your-keyvault-name"
    tenantId: "your-tenant-id"
    objects: |
      array:
        - |
          objectName: app1-db-password
          objectType: secret
        - |
          objectName: app2-api-key
          objectType: secret
  secretObjects:
    - data:
        - key: db-password
          objectName: app1-db-password
      secretName: app1-secret
      type: Opaque

步骤2:在Pod中使用密钥投影挂载

volumes:
  - name: projected-secrets
    projected:
      sources:
        - secret:
            name: app1-secret
            items:
              - key: db-password
                path: db/password
containers:
  - name: your-app-container
    volumeMounts:
      - name: projected-secrets
        mountPath: /etc/.secrets
        readOnly: true

以上三种方法中,方法2最贴近你提到的普通Secret密钥投影的使用方式,无需额外定义多个SecretProviderClass,直接在Pod卷配置中按需选择密钥。

内容的提问来源于stack exchange,提问作者Bennimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:22:52