无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥
Posted
技术标签:
【中文标题】无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥【英文标题】:Failed to provision volume with StorageClass - could not get storage key for storage account 【发布时间】:2021-05-18 00:10:33 【问题描述】:我正在尝试为 pod 部署提供 PVC,但遇到了以下错误:
无法使用 StorageClass "xxxxxxxxxxx" 配置卷:无法获取存储帐户 yyyyyyyyyyy 的存储密钥:无法获取存储帐户 yyyyyyyyyyy 的存储密钥:Retriable:false,RetryAfter:0s,HTTPStatusCode:400,RawError:Retriable:false , RetryAfter: 0s, HTTPStatusCode: 400, RawError: azure.BearerAuthorizer#WithAuthorization: 未能刷新令牌以请求 http://localhost:7788/subscriptions/zzzzzzzzzz-aaaaaa-bbbbbb/resourceGroups/MC_kkkkkkkkkkkkkkkkkkkk/providers/Microsoft.Storage /storageAccounts/yyyyyyyyyyyyyyy/listKeys?api-version=2019-06-01:StatusCode=400——原始错误:adal:刷新请求失败。状态码 = '400'。响应正文:"error":"unauthorized_client","error_description":"AADSTS700016:在目录 'ppappppppppp-aaaaaaaaaaaa-tttttttttttt' 中找不到标识符为 'aaaaaa-bbbbbbbb-cccccccccccccccc' 的应用程序。如果应用程序具有未经租户管理员安装或租户中任何用户同意。您可能将身份验证请求发送给了错误的租户。
我对 AKS 很陌生,我相信我缺少一些非常重要的东西,但在网络上没有找到任何帮助。
这是我已经仔细检查过的:
使用正确的帐户登录和订阅 引用的存储帐户确实存在 它与 AKS 群集位于同一区域和资源组中存储类清单
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: xxxxxxxx
provisioner: kubernetes.io/azure-file
parameters:
skuName: Standard_LRS
storageAccount: yyyyyyyyyyyy
resourceGroup: MC_zzzzzzzzzzzzzzzzz
PVC 清单
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: xxxxxxxx
resources:
requests:
storage: 5Gi
我正在使用Lens 来管理我的集群。 PVC 资源挂在Pending
状态:
你们能帮我弄清楚吗?
【问题讨论】:
【参考方案1】:根据 github issue here,如果集群没有服务主体或服务主体在有效期 1 年后过期,则会发生这种情况。
您可以通过运行以下命令来验证它。通过在任何主节点或代理节点上打开 /etc/kubernetes/azure.json
文件来检索详细信息。
az login --service-principal -u <aadClientId> -p <aadClientSecret> -t <tenantId>
在doc 之后更新或轮换凭证应该可以解决它。
或者,您可以使用托管标识而不是服务主体来获取权限。托管标识比服务主体更易于管理,并且不需要更新或轮换。欲了解更多信息,请参阅Use managed identities
【讨论】:
确实,该集群上的服务主体存在问题。感谢您的帮助。以上是关于无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥的主要内容,如果未能解决你的问题,请参考以下文章
云原生 | kubernetes 持久化存储 - StorageClass动态绑定PV
kubernetes之NFS动态提供Kubernetes后端存储卷