Chapitre 1 : Azure Container Registry et Azure Container Instance dans votre Vnet
L'architecture
Parlons un peu de l'architecture que nous avions envisagé de réaliser. L'objectif est d'instancier des conteneurs via des Azure Container Instance à partir d'image déployé dans un Azure Container Registry. Tout cela doit être sécurisé au niveau reseau dans un Virtual Network.
D'un coté le service Azure Container Registry permet d'utiliser les Private Endpoint pour restreindre l'accès de son service de registre de conteneur à un réseau privé. De l'autre, les Azure Container Instance peuvent être déployés dans un réseau privé virtuel. Donc, sur le papier le schéma d'architecture ci-dessous fonctionne... Ce n'est pas le cas.
L'exception
Après quelques tests infructueux, nous avons fait une petite recherche et découvert rapidement que l'utilisation d'un Private Endpoint pour un Azure Container Registry comportait quelques exceptions et notamment celle-ci :
Extrait docs.microsoft.com
Les instances de services Azure, notamment Azure DevOps Services, Web Apps et Azure Container Instances, ne peuvent pas non plus accéder à un registre de conteneurs dont l’accès réseau est restreint.
Contournement
Les 2 services Microsoft ne pouvant être utilisés conjointement dans un réseau privé, 3 solutions s'offrent à nous :
- Ne plus restreindre l'accès réseau de notre Azure Container Registry.
- Remplacer notre Azure Container Registry par une solution Container Registry Self Hosted
- Remplacer nos Azure Container Instance par un cluster Azure Kubernetes Services par exemple.
Et il ne faut pas compter sur l'utilisation d'un Service Endpoint (en preview) puisque celui-ci ne permet pas non plus de récupérer l'image depuis un Azure Container Instance.
Extrait de docs.microsoft.com
Les instances de services Azure, notamment Azure DevOps Services, Web Apps et Azure Container Instances, ne peuvent pas non plus accéder à un registre de conteneurs dont l’accès réseau est restreint.
Conclusion
Il n'y a pour le moment pas de contournement idéal. Cependant, bien que la documentation Microsoft indique le contraire, il semblerait qu'il soit possible de tirer (pull) une image Linux via une Azure Web App depuis un Azure Container Registry en ajoutant dans les appsettings :
WEBSITE_PULL_IMAGE_OVER_VNET=true
C'est un début.
Dans la série
- Chapitre 2 : Azure Container Instance et Windows dans votre Vnet
- Chapitre 3 : Les firewall et les régions Azure
Références
- Déployer des instance de conteneur dans un réseau virtuel Azure
- Connexion privée à un registre de conteneurs Azure à l’aide d’Azure Private Link
- Restreindre l’accès à un registre de conteneurs à l’aide d’un point de terminaison de service dans un réseau virtuel Azure
- Deploying Linux custom container from private Azure Container Registry
- ACR with private endpoint - Web Apps
Remerciements
- Etienne Louise : pour la relecture
- David Dubourg : pour la relecture
- Laurent Mondeil : pour la relecture
Rédigé par Philippe MORISSEAU, Publié le 06 Septembre 2021