martes, 17 de mayo de 2022

Azure AKS deployment ErrImagePull ImagePullBackOff

Azure deployment ErrImagePull ImagePullBackOff

Hola

Estoy obteniendo el siguiente error al momento de la creación de un Pod al hacer pull de una imagen de un Container Registry en Azure

En la console de Azure y al hacer un describe pod obtengo lo siguiente: 

Failed to pull image "miazureregistry.azurecr.io/tibco/ordermgmt/v1": rpc error: code = Unknown desc = failed to pull and unpack image
"miazureregistry.azurecr.io/tibco/ordermgmt/v1:latest": failed to resolve reference "miazureregistry.azurecr.io/tibco/ordermgmt/v1:latest": failed to
authorize: failed to fetch anonymous token: unexpected status: 401
Unauthorized


El deployment lo estoy haciendo en un Azure Kubernetes Service y utiliza una imagen de un Container Registry también en Azure.

Los he creado de manera independiente por lo que no hay comunicación ni permisos entre ellos.

Para conocer el estatus entre ambos ejecuto la siguiente instrucción: 

az aks check-acr --name micluster --resource-group jhernand --acr miazureregistry.azurecr.io

[2022-05-17T16:04:39Z] Checking host name resolution (miazureregistry.azurecr.io): SUCCEEDED

[2022-05-17T16:04:39Z] Canonical name for ACR (miazureregistry.azurecr.io): r0419eus-3.eastus.cloudapp.azure.com.

[2022-05-17T16:04:39Z] ACR location: eastus

[2022-05-17T16:04:39Z] Loading azure.json file from /etc/kubernetes/azure.json

[2022-05-17T16:04:39Z] Checking managed identity...

[2022-05-17T16:04:39Z] Cluster cloud name: AzurePublicCloud

[2022-05-17T16:04:39Z] Kubelet managed identity client ID: ed10dc89-3346-4a8b-818b-dcb41ee87960

[2022-05-17T16:04:39Z] Validating managed identity existance: SUCCEEDED

[2022-05-17T16:04:39Z] Validating image pull permission: FAILED

[2022-05-17T16:04:39Z] ACR miazureregistry.azurecr.io rejected token exchange: ACR token exchange endpoint returned error status: 403. body: {"errors":[{"code":"DENIED","message":"retrieving permissions failed"}]}


Como ven el AKS no tiene permisos para hacer pull de imágenes sobre el container registry.

Solución 


Para solucionar el problema hay que ejecutar la siguiente instrucción:

az aks update -n micluster -g jhernand --attach-acr miazureregistry

......

  "fqdnSubdomain": null,

  "httpProxyConfig": null,

  "id": "/subscriptions/974aac80-0f88-44cc-b5d9-740d870dd50f/resourcegroups/jhernand/providers/Microsoft.ContainerService/managedClusters/micluster",

  "identity": {

    "principalId": "838f72dc-be60-45d3-afef-bb4bd3985f5e",

    "tenantId": "cde6fa59-abb3-4971-be01-2443c417cbda",

    "type": "SystemAssigned",

    "userAssignedIdentities": null

  },

  "identityProfile": {

    "kubeletidentity": {

      "clientId": "ed10dc89-3346-4a8b-818b-dcb41ee87960",

      "objectId": "194333ab-cf81-422d-8185-e9f8e75f2cb9",

      "resourceId": "/subscriptions/974aac80-0f88-44cc-b5d9-740d870dd50f/resourcegroups/MC_jhernand_micluster_eastus/providers/Microsoft.ManagedIdentity/userAssignedIdentities/micluster-agentpool"

    }

  },

  "kubernetesVersion": "1.22.6",

  "linuxProfile": null,

......


La instrucción asigna permisos de Pull (AcrPull) sobre el Managed Identity micluster-agentpool con lo que los Pod ya puede jalar la imagen exitosamente.

Una vez hecho, esperar algunos minutos para que se replique el cambio y después checar nuevamente:

jangel-MBP13:~ jhernand$ az aks check-acr --name micluster --resource-group jhernand --acr miazureregistry.azurecr.io

Merged "micluster" as current context in /var/folders/k1/cbw5hqpd0m3d6s9sxf24m7br0000gq/T/tmp18_0ut_a

Error attaching, falling back to logs: unable to upgrade connection: container canipull-fdb7ecea-32f1-41e9-ac31-4b1224a38f28 not found in pod canipull-fdb7ecea-32f1-41e9-ac31-4b1224a38f28_default

[2022-05-17T16:22:25Z] Checking host name resolution (miazureregistry.azurecr.io): SUCCEEDED

[2022-05-17T16:22:25Z] Canonical name for ACR (miazureregistry.azurecr.io): r0419eus-3.eastus.cloudapp.azure.com.

[2022-05-17T16:22:25Z] ACR location: eastus

[2022-05-17T16:22:25Z] Loading azure.json file from /etc/kubernetes/azure.json

[2022-05-17T16:22:25Z] Checking managed identity...

[2022-05-17T16:22:25Z] Cluster cloud name: AzurePublicCloud

[2022-05-17T16:22:25Z] Kubelet managed identity client ID: ed10dc89-3346-4a8b-818b-dcb41ee87960

[2022-05-17T16:22:25Z] Validating managed identity existance: SUCCEEDED

[2022-05-17T16:22:25Z] Validating image pull permission: SUCCEEDED

[2022-05-17T16:22:25Z] 

Your cluster can pull images from miazureregistry.azurecr.io!


Después de esto, verificar que los Pods arranquen correctamente después de algunos minutos o borrarlos y recrearlos.

Les dejo video de cómo realizar el proceso.




Espero les sirva




No hay comentarios.:

Publicar un comentario