Azure AKS使用托管身份访问Key Vault卷挂载失败排查
问题排查结论
核心错误原因
你遇到的挂载失败核心报错是failed to get credentials, nodePublishSecretRef secret is not set,根本原因是你使用用户分配托管身份访问Key Vault的前提条件不满足,配置存在多处缺失:
- 你的AKS集群未启用Pod Identity功能,从
az aks show输出可见podIdentityProfile为null,CSI Secrets Store驱动无法获取你指定的用户托管身份凭证 - 你没有将创建的用户托管身份和Pod做绑定,也没有给Pod添加对应的身份绑定标签
- SecretProviderClass的机密配置存在逻辑错误,你将
username和password两个别名都映射到了Key Vault中同一个名为test的机密,不符合常规的用户名密码分开存储的配置逻辑
修复步骤
前置检查
首先确认你已在AKS集群中部署了Azure Secrets Store CSI驱动,未部署的话执行以下命令安装:
helm repo add azure-secrets-store-csi-driver https://azure.github.io/secrets-store-csi-driver-provider-azure/charts helm repo update helm install csi-secrets-store-provider-azure azure-secrets-store-csi-driver/csi-secrets-store-provider-azure --namespace kube-system
分步配置
- 启用AKS集群的Pod Identity功能,执行命令:
az aks update --name SonarQubeCluster --resource-group RG --enable-pod-identity
等待集群配置更新完成。
- 将你创建的用户托管身份添加为AKS的Pod身份,替换命令中占位符为你托管身份的完整资源ID:
az aks pod-identity add --resource-group RG --cluster-name SonarQubeCluster --namespace default --name az-kv-identity --identity-resource-id <你的用户托管身份完整资源ID>
- 修改Deployment的Pod模板配置,添加身份绑定标签,让Pod能匹配到上面创建的Pod身份:
template: metadata: labels: app: sonarqube aadpodidbinding: az-kv-identity # 新增这行标签
- 修正SecretProviderClass的机密映射配置,将objectName替换为你Key Vault中实际存储用户名和密码的机密名称:
objects: | array: - | objectName: <Key Vault中存用户名的机密名称> objectType: secret objectAlias: username objectVersion: "" - | objectName: <Key Vault中存密码的机密名称> objectType: secret objectAlias: password objectVersion: ""
确认Key Vault访问策略配置,给你创建的用户托管身份授予**机密获取(Get)和机密列表(List)**权限,无需额外配置Azure角色分配,用访问策略即可满足权限要求。
重新部署修改后的SecretProviderClass和Deployment,删除旧的故障Pod等待重建即可。
内容的提问来源于stack exchange,提问作者X T
相关产品推荐
相关产品推荐

