Géoréplication dans Azure Container Registry

Les entreprises qui souhaitent une présence locale ou une sauvegarde à chaud choisissent d’exécuter des services depuis plusieurs régions Azure. La meilleure pratique recommandée consiste à placer un registre de conteneurs dans chaque région où les images sont exécutées afin de permettre des opérations à proximité du réseau pour des transferts de calque d’image rapides et fiables. La géoréplication permet à un registre de conteneurs Azure Container Registry de fonctionner comme un seul registre, en prenant en charge plusieurs régions avec des registres régionaux primaires multiples.

Un registre géorépliqué offre les avantages suivants :

  • Noms de registre, d’image et d’étiquette uniques utilisables dans plusieurs régions
  • Amélioration des performances et de la fiabilité des déploiements régionaux avec un accès au registre en réseau
  • Réduction des coûts de transfert de données en extrayant des couches d’images d’un registre local répliqué dans la même région ou dans une région proche de celle où se trouve votre conteneur
  • Gestion unique d’un registre dans plusieurs régions
  • Résilience du registre en cas de panne régionale

Notes

  • Si vous devez conserver les copies des images de conteneur dans plusieurs registres de conteneurs Azure, Azure Container Registry prend également en charge l'importation d'images. Par exemple, dans un flux de travail DevOps, vous pouvez importer une image entre un registre de développement et un registre de production sans devoir utiliser les commandes Docker.
  • Si vous souhaitez déplacer un registre vers une autre région Azure plutôt que géorépliquer le registre, consultez Déplacer manuellement un registre de conteneurs vers une autre région.

Prérequis

  • L’utilisateur a besoin des autorisations suivantes (au niveau du registre) pour créer/supprimer des réplications :

    Autorisation Description
    Microsoft.ContainerRegistry/registries/write Créez une réplication
    Microsoft.ContainerRegistry/registries/replications/write Supprimer une réplication

Exemple de cas d’usage

Contoso dispose d’un site web de présence publique situé aux États-Unis, au Canada et en Europe. Pour alimenter ces marchés avec du contenu local et à proximité du réseau, Contoso exécute des clusters Azure Kubernetes Service (AKS) dans les régions USA Ouest, USA Est, Canada Centre et Europe Ouest. Déployée en tant qu’image Docker, l’application de site web utilise le même code et la même image dans toutes les régions. Le contenu, local pour cette région, est récupéré depuis une base de données approvisionnée de façon unique dans chaque région. Chaque déploiement régional possède sa propre configuration unique pour les ressources, telles que la base de données locale.

L’équipe de développement se trouve à Seattle, dans l’État de Washington, et utilise le centre de données de la région USA Ouest.

Transmission vers plusieurs registres
Transmission vers plusieurs registres

Avant d’utiliser les fonctionnalités de géoréplication, Contoso disposait d’un registre basé dans la région USA Ouest et d’un autre registre dans Europe Ouest. Pour gérer ces différentes régions, l’équipe de développement devait envoyer (push) des images à deux registres différents.

docker push contoso.azurecr.io/public/products/web:1.2
docker push contosowesteu.azurecr.io/public/products/web:1.2

Extraction à partir de plusieurs registres
Extraction à partir de plusieurs registres

Voici les principaux défis liés à l’utilisation de plusieurs registres :

  • Tous les clusters (USA Est, USA Ouest et Canada Centre) extraient leurs données à partir du registre de la région USA Ouest. Cette opération génère des frais de sortie puisque chacun de ces hôtes de conteneur à distance extrait des images à partir de centres de données situés dans la région USA Ouest.
  • L’équipe de développement doit transmettre les images aux registres des région USA Ouest et Europe Ouest.
  • L’équipe de développement doit configurer et tenir à jour chaque déploiement régional avec les noms d’images référençant le registre local.
  • L’accès au registre doit être configuré pour chaque région.

Avantages de la géoréplication

Extraction à partir d’un registre géorépliqué

La fonctionnalité de géoréplication d’Azure Container Registry dispose des avantages suivants :

  • Gérer un registre unique dans toutes les régions : contoso.azurecr.io
  • Gérer une configuration unique pour le déploiement des images, car toutes les régions utilisent la même URL d’image : contoso.azurecr.io/public/products/web:1.2
  • Envoyer (push) vers un registre unique tandis qu’ACR gère automatiquement la géoréplication. ACR réplique uniquement les couches uniques, ce qui réduit le transfert de données entre les régions.
  • Configurez des webhooks régionaux pour vous avertir des événements dans des réplicas spécifiques.
  • Fournissez un registre hautement disponible qui résiste aux pannes régionales.

Azure Container Registry prend également en charge les zones de disponibilité pour créer un registre de conteneurs Azure résilient et à haute disponibilité dans une région Azure. La combinaison de zones de disponibilité pour la redondance au sein d’une région et de la géoréplication dans plusieurs régions améliore la fiabilité et les performances d’un registre.

Configuration de la géo-réplication

