Ein Azure-Dienst, der eine universelle, serverlose Containerplattform bereitstellt.
Vielen Dank für Ihre Anfrage an Microsoft Q&A.
In Azure Container Apps kann das Abrufen eines Images aus der Azure Container Registry (ACR) mithilfe einer verwalteten Identität in einer privaten virtuellen Netzwerkumgebung fehlschlagen, selbst wenn sich beide Ressourcen in derselben Ressourcengruppe und demselben virtuellen Netzwerk befinden. Dies liegt daran, dass das Abrufen von Images von der Azure Container Apps-Plattform (Steuerungsebene) und nicht innerhalb des laufenden Containers selbst durchgeführt wird. Daher muss die Plattform sich mithilfe der verwalteten Identität bei ACR authentifizieren, den ACR-Endpunkt über privates DNS auflösen und die Registry über das Netzwerk erreichen können. Wenn eine dieser Voraussetzungen nicht erfüllt ist – beispielsweise die ARM-Authentifizierung in ACR deaktiviert ist, die verwaltete Identität nicht explizit der Registry zugeordnet ist, die Verknüpfung der privaten DNS-Zone fehlt oder der ausgehende Netzwerkzugriff eingeschränkt ist –, schlägt der Image-Abruf fehl. Dies führt in der Regel zu ImagePullFailure- oder UNAUTHORIZED-Fehlern, obwohl das Image vorhanden ist und die Berechtigungen korrekt erscheinen.
Beachten Sie die folgenden Punkte, um dieses Problem zu beheben oder als Workaround zu verwenden:
Aktivieren Sie die ARM-Zielgruppenauthentifizierung in Azure Container Registry.
Azure Container Apps benötigen, dass ACR Azure Resource Manager (ARM)-Token akzeptiert, wenn verwaltete Identitäten verwendet werden. Wenn diese Einstellung deaktiviert ist, schlagen Image-Abrufe mit verwalteten Identitäten immer fehl.
az acr config authentication-as-arm show -r <acr-name>
Falls der Status deaktiviert ist, aktivieren Sie ihn mit folgendem Befehl:
az acr config authentication-as-arm update -r <acr-name> --status enabled
Weisen Sie eine verwaltete Identität zu und konfigurieren Sie diese explizit für ACR-Image-Abrufe.
Die alleinige Zuweisung der Rolle „AcrPull“ ist nicht ausreichend. Die verwaltete Identität muss:
der Container-App zugewiesen und
explizit als die für den Abruf von Images aus ACR verwendete Identität konfiguriert sein.
Systemseitig zugewiesene Identität zuweisen:
az containerapp identity assign -n <Name der Container-App> -g <Ressourcengruppe>
Konfigurieren Sie die Container-App so, dass sie diese Identität für ACR verwendet:
az containerapp registry set \
-n <container-app-name> \
-g <resource-group> \
--server <acr-name>.azurecr.io \
--identity system
Stellen Sie sicher, dass die verwaltete Identität die Rolle AcrPull im ACR-Ressourcenbereich besitzt. Die verwaltete Identität muss die Rolle AcrPull auf ACR-Ressourcenebene zugewiesen bekommen, nicht nur auf Abonnement- oder Ressourcengruppenebene.
az role assignment create \
--assignee <managed-identity-principal-id> \
--role AcrPull \
--scope /subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.ContainerRegistry/registries/<acr-name>
Konfigurieren Sie den privaten Endpunkt-DNS korrekt für Azure Container Registry
Wenn ACR mit einem privaten Endpunkt konfiguriert ist, muss die Container Apps-Umgebung <acr-name>.azurecr.io in eine private IP-Adresse auflösen können. Dies erfordert:
Eine private DNS-Zone mit dem Namen privatelink.azurecr.io
Die DNS-Zone, die mit dem von der Container Apps-Umgebung verwendeten virtuellen Netzwerk (VNet) verknüpft ist
Einen A-Eintrag für die Registry, der automatisch vom privaten Endpunkt erstellt wird
Sie können die DNS-Auflösung wie folgt überprüfen:
nslookup <acr-name>.azurecr.io
Konfigurieren Sie den privaten Endpunkt-DNS korrekt für Azure Container Registry
Wenn ACR mit einem privaten Endpunkt konfiguriert ist, muss die Container Apps-Umgebung <acr-name>.azurecr.io in eine private IP-Adresse auflösen können. Dies erfordert:
Eine private DNS-Zone mit dem Namen privatelink.azurecr.io
Die DNS-Zone, die mit dem von der Container Apps-Umgebung verwendeten virtuellen Netzwerk (VNet) verknüpft ist
Einen A-Eintrag für die Registry, der automatisch vom privaten Endpunkt erstellt wird
Sie können die DNS-Auflösung wie folgt überprüfen:
and click on Yes for was this answer helpful. And, if you have any further query do let us know.