部署 AKS 群集时出现 OrasPullUnauthorizedVMExtensionError 错误代码 (212)

本文介绍如何识别和解决 OrasPullUnauthorizedVMExtensionError 尝试创建和部署 Microsoft Azure Kubernetes 服务(AKS)群集时发生的错误(错误代码 212)。

症状

尝试创建出站类型为 noneblock 的 AKS 群集时,您会收到以下错误消息:

VMExtensionProvisioningError:VM 在处理扩展“vmssCSE”时报告了失败。

错误消息:“启用失败:无法执行命令:命令已终止,退出状态=212

启动 Bootstrap 容器注册表授权失败。 请确保 kubelet 标识具有对注册表的拉取访问权限。

原因

对于 网络隔离群集,出口流量受到限制。 此功能引入了专用 Azure 容器注册表(ACR)缓存,该缓存充当代理,用于从 Microsoft 工件注册表(MAR)下载 AKS 引导所需的二进制文件或映像。 建议禁用对 ACR 的匿名访问。 AKS 节点使用 kubelet 标识访问 ACR。 acrpull如果未正确设置权限,或者 kubelet 标识未绑定到 VM 实例,则会发生未经授权的错误。

解决方案

若要解决此问题,请执行以下步骤:

  1. 使用安全外壳(SSH)访问 VM 实例以获取日志文件/var/log/azure/cluster-provision.log。 查看日志以确定问题是否与 401 错误、Azure 实例元数据服务(IMDS)连接超时或找不到 HTTP 代码 400 的标识相关。

  2. 运行以下命令,检索 AKS 用作启动 ACR 的 ACR 资源 ID:

    export REGISTRY_ID=$(az aks show -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME} --query 'bootstrapProfile.containerRegistryId' -o tsv)
    
  3. 如果问题与 401 错误有关,请运行以下命令,检查 kubelet 标识是否具有 acrpull 对 ACR 的权限:

    export KUBELET_IDENTITY_PRINCIPAL_ID=$(az aks show -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME} --query 'identityProfile.kubeletidentity.clientId' -o tsv)
    

    如果没有,请运行以下命令:

    az role assignment create --role AcrPull --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal
    
  4. 如果日志错误指示找不到标识,请手动将 kubelet 标识绑定到虚拟机规模集(VMSS),以便快速修复。

  5. 如果问题与 IMDS 连接超时有关,请提交支持票证。

  6. 如果上述作业已完成,则协调处理群集。

参考文献

联系我们以获得帮助

如果您有任何疑问或需要帮助,可以创建支持请求,或咨询Azure社区支持。 您还可以向Azure反馈社区提交产品反馈。