La configuration de la géoréplication est aussi simple que de cliquer sur des régions sur une carte. Vous pouvez également gérer la géoréplication à l’aide d’outils, notamment des commandes az acr replication dans Azure CLI, ou déployer un registre activé pour la géoréplication avec un modèle Azure Resource Manager.

La géoréplication est une fonctionnalité disponible pour les registres Premium. Si votre registre n’est pas encore Premium, vous pouvez passer de la formule De base ou Standard à Premium dans le portail Azure :

Basculement de niveaux de service dans le portail Azure

Pour configurer la géoréplication pour votre registre Premium, connectez-vous au Portail Azure.

Accédez à votre registre de conteneurs Azure, puis sélectionnez Réplications :

Option Réplications du registre de conteneurs dans le portail Azure

Une carte s’affiche et indique toutes les régions Azure actuelles :

Carte des régions dans le portail Azure

  • Les hexagones bleus représentent les réplicas actuels.
  • Les hexagones verts représentent des régions où le réplica est possible.
  • Les hexagones gris représentent des régions Azure qui ne sont pas encore disponibles pour les réplicas.

Pour configurer un réplica, sélectionnez un hexagone vert, puis cliquez sur Créer :

Boîte de dialogue Créer une réplication dans le portail Azure

Pour configurer des réplicas supplémentaires, sélectionnez les hexagones verts pour les autres régions, puis cliquez sur Créer.

ACR commence la synchronisation des images entre les réplicas configurés. Une fois l’opération terminée, le portail affiche la mention Prêt. L’état du réplica dans le portail n’est pas mis à jour automatiquement. Utilisez le bouton Actualiser pour le mettre à jour.

Considérations sur l’utilisation d’un registre géorépliqué

  • Chaque région d’un registre géorépliqué est indépendante une fois configurée. Le contrat SLA d’Azure Container Registry s’applique à chaque région géorépliquée.
  • Pour chaque opération d’extraction ou d’envoi (push) d’image sur un registre géorépliqué, Azure Traffic Manager en arrière-plan envoie une requête à l’emplacement de registre le plus proche dans la région pour maintenir la latence réseau.
  • Une fois que vous avez envoyé (push) la mise à jour d’une image ou d’une étiquette à la région la plus proche, un certain temps est nécessaire à Azure Container Registry pour répliquer les manifestes et les couches vers les régions restantes que vous avez choisies. La réplication des grandes images prend plus de temps que celle des plus petites. Les images et les étiquettes sont synchronisées entre les régions de réplication avec un modèle de cohérence à terme.
  • Pour gérer des flux de travail qui dépendent de mises à jour d’envoi (push) vers un registre géorépliqué, nous vous recommandons de configurer des webhooks pour répondre aux événements d’envoi. Vous pouvez configurer des webhooks régionaux dans un registre géorépliqué pour effectuer le suivi des événements d’envoi (push) au fil de leur occurrence dans les régions géorépliquées.
  • Pour servir les blobs représentant des couches de contenu, Azure Container Registry utilise des points de terminaison de données. Vous pouvez activer des points de terminaison de données dédiés pour votre registre dans chacune des régions géorépliquées de votre registre. Ces points de terminaison permettent de configurer des règles d’accès au pare-feu très précises. À des fins de résolution des problèmes, vous pouvez éventuellement désactiver le routage vers une réplication tout en conservant les données répliquées.
  • Si vous configurez une liaison privée pour votre registre à l’aide de points de terminaison privés dans un réseau virtuel, les points de terminaison de données dédiés de chacune des régions géorépliquées sont activés par défaut.

Considérations relatives à la haute disponibilité

  • Pour une disponibilité et une résilience élevées, nous recommandons de créer un registre dans une région qui prend en charge l’activation de la redondance de zone. L’activation de la redondance de zone dans chaque région de réplica est également recommandée.
  • Si une panne se produit dans la région d’origine du registre (la région où il a été créé) ou dans l’une de ses régions de réplication, un registre géo-répliqué reste disponible pour les opérations de plan de données comme l’envoi ou l’extraction d’images de conteneur.
  • Si la région d’hébergement du registre devient indisponible, il se peut que vous ne puissiez pas effectuer les opérations de gestion du registre, notamment la configuration des règles de réseau, l’activation des zones de disponibilité et la gestion des réplicas.
  • Pour planifier la haute disponibilité d’un registre géorépliqué chiffré avec une clé managée par le client stockée dans Azure Key Vault, passez en revue les conseils relatifs au basculement et à la redondance de Key Vault.

Supprimer un réplica

Une fois que vous avez configuré un réplica pour votre registre, vous pouvez le supprimer à tout moment s’il n’est plus nécessaire. Supprimez un réplica à l’aide du portail Azure ou d’autres outils, tels que la commande az acr replication delete dans Azure CLI.

