无法使用AKS和ACR拉新图像

时间:2019-10-18 09:51:11

标签: azure kubernetes azure-aks acr

我突然遇到了使用AKS从Azure容器注册表中提取最新映像的问题(以前运行良好。

如果我跑步

kubectl describe pod <podid> I get:


Failed to pull image <image>: rpc error: code = Unknown desc = Error response from daemon: Get <image>: unauthorized: authentication required

我已经尝试过手动登录ACR,并且所有功能都可以正常运行-新图像已正确推送,我可以手动拉出它们。

此外,我已经尝试过:

az aks update -g MyResourceGroup -n MyManagedCluster --attach-acr acrName

成功(没有错误,输出传播成功),但仍然不起作用。

我尝试使用以下方式更新凭据:

az aks update-credentials --resource-group <group>--name <aks name>--reset-service-principal --service-principal <sp id> --client-secret <client-secret>

哪个消息很奇怪:

Deployment failed. Correlation ID: 6e84754a-821d-4a39-a0df-7ab9ba21973f. 
Unable to get log analytics workspace info. Resource ID: 
/subscriptions/<subscription id>/resourcegroups/defaultresourcegroup- 
weu/providers/microsoft.operationalinsights/workspaces/defaultworkspace- 
d259e6ea-8230-4cb0-a7a8-7f0df6c7ef18-weu. Details: autorest/azure: Service 
returned an error. Status=404 Code="ResourceGroupNotFound" 
Message="Resource group 'defaultresourcegroup-weu' could not be found.". For 
more details about how to create and use log analytics workspace,  please 
refer to: https://aka.ms/new-log-analytics

我尝试创建一个新的日志分析工作区,并且以上错误仍然存​​在。

我还尝试了以下步骤:

This link

This SO post

As well as this post

除了上面的帖子,我还浏览了许多教程和Microsoft页面来尝试解决问题。

我尝试创建新的服务主体并为其分配适当的角色,但是错误仍然存​​在。 我还涉猎创建新机密,但没有成功。

不需要新图像的pod都按预期运行。 如果我查看我的应用程序注册(在azure活动目录下),它们都是在一年前创建的-因此,我担心某些内容已过期,并且不知道如何解决。

2 个答案:

答案 0 :(得分:2)

有两种方法可以对此进行排序

  1. 将ACR映射到AKS

CLIENT_ID=$(az aks show --resource-group $AKS_RESOURCE_GROUP --name 
$AKS_CLUSTER_NAME --subscription $SUBSCRIPTION_ID --query "servicePrincipalProfile.clientId" --output tsv)

ACR_ID=$(az acr show --name $ACR_NAME --resource-group $ACR_RESOURCE_GROUP --subscription $SUBSCRIPTION_ID --query "id" --output tsv)

az role assignment create --assignee $CLIENT_ID --role Reader --scope $ACR_ID

另一种方法是添加Image pull secret,其类型将为kubernetes.io/dockerconfigjson

这可以通过-

完成
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

然后,您可以在部署文件中将此秘密称为imagePullSecret,并且不会出现身份验证错误

答案 1 :(得分:0)

通过使用以下方法禁用Log Analytics插件来完成此工作:

az aks disable-addons -a monitoring -n <AKSName> -g <ResourceGroupName>

根据我发布的错误消息之一,似乎我的日志分析只是导致事情崩溃了(虽然不确定为什么),所以暂时将其禁用并能够更新

az aks update-credentials --resource-group <group>--name <aks name>--reset-service-principal --service-principal <sp id> --client-secret <client-secret>