Azure Kubernetes 无法从 ACR 容器中提取图像

Azure Kubernetes cannot pull a image from ACR container

我需要一些有关 Azure AKS 和 ACR 集成的帮助。 我创建了一个 ACR 容器并将此容器附加到 AKS 群集。我在创建 AKS 时启用了托管身份,我希望 ACR 也使用托管身份

这是我正在使用的脚本..

az group create --name $RESOURCEGROUP --location eastus
az acr create -n $REGISTRYNAME -g $RESOURCEGROUP --sku Basic
az aks create -n $CLUSTERNAME -g $RESOURCEGROUP --node-count $NODECOUNT --enable-addons monitoring --generate-ssh-keys --enable-managed-identity --attach-acr $REGISTRYNAME
az aks get-credentials -g $RESOURCEGROUP -n $CLUSTERNAME

在 AKS 上,当我得到 pods 时,出现图像拉取错误

我看到 AKS 使用托管身份,ACR 使用主体 ID。我该如何解决这个问题

我尝试使用您提供的相同 cmdlet 后遇到类似问题。

您需要尝试设置 imagePullPolicy to Never 并且成功了。

由于kubectl describe pod mypdKubectl试图拉取镜像,当然这个镜像不存在于远程服务器上,因此失败。

以上 属性 将避免连接到注册表,并将使用来自 docker 本地图像缓存的图像。

用于使用 ACR 和 AKS

将图像导入 ACR 通过以下 运行 将图像从 docker 集线器导入您的 ACR:

az acr import  -n <acr-name> --source docker.io/library/nginx:latest --image nginx:v1

建议您遵循此 Microsoft document 将示例映像从 ACR 部署到 AKS

spec:
      containers:
      - name: nginx
        image: <acr-name>.azurecr.io/nginx:v1
        imagePullPolicy: Never
        ports:
        - containerPort: 80

参考:

ErrImageNeverPull 错误表明您的 pod 规范列出了 imagePullPolicy: Never,这意味着 kubelet 只会查看节点自己的缓存,而不会尝试从 ACR 中拉取。如果你删除它,它应该可以工作。