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

使用Managed Identity集成Azure Key Vault与AKS并将密钥暴露为环境变量

根因说明

你遇到的secret "foobar-secret" not found报错,是因为Azure Key Vault CSI驱动默认关闭了将Key Vault密钥同步为Kubernetes原生Secret的功能,你配置的secretObjects字段只有在功能开启时才会生效,且需要对应RBAC权限支持。使用Managed Identity场景不需要配置nodePublishSecretRef,该参数仅适用于服务主体认证模式。

解决方案(无需改启动脚本,原生支持环境变量注入)

1. 开启CSI驱动Secret同步功能

如果你是用Helm安装的Azure CSI Secrets Store Provider,执行更新命令开启同步开关:

helm upgrade csi-secrets-store-provider-azure csi-secrets-store-provider-azure/csi-secrets-store-provider-azure \
  --namespace kube-system \
  --set secrets-store-csi-driver.syncSecret.enabled=true

2. 配置CSI驱动的RBAC权限

给CSI驱动的服务账号授予创建、更新Secret的权限,新建rbac.yaml并部署:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secrets-store-sync-role
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["create", "update", "patch", "get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: secrets-store-sync-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: secrets-store-sync-role
subjects:
- kind: ServiceAccount
  name: secrets-store-csi-driver
  namespace: kube-system

部署命令:kubectl apply -f rbac.yaml

3. 优化SecretProviderClass配置

将你现有SPC的apiVersion升级为稳定版,避免版本兼容问题:

apiVersion: secrets-store.csi.x-k8s.io/v1 # 替换原v1alpha1
kind: SecretProviderClass
metadata:
  name: spc-keyvault
spec:
  provider: azure
  secretObjects:
  - secretName: foobar-secret
    data:
    - key: foobar
      objectName: foobar
    type: Opaque
  parameters:
    keyvaultName: "$keyvault"
    usePodIdentity: "true"
    useVMManagedIdentity: "false"
    userAssignedIdentityID: ""
    objects: |
      array:
        - objectName: foobar
          objectType: secret
    resourceGroup: "$resourceGroup"
    subscriptionId: "$subId"
    tenantId: "$tenantId"

4. 重新部署验证

删除旧的SPC和Pod,重新部署更新后的SPC和你的原Pod配置,等待Pod启动后执行kubectl get secret foobar-secret即可看到自动创建的Secret,环境变量会自动注入成功。

轻量替代方案(无需改CSI驱动配置)

如果不想调整CSI驱动的全局配置,可以直接通过容器启动命令读取挂载的密钥注入环境变量,修改你的pod.yaml的containers字段即可:

containers:
  - name: nginx
    image: nginx
    command: ["/bin/sh", "-c"]
    args: ["export SECRET=$(cat /mnt/secrets-store/foobar) && nginx -g 'daemon off;'"]
    volumeMounts:
    - name: secrets-store-inline
      mountPath: "/mnt/secrets-store"
      readOnly: true

该方案不需要依赖Secret同步功能,也不需要提前创建Kubernetes原生Secret。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 01:48:02