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

And*_*w C 6 permissions azure azure-disk kubernetes azure-aks

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

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

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

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

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

  键入来自消息的原因年龄
  ---- ------ ---- ---- -------
  Normal Scheduled 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 为 '<same GUID>' 的客户端 '<GUID>' 无权在范围 '/subscriptions/< 上执行操作 'Microsoft.Compute/disks/read' my-sub-id/resourceGroups/<my-grp>/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-251946-44timeout(0e326781-25196-444timeout)”:expire-nodepool1-18816840-vmss000001为“生产”/“phio-dep-db-6c6ddc885-p4ntg”附加或安装的卷。卸载卷列表=[dbvolume]。未附加卷列表=[dbvolume default-token-s7svk]

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

有人知道我缺少什么吗?

非常感谢。

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

Arg*_*dhu 4

从这里的文档

创建用于 AKS 的 Azure 磁盘时,可以在节点资源组中创建磁盘资源。此方法允许 AKS 群集访问和管理磁盘资源。如果在单独的资源组中创建磁盘,则必须向群集的 Azure Kubernetes 服务 (AKS) 服务主体授予磁盘资源组的参与者角色。或者,您可以使用系统分配的托管标识来获取权限,而不是使用服务主体。有关详细信息,请参阅使用托管身份

从这里的文档

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

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