azure AKS无法提取ACR图像ImagePullBackOff

vof42yt1  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(173)

我使用Azure Kubernetes服务从Azure容器注册表执行Docker映像部署。部署后,我得到:

Failed to pull image "<reg_name>.azurecr.io/service:latest": [rpc error: code = NotFound desc = failed to pull and unpack image "<reg_name>.azurecr.io/service:latest": failed to resolve reference "<reg_name>.azurecr.io/service:latest": <reg_name>.azurecr.io/service:latest: not found, rpc error: code = Unknown desc = failed to pull and unpack image "<reg_name>.azurecr.io/service:latest": failed to resolve reference "<reg_name>.azurecr.io/service:latest": failed to authorize: failed to fetch anonymous token: unexpected status: 401 Unauthorized]

我创建了服务主体并获取了主体名称和密码(基于:https://anupams.net/using-image-pull-secrets-with-azure-container-registry/),然后我把它放到kubernetes secret中。接下来在我的deployment.yml中,我使用了属性:imagePullSecrets与以前创建的secret。但在部署后仍然无法工作,并且kubectl get pod报告了相同的问题:

service-deployment-cbf49bcd9-vs2jz   0/1     ImagePullBackOff   0          27m

我试着用“docker login”命令和以前创建的服务主体凭证登录--它能用。但在AKS中不行...谢谢你的帮助。

c3frrgcw

c3frrgcw1#

您应该使用利用RBAC的AKS ACR集成,而不是使用带有Kubernetes机密的服务主体。
Microsoft也推荐它:
虽然拉取机密是常用的,但它们会带来额外的管理开销。如果你正在使用Azure Kubernetes服务,我们建议使用其他选项,例如使用群集的托管身份或服务主体来安全地拉取映像,而无需在每个单元上进行额外的imagePullSecrets设置。
你可以通过在此处使用Azure CLI获取现有群集详细信息或在此处创建新群集详细信息来执行此操作。如果你使用Terraform或Bicep,你也可以自己创建角色分配。
地形示例:

resource "azurerm_role_assignment" "example" {
    scope                            = azurerm_container_registry.acr.id
    role_definition_name             = "AcrPull"
    principal_id                     = azurerm_kubernetes_cluster.aks.kubelet_identity[0].object_id
  }

相关问题