【发布时间】:2021-02-06 21:53:19
【问题描述】:
我尝试了az aks show 和az aks list 命令,但它们没有显示附加ACR 的名称。
我使用az aks update --attach-acr 运行了附加 acr 的命令,它显示它已附加。
我可以通过 CLI 或门户看到 acr 在集群中吗?
【问题讨论】:
标签: azure kubernetes azure-devops azure-container-registry
我尝试了az aks show 和az aks list 命令,但它们没有显示附加ACR 的名称。
我使用az aks update --attach-acr 运行了附加 acr 的命令,它显示它已附加。
我可以通过 CLI 或门户看到 acr 在集群中吗?
【问题讨论】:
标签: azure kubernetes azure-devops azure-container-registry
恐怕您在集群 UI 门户中看不到附加的 ACR。
当您使用 az aks update --attach-acr 命令将 ACR 附加到 AKS 群集时。
它只是将 ACR 的 AcrPull 角色分配给与 AKS 群集关联的服务主体。有关详细信息,请参阅 here。
您可以通过命令az aks list获取与AKS集群关联的服务主体
请看下面的截图。 AcrPull 角色已分配给与 AKS 群集关联的服务主体。
如果要使用 Azure CLI 检查哪个 ACR 已附加到 AKS 群集。您可以列出所有 ACR。然后遍历 ACR 以检查哪一个已将 AcrPull 角色分配给 AKS 服务主体。见下例:
# list all the ACR and get the ACR id
az acr list
az role assignment list --assignee <Aks service principal ID> --scope <ACR ID>
【讨论】:
实际上,命令中的参数--attach-acr 只是将角色ACRPull 授予AKS 的服务主体。和以前没有区别。您只能看到 AKS 的服务主体。目前,如果您不知道 ACR 范围,CLI 命令az role assignment list 无法直接获取 ACR。但是您可以像这样首先获取主体 ID:
az aks show --resource-group groupName --name aksName --query identityProfile.kubeletidentity.objectId
然后使用CLI命令获取ACR的资源Id:
az rest --method get --uri "https://management.azure.com/subscriptions/{subscription_id}/providers/Microsoft.Authorization/roleAssignments?api-version=2015-07-01" --uri-parameters "\$filter=principalId eq 'objectId'" --query "value[0].properties.scope"
如果您知道 ACR 资源 Id,我想您应该清楚地知道 ACR 附加到哪个 ACR。
【讨论】:
az aks check-acr 命令检查某个 ACR 是否可从特定 AKS 获得。
您必须同时提供 ACR 和 AKS 作为参数,因此这不利于发现。
您可以围绕此构建一个小脚本,查询多个订阅的注册 ACR(您不能将多个订阅参数传递给 az acr list --subscription,您必须逐个查询订阅),构建一个聚合表ACR 然后将这些值循环传递给az aks check-acr。
【讨论】:
CommandNotFoundError: 'check-acr' is misspelled or not recognized by the system.,但是docs.microsoft.com/en-us/cli/azure/… 中提到了这个命令,所以我想知道什么给出了?
» az aks check-acrthe following arguments are required: --resource-group/-g, --name/-n, --acr你的完整命令是什么?