将 Azure 磁盘附加到 AKS pod 时出现权限错误

Posted

技术标签:

【中文标题】将 Azure 磁盘附加到 AKS pod 时出现权限错误【英文标题】:Permissions error when attaching Azure Disk to AKS pod 【发布时间】:2020-10-18 05:15:44 【问题描述】:

我已经与这个错误作斗争几个小时了。找到了几篇文章,但到目前为止没有任何帮助。

我的工作基于来自https://docs.microsoft.com/en-us/azure/aks/azure-disk-volume 的“操作指南 > 配置数据卷 > Azure 磁盘 - 静态”。据我所知,我没有错过任何步骤。

我在 YAML 文件中通过 config 定义如下:

种类:部署
元数据:
    名称:phio-dep-db
    命名空间:生产
规格:
    选择器:
        匹配标签:
            应用程序:phio
    复制品:1
    战略:
        类型:滚动更新
    模板:
        元数据:
            标签:
                应用程序:phio
        规格:
            终止GracePeriodSeconds:1
            卷:
              - 名称:数据库卷
                天蓝色磁盘:
                    磁盘名称:PHIO_DB_VOL
                    diskURI:/subscriptions//providers/Microsoft.Compute/disks/PHIO_DB_VOL
                    种类:托管
            容器:
              - 图片:phioweb.azurecr.io/phiodb
                名称:分贝
                端口:
                  - 容器端口:3306
                卷装:
                  - 挂载路径:/var/lib/mysql
                    名称:数据库卷

但是,当我执行 kubectl apply -f .yml 时,pod 永远不会启动。如果我执行“kubectl describe all -n production”,我会看到以下内容:

 类型原因 来自消息的年龄
  ---- ------ ---- ---- --------
  正常调度 31m default-scheduler 成功分配 production/phio-dep-db-6c6ddc885-p4ntg 到 aks-nodepool1-18816840-vmss000001
  警告 FailedAttachVolume 79s (x23 over 31m) attachdetach-controller AttachVolume.Attach 卷“dbvolume”失败:compute.DisksClient#Get:响应请求失败:StatusCode=403 - 原始错误:autorest/azure:服务返回错误。 Status=403 Code="AuthorizationFailed" Message="对象 id '' 的客户端 '' 没有权限在范围 '/subscriptions//providers/Microsoft.Compute/disks/PHIO_DB_VOL' 或范围无效。如果最近授予访问权限,请刷新您的凭据。”
  警告 FailedMount 23s (x14 over 29m) kubelet, aks-nodepool1-18816840-vmss000001 无法为 pod “phio-dep-db-6c6ddc885-p4ntg_production(0e326781-2936-4451-9446-9608a8f41439)”挂载卷:等待超时为 pod“production”/“phio-dep-db-6c6ddc885-p4ntg”附加或挂载的卷。卸载卷列表=[dbvolume]。未附加卷列表=[dbvolume default-token-s7svk]

MS 文档中没有关于为 Azure 磁盘分配权限的任何内容,并且我在 YAML 中没有缺少明显的参数。

有人知道我缺少什么吗?

非常感谢。

(我已经对输出进行了一些清理,但这都是测试,并且 Azure 订阅将在这项工作之后被分箱,即使它说的是生产)

【问题讨论】:

【参考方案1】:

来自文档here

创建用于 AKS 的 Azure 磁盘时,可以在节点资源组中创建磁盘资源。此方法允许 AKS 群集访问和管理磁盘资源。如果改为在单独的资源组中创建磁盘,则必须 授予您的 Azure Kubernetes 服务 (AKS) 服务主体 将 Contributor 角色集群到磁盘的资源组。 或者,您可以将系统分配的托管标识用于 权限而不是服务主体。了解更多信息, 见Use managed identities

来自文档here

您可能需要访问另一个资源组中的现有磁盘资源。分配以下一组角色权限之一:

    创建自定义角色并定义以下角色权限: Microsoft.Compute/disks/read Microsoft.Compute/disks/write 或者,在资源组上分配存储帐户参与者内置角色

【讨论】:

您好,感谢您查看此内容。我已经仔细检查过,磁盘和 AKS 都在同一个资源组中,这就是我感到困惑的原因。 ACR 也在同一组中并且工作正常。谢谢 能否查看节点资源组中是否有磁盘资源? 嗨,我刚回来说当我看到你的评论时我可能已修复它。该磁盘位于“CT4025”资源组中,与 AKS 相同。我一整天都在做这个并尝试各种事情,并决定删除磁盘并将其重新添加。我逐字按照 MS 说明进行操作,并注意到他们将磁盘放在“MC_xxx”资源组中。这次我也做了同样的事情,把它放在“MC_CT4025_phio_uksouth”中。吊舱已经启动并且看起来很稳定。我会尽快测试它。 上次,我想我认为要使用的资源组是我创建的那个,我想我不知道还有另一个被创建。在过去的几个小时里我学到了很多东西,现在我重新阅读了 MS 文档,我现在明白了为什么节点这个词是粗体的。您的原始答案也更有意义。还不完全理解组之间的区别以及为什么磁盘应该在节点组中,而其他东西不在。需要更多阅读!你知道吗? 我猜节点的身份是由 azure 验证的,如果磁盘和节点在同一个资源组中,那么身份验证就可以正常工作,不需要任何额外的工作

以上是关于将 Azure 磁盘附加到 AKS pod 时出现权限错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将来自不同订阅的 ACR 附加到 AKS? [关闭]

在 C# 应用程序中获取集群 azure kubernetes 服务 (AKS) 运行状况/可用性

AKS(Azure Kubernetes 服务)和 SQL

使用托管标识进行 AKS 文件共享持久挂载 - 密钥轮换后出现问题

使用 Azure 数据工厂将数据加载到雪花时出现问题

如何将 SSD(高级)磁盘附加到我的 NC6 - Microsoft Azure 中的数据科学 VM?