Pour supprimer un réplica dans le portail Azure :

  1. Accédez à votre registre Azure Container Registry, puis sélectionnez Réplications.
  2. Sélectionnez le nom d’un réplica, puis sélectionnez Supprimer. Confirmez que vous souhaitez supprimer le réplica.

Pour utiliser Azure CLI afin de supprimer un réplica de myregistry dans la région USA Est :

az acr replication delete --name eastus --registry myregistry

Tarification de la géoréplication

La géoréplication est une fonctionnalité du niveau de service Premium d’Azure Container Registry. Lorsque vous répliquez un registre dans les régions de votre choix, cela entraîne des frais de registre Premium pour chaque région.

Dans l’exemple précédent, Contoso a fusionné deux registres en un seul, en ajoutant des réplicas dans les régions USA Est, Canada Centre et Europe Ouest. Contoso payerait le tarif Premium quatre fois par mois, sans configuration ni gestion supplémentaire. Chaque région extrait maintenant ses images localement, ce qui améliore les performances et la fiabilité sans frais de sortie de réseau de la région USA Ouest au Canada et à la région USA Est.

Résoudre les problèmes d’opérations Push avec des registres géorépliqués

Un client Docker qui transmet une image à un registre géorépliqué peut ne pas envoyer toutes les couches d’images et le manifeste associé à une seule région répliquée. Cela peut se produire car Azure Traffic Manager route les demandes de registre vers le registre répliqué le plus proche du réseau. Si le registre a deux régions de réplication proches, les couches d’image et le manifeste peuvent être distribués aux deux sites, et l’opération Push échoue lors de la validation du manifeste. Ce problème se produit en raison de la façon dont le nom DNS du registre est résolu sur certains hôtes Linux. Ce problème ne se produit pas sur Windows, qui fournit un cache DNS côté client.

Si ce problème se produit, une solution consiste à appliquer un cache DNS côté client, par exemple dnsmasq sur l’hôte Linux. Cela permet de garantir que le nom du registre est résolu de manière cohérente. Si vous utilisez une machine virtuelle Linux dans Azure pour effectuer une transmission de type push vers un registre, consultez Options de résolution de noms DNS pour les machines virtuelles Linux dans Azure.

Pour optimiser la résolution DNS sur le réplica le plus proche lors de la transmission par push d’images, configurez un registre géorépliqué dans les mêmes régions Azure que la source des opérations Push, ou la région la plus proche si vous travaillez en dehors d’Azure.

Désactiver temporairement le routage vers une réplication

Pour résoudre les problèmes des opérations avec un registre géorépliqué, vous pouvez désactiver temporairement le routage Traffic Manager vers une ou plusieurs réplications. Depuis Azure CLI version 2.8, vous pouvez configurer une option --region-endpoint-enabled (préversion) quand vous créez ou mettez à jour une région répliquée. Lorsque vous affectez à l’option --region-endpoint-enabled d’une réplication la valeur false, Traffic Manager ne route plus les demandes d’envoi (push) ni de tirage (pull) de Docker vers cette région. Par défaut, le routage vers toutes les réplications est activé et la synchronisation des données entre celles-ci a lieu, que le routage soit activé ou désactivé.

Pour désactiver le routage vers une réplication existante, exécutez d’abord az acr replication list pour lister les réplications dans le registre. Ensuite, exécutez az acr replication update et définissez --region-endpoint-enabled false pour une réplication spécifique. Par exemple, pour configurer le paramètre de la réplication westus dans myregistry :

# Show names of existing replications
az acr replication list --registry --output table

# Disable routing to replication
az acr replication update --name westus \
  --registry myregistry --resource-group MyResourceGroup \
  --region-endpoint-enabled false

Pour restaurer le routage vers une réplication :

az acr replication update --name westus \
  --registry myregistry --resource-group MyResourceGroup \
  --region-endpoint-enabled true

Création d’une réplication pour un registre avec point de terminaison privé

Lors de la création d’une réplication de registre pour le registre principal activé avec un point de terminaison privé, nous vous recommandons de confirmer que l’identité de l’utilisateur dispose d’autorisations valides de création de point de terminaison privé. Sinon, l’opération est bloquée dans l’état d’approvisionnement lors de la création de la réplication.

Suivez les étapes ci-dessous si vous êtes bloqué dans l’état d’approvisionnement lors de la création de la réplication du registre :

  • Supprimez manuellement la réplication bloquée dans l’état d’approvisionnement.
  • Ajoutez l’autorisation Microsoft.Network/privateEndpoints/privateLinkServiceProxies/write pour l’identité de l’utilisateur.
  • Recréez la demande de réplication du registre.

Cette vérification d’autorisation s’applique uniquement aux registres avec un point de terminaison privé activé.

Étapes suivantes

Découvrez la série de didacticiels en trois parties relative à la géoréplication dans Azure Container Registry. Découvrez les étapes permettant de créer un registre géorépliqué, de générer un conteneur, puis de le déployer avec une seule commande docker push vers plusieurs instances régionales de Web App pour conteneurs.