No se pueden extraer imágenes de Azure Container Registry a Azure Web App
En este artículo se proporcionan instrucciones para solucionar los errores más comunes que puede encontrar al extraer imágenes de un registro de contenedor de Azure en Azure Web App.
Síntomas e solución de problemas iniciales
Se recomienda iniciar la solución de problemas comprobando el estado del registro de contenedor.
Para comprobar el estado del registro de contenedor, ejecute el siguiente comando:
az acr check-health --name <myregistry> --ignore-errors --yes
Si se detecta un problema, los resultados incluyen un código de error y una descripción. Para obtener más información sobre estos errores y posibles soluciones, consulte Referencia de errores de comprobación de estado.
Nota:
Si recibe errores relacionados con Helm o relacionados con notarios, no significa que container Registry o AKS no funcionen o tengan un problema. Simplemente indica los problemas, como que Helm o Notary no están instalados, o que la CLI de Azure no es compatible con la versión instalada actualmente de Helm o Notary.
A continuación, identifique el mensaje de error relacionado con la extracción que es esencial para solucionar problemas:
- Inicie sesión en el portal de Azure.
- En la aplicación web, seleccione Registro del Centro>de implementación. Seleccione la confirmación para ver los detalles del registro. También puede ver los registros del proceso de extracción de imágenes en tiempo real comprobando el flujo de registro en la sección Supervisión .
Las secciones siguientes le ayudarán a solucionar los errores más comunes que se muestran en los registros de aplicaciones web.
Error 1: No autorizado
Head \" https://<acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": unauthorized
Solución para la autenticación basada en el usuario administrador
El error "no autorizado" puede deberse a credenciales de administrador incorrectas. Esto incluye el servidor de inicio de sesión, el nombre de usuario o la contraseña que configuró en las variables de entorno de la aplicación web.
Para resolver el problema, siga estos pasos:
- En Azure Portal, vaya al contenedor del registro. En la sección Configuración , seleccione Claves de acceso. Compruebe la configuración de credenciales del usuario administrador del servidor de inicio de sesión, el nombre de usuario y la contraseña.
- Navegar a la aplicación web. En la sección Configuración , seleccione Variables de entorno.
- Asegúrese de que las tres variables configuradas para el registro de contenedor (servidor de inicio de sesión, nombre de usuario, contraseña) coinciden con la configuración de credenciales del usuario administrador en el contenedor del registro.
Solución para la autenticación basada en identidad administrada
Cuando se usa la autenticación basada en identidades administradas de Azure Web App, el Microsoft.ContainerRegistry/registries/pull/read
permiso se debe asignar a la identidad administrada para realizar la acción de incorporación de cambios.
Los roles integrados de Azure que contienen el Microsoft.ContainerRegistry/registries/pull/read
permiso son los siguientes:
- AcrPull
- AcrPush
- ReaderContributor
- Owner
Para obtener más información, vea Roles y permisos de Azure Container Registry.
Al iniciar una operación de extracción desde el registro de contenedor, el rol AcrPull se asigna automáticamente a la identidad administrada de Azure Web App. No tiene que agregar manualmente permisos. Sin embargo, debe asegurarse de que la creación de la asignación de roles no esté bloqueada por, por ejemplo, una directiva de Azure. Además, compruebe que la asignación de roles no se eliminó.
Error 2: No se encuentra el manifiesto etiquetado por <etiqueta>
DockerApiException : Docker API responded with status code=NotFound, response={"message":"manifest for <acr-name>.azurecr.io/<repository>:<tag> not found: manifest unknown: manifest tagged by \"<tag>\" is not found"}
Solución: asegúrese de que la etiqueta existe
El mensaje de error indica que no se encontró la etiqueta asociada a la imagen que intenta extraer. Asegúrese de que la etiqueta existe en el repositorio y el registro asociados.
Para usar la CLI de Azure para buscar las etiquetas en el repositorio y el registro asociados, ejecute el siguiente comando:
az acr repository show-tags -n <ContainerRegistryName> --repository <RepositoryName>
Para usar Azure Portal para buscar las etiquetas que se encuentran en el repositorio y el registro asociados, siga estos pasos:
Vaya al contenedor del registro. En Servicios, seleccione Repositorios, abra el repositorio asociado y, a continuación, compruebe la lista de etiquetas.
Nota:
El comando az acr repository show-tags o comprobar los repositorios de Azure Portal solo funciona si las reglas de red del registro de contenedor lo permiten.
Error 3: No se permite el acceso al cliente con IP
DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Head \"https:// <acr-name>.azurecr.io/v2/<repository>/manifests/<tag>\": denied: client with IP '<web-app-outbound-ip>' is not allowed access. Refer https://aka.ms/acr/firewall to grant access."}
Solución 1: Asegúrese de que el firewall integrado del registro de contenedor permite la dirección IP del dispositivo.
De forma predeterminada, un registro de contenedor acepta conexiones a través de Internet desde todas las redes. El registro de contenedor tiene un firewall integrado que puede restringir el acceso a direcciones IP o CIDR específicos, o deshabilitar completamente el acceso a la red pública.
Este problema puede producirse si el firewall integrado del registro de contenedor bloquea las direcciones IP de la aplicación web.
Para resolver este problema, asegúrese de que el firewall integrado permite las direcciones IP salientes de la aplicación web que tiene que extraer la imagen.
Para buscar las direcciones IP salientes de la aplicación web, siga estos pasos:
- En Azure Portal, vaya a la aplicación web.
- En la página Información general , busque Dirección IP saliente y, a continuación, seleccione Mostrar más para obtener la lista completa de las direcciones IP salientes.
Para usar la CLI de Azure para buscar las direcciones IP salientes de la aplicación web, consulte Búsqueda de direcciones IP de salida en App de Azure Service.
Solución 2: Configuración de la integración de red virtual para la aplicación web
Si tiene que deshabilitar completamente el acceso a la red pública o permitir solo las redes seleccionadas en el registro de contenedor sin agregar manualmente las direcciones IP de la aplicación web, la opción alternativa es extraer la imagen de forma privada. Para extraer imágenes de forma privada, debe configurar el registro de contenedor mediante un punto de conexión privado y habilitar la integración de red virtual para la aplicación web.
Puede configurar la integración de red virtual en la aplicación web siguiendo estos pasos:
En Azure Portal, vaya a la aplicación web y seleccione Redes.
En Configuración del tráfico saliente, configure integración de red virtual, seleccione Agregar integración de red virtual y, a continuación, especifique la suscripción, la red virtual y la subred.
En la página Configuración de red virtual, asegúrese de que está seleccionada la opción Extracción de imágenes de contenedor.
Para extraer la imagen a través de la red virtual, debe habilitar Pull image over VNet en el Centro de implementación de la aplicación web. Además, si el registro de contenedor tiene deshabilitado el acceso público o se establece en redes específicas, es posible que reciba el mensaje "Error al cargar etiquetas de ACR: error", como se muestra en el ejemplo siguiente. Este error se espera en este escenario. Si esto ocurre, las opciones desplegables de Imagen y Etiqueta no estarán disponibles. Tendrá que escribir manualmente la imagen y la etiqueta.
Pasos siguientes
Si esta guía de solución de problemas no resuelve el problema, tenga en cuenta lo siguiente:
Compruebe los grupos de seguridad de red y las tablas de rutas asociadas a las subredes. Si una aplicación virtual, como un firewall, controla el tráfico entre subredes, revise el firewall y sus reglas de acceso.
Use el servicio Kudu para solucionar problemas adicionales. Puede conectarse al servicio Kudu. Por ejemplo, use Bash para probar la resolución DNS mediante la ejecución nslookup <acr-name>.azurecr.io
de o compruebe la conectividad mediante tcpping <acr-name>.azurecr.io
.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.