Tutoriel : Déployer des applications à l’aide de GitOps avec Argo CD

Ce tutoriel explique comment utiliser GitOps avec Argo CD dans des clusters Kubernetes avec Azure Arc ou des clusters Azure Kubernetes Service (AKS). GitOps avec Argo CD est activé en tant qu’extension de cluster qui vous permet d’utiliser votre dépôt Git comme source de vérité pour la configuration du cluster et le déploiement d’applications. Argo CD prend également en charge d’autres sources de fichiers courantes, telles que les référentiels Helm et Open Container Initiative (OCI).

Note

À partir de la version 1.0.0-preview, l’extension Argo CD utilise le chart Helm communautaire. Cette modification est un changement radical, car les clés de configuration ont changé. Si vous avez installé une version précédente (0.0.x) de l’extension, désinstallez l’extension et réinstallez la dernière version avec les clés de configuration mises à jour.

Important

GitOps avec Argo CD est actuellement en préversion. Consultez les Conditions d’utilisation supplémentaires pour les préversions Microsoft Azure pour les conditions légales qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou qui ne sont pas encore publiées en disponibilité générale.

Conditions préalables

Pour déployer des applications à l’aide de GitOps, vous avez besoin d’un cluster Kubernetes avec Azure Arc ou d’un cluster AKS.

Clusters Kubernetes activés par Azure Arc

Clusters Azure Kubernetes Service

  • Un cluster AKS basé sur une identité de service managée (MSI) qui est en cours d’exécution.

    Important

    Le cluster AKS doit être créé avec Managed Service Identity (MSI), et non avec le nom principal du service (SPN), pour que cette extension fonctionne. Pour les nouveaux clusters AKS créés avec az aks create, le cluster est basé sur MSI par défaut. Pour convertir des clusters spN en MSI, exécutez az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Pour plus d’informations, consultez Utiliser une identité managée dans AKS.

  • Autorisations de lecture et d’écriture sur le groupe de ressources Microsoft.ContainerService/managedClusters.

Commun aux deux types de cluster

  • Autorisations de lecture et d’écriture sur ces types de ressources :

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI, version 2.15 ou ultérieure. Installez Azure CLI ou utilisez les commandes suivantes pour effectuer une mise à jour vers la dernière version :

    az version
    az upgrade
    
  • Le client de ligne de commande Kubernetes, kubectl. kubectl est déjà installé si vous utilisez Azure Cloud Shell.

    Installez kubectl en local avec la commande az aks install-cli :

    az aks install-cli
    
  • Inscription des fournisseurs de ressources Azure suivants :

    az provider register --namespace Microsoft.Kubernetes
    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.KubernetesConfiguration
    

    L’inscription est un processus asynchrone qui doit se terminer dans un délai de 10 minutes. Pour superviser le processus d’inscription, utilisez la commande suivante :

    az provider show -n Microsoft.KubernetesConfiguration -o table
    
    Namespace                          RegistrationPolicy    RegistrationState
    ---------------------------------  --------------------  -------------------
    Microsoft.KubernetesConfiguration  RegistrationRequired  Registered
    

Conseil / Astuce

Bien que la source de ce didacticiel soit un référentiel Git, Argo CD prend en charge d’autres sources de fichiers courantes telles que les référentiels Helm et Open Container Initiative (OCI).

Support des versions et des régions

GitOps est actuellement pris en charge dans les régions publiques.

Configuration réseau requise

Les agents GitOps nécessitent le protocole TCP sortant (sortie) vers la source du référentiel sur le port 22 (SSH) ou le port 443 (HTTPS) pour fonctionner. Les agents requièrent également accès aux URL sortantes suivantes :

Point de terminaison (DNS) Descriptif
https://management.azure.com Requis pour que l’agent communique avec le service de configuration Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Point de terminaison du plan de données permettant à l’agent d’envoyer (push) le statut et de récupérer (fetch) les informations de configuration. Dépend de <region> (les régions prises en charge mentionnées précédemment).
https://login.microsoftonline.com Requis pour extraire et mettre à jour des jetons Azure Resource Manager.
https://mcr.microsoft.com Requis pour extraire des images de conteneur pour les contrôleurs.

Activer les extensions CLI

Installez les derniers packages d’extension CLI k8s-configuration et k8s-extension :

az extension add -n k8s-configuration
az extension add -n k8s-extension

Pour mettre à jour ces packages vers les dernières versions :

az extension update -n k8s-configuration
az extension update -n k8s-extension

Pour afficher une liste des extensions Azure CLI installées et leurs versions, utilisez la commande suivante :

az extension list -o table

Experimental   ExtensionType   Name                   Path                                                       Preview   Version
-------------  --------------  -----------------      -----------------------------------------------------      --------  --------
False          whl             connectedk8s           C:\Users\somename\.azure\cliextensions\connectedk8s         False     1.10.7
False          whl             k8s-configuration      C:\Users\somename\.azure\cliextensions\k8s-configuration    False     2.2.0
False          whl             k8s-extension          C:\Users\somename\.azure\cliextensions\k8s-extension        False     1.6.4

Créer une extension GitOps (Argo CD) (installation simple)

L’installation GitOps Argo CD prend en charge la multi-location en mode haute disponibilité (HA) et prend en charge l’identité de charge de travail.

Important

Le mode haute disponibilité est la configuration par défaut et nécessite quatre nœuds dans le cluster pour être en mesure d’installer. La commande ci-dessous ajoute --config "redis-ha.enabled=false" pour installer l'extension sur un seul nœud.

Cette commande crée la configuration la plus simple qui installe les composants Argo CD dans un nouvel argocd espace de noms avec un accès à l’échelle du cluster. L’accès à l’échelle du cluster permet de détecter les définitions d’application Argo CD dans n’importe quel espace de noms répertorié dans la configuration de configmap Argo CD dans le cluster. Par exemple : namespace1,namespace2

az k8s-extension create --resource-group <resource-group> --cluster-name <cluster-name> \
--cluster-type managedClusters \
--name argocd \
--extension-type Microsoft.ArgoCD \
--config "redis-ha.enabled=false" \
--config "configs.params.application\.namespaces=namespace1,namespace2"

Cette commande d’installation crée un <namespace> namespace et installe les composants Argo CD dans le <namespace>. Les définitions d'applications Argo CD dans cette configuration fonctionnent uniquement dans l'espace de nom <namespace>.

Note

Pour obtenir des options de configuration supplémentaires, telles que des limites de ressources, consultez values.yaml. Utilisez ces configurations dans votre commande Azure CLI lors de la configuration de l’extension.

Créer une extension GitOps (Argo CD) avec une identité de charge de travail

Une autre méthode d’installation recommandée pour l’utilisation de la production est l’identité de la charge de travail. Cette méthode vous permet d’utiliser des identités d’ID Microsoft Entra pour vous authentifier auprès des ressources Azure sans avoir à gérer les secrets ou les informations d’identification dans votre dépôt Git. Cette installation utilise l’authentification des identités de charge de travail activée dans la version 3.0.0-rc2 ou ultérieure d’Argo CD.

Important

Le mode haute disponibilité est la configuration par défaut et nécessite quatre nœuds dans le cluster pour être en mesure d’installer. Permet 'redis-ha.enabled': false d’installer l’extension sur un seul nœud.

Pour créer l’extension avec l’identité de charge de travail, remplacez d’abord les variables suivantes par vos propres valeurs dans ce modèle Bicep :

var clusterName = '<aks-or-arc-cluster-name>'

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoWorkloadIdentityClientId = 'replace-me##-##-###-###'

var url = 'https://<public-ip-for-argocd-ui>/'
var oidcConfig = '''
name: Azure
issuer: https://login.microsoftonline.com/<your-tenant-id>/v2.0
clientID: <same-value-as-ssoWorkloadIdentityClientId-above>
azure:
  useWorkloadIdentity: true
requestedIDTokenClaims:
  groups:
    essential: true
requestedScopes:
  - openid
  - profile
  - email
'''

var defaultPolicy = 'role:readonly'
var policy = '''
p, role:org-admin, applications, *, */*, allow
p, role:org-admin, clusters, get, *, allow
p, role:org-admin, repositories, get, *, allow
p, role:org-admin, repositories, create, *, allow
p, role:org-admin, repositories, update, *, allow
p, role:org-admin, repositories, delete, *, allow
g, replace-me##-argocd-ui-entra-group-admin-id, role:org-admin
'''

resource cluster 'Microsoft.ContainerService/managedClusters@2024-10-01' existing = {
  name: clusterName
}

resource extension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
  name: 'argocd'
  scope: cluster
  properties: {
    extensionType: 'Microsoft.ArgoCD'
    configurationSettings: {
      'redis-ha.enabled': 'true'
      'azure.workloadIdentity.enabled': 'true'
      'azure.workloadIdentity.clientId': workloadIdentityClientId
      'azure.workloadIdentity.entraSSOClientId': ssoWorkloadIdentityClientId
      'configs.cm.oidc\\.config': oidcConfig
      'configs.cm.url': url
      'configs.rbac.policy\\.default': defaultPolicy
      'configs.rbac.policy\\.csv': policy
      'configs.params.application\\.namespaces': 'default, argocd'
   }
  }
}

Le modèle Bicep peut être créé à l’aide de cette commande :

az deployment group create --resource-group <resource-group> --template-file <bicep-file>

Note

Pour obtenir des options de configuration supplémentaires, telles que des limites de ressources, consultez values.yaml. Utilisez ces configurations dans le modèle Bicep lors de la configuration de l’extension.

Paramètres

clusterName est le nom du cluster Kubernetes activé par AKS ou Arc.

workloadIdentityClientId et ssoWorkloadIdentityClientId sont les ID client de l’identité managée souhaitée pour l’identité de charge de travail. Il ssoWorkloadIdentityClientId est utilisé pour l’authentification de l’interface utilisateur Argo CD et il workloadIdentityClientId est utilisé pour l’identité de charge de travail pour les composants Argo CD. Visitez l’authentification d’inscription d’application Microsoft Entra ID à l’aide d’OIDC pour plus d’informations sur l’installation et la configuration générales de ssoWorkloadIdentityClientId.

url est l’adresse IP publique de l’interface utilisateur Argo CD. Il n’existe pas d’adresse IP publique ou de nom de domaine, sauf si le cluster dispose déjà d’un contrôleur d’entrée fourni par un client. Si c’est le cas, la règle d’entrée doit être ajoutée à l’interface utilisateur Argo CD après le déploiement.

oidcConfig - remplacez <your-tenant-id> par l’ID de locataire de votre ID Microsoft Entra. Remplacez <same-value-as-ssoWorkloadIdentityClientId-above> par la même valeur que ssoWorkloadIdentityClientId.

policy La variable argocd-rbac-cm configmap correspond aux paramètresd’Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id est l’ID de groupe Microsoft Entra qui donne à l’administrateur l’accès à l’interface utilisateur Argo CD. L’ID de groupe Microsoft Entra se trouve dans le portail Azure sous Microsoft Entra ID > Groups >your-group-name> Properties. Vous pouvez utiliser l’ID d’utilisateur Microsoft Entra au lieu d’un ID de groupe Microsoft Entra. L’ID d’utilisateur Microsoft Entra se trouve dans le portail Azure sous Microsoft Entra ID > Users >your-user-name> Properties.

Créer des informations d’identification de la charge de travail

Pour configurer de nouveaux identifiants d'identité de charge de travail, procédez comme suit :

  1. Récupérez l’URL de l’émetteur OIDC pour votre cluster AKS ou votre cluster Kubernetes avec Arc.

  2. Créez une identité managée et notez son ID client et son ID de locataire.

  3. Établissez des informations d’identification d’identité fédérées pour votre cluster AKS ou votre cluster Kubernetes avec Arc. Par exemple:

    # For source-controller
    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${OIDC_ISSUER}" --subject 
    
  4. Assurez-vous de fournir les autorisations appropriées pour l’identité de charge de travail de la ressource que vous souhaitez que ArgoCD, le contrôleur image-reflector ou le serveur argocd-repo-server utilise pour effectuer le pull. Par exemple, si vous utilisez Azure Container Registry, assurez-vous que soit Container Registry Repository Reader (pour les registres compatibles ABAC), soit (pour les registres non ABAC) ait été appliqué.

Se connecter à des registres ACR privés ou à des référentiels ACR à l’aide de l’identité de charge de travail

Pour utiliser le registre ACR privé ou les référentiels ACR, suivez les instructions de la documentation officielle d’Argo CD pour la connexion à des registres ACR privés. L’étiquette des pods, Créer des informations d’identification fédérée etAjouter une annotation aux étapes du compte de service dans ce guide ont été effectuées par l’extension lors du déploiement de Bicep et peuvent être ignorées.

Accéder à l’interface utilisateur Argo CD

S’il n’existe aucun contrôleur d’entrée existant pour le cluster AKS, l’interface utilisateur Argo CD peut être exposée directement à l’aide d’un service LoadBalancer. La commande suivante expose l’interface utilisateur Argo CD sur le port 80 et 443.

kubectl -n argocd expose service argocd-server --type LoadBalancer --name argocd-server-lb --port 80 --target-port 8080

Déployer une application Argo CD

Maintenant que l’extension Argo CD est installée, vous pouvez déployer une application à l’aide de l’interface utilisateur ou de l’interface CLI Argo. L'exemple suivant utilise simplement kubectl apply pour déployer le magasin AKS dans une application Argo CD sur le projet Argo CD par défaut dans l'espace de noms argocd.

kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: aks-store-demo
  namespace: argocd
spec:
  project: default
  source:    
      repoURL: https://github.com/Azure-Samples/aks-store-demo.git
      targetRevision: HEAD
      path: kustomize/overlays/dev
  syncPolicy:
      automated: {}
  destination:
      namespace: argocd
      server: https://kubernetes.default.svc
EOF

L’application de démonstration du magasin AKS a été installée dans l’espace de noms argocd. Consultez la page web de l’application en suivant ces instructions. Veillez à visiter l’adresse IP à l’aide http et non https.

Mettre à jour la configuration de l’extension

Les configmaps Argo CD peuvent être mis à jour après l’installation et d’autres paramètres de configuration d’extension à l’aide de la commande suivante :

az k8s-extension update --resource-group <resource-group> --cluster-name <cluster-name> --cluster-type <cluster-type> --name argocd --config "configs.cm.url='https://<public-ip-for-argocd-ui>/auth/callback'"

Mettez à jour le configmap Argo CD via l’extension, afin que les paramètres ne soient pas remplacés. L’application du modèle Bicep est une autre méthode à l’utilisation d’Azure CLI pour mettre à jour la configuration.

Supprimer l’extension

Utilisez les commandes suivantes pour supprimer l’extension.

az k8s-extension delete -g <resource-group> -c <cluster-name> -n argocd -t managedClusters --yes

Étapes suivantes

  • Problèmes de fichier et demandes de fonctionnalités sur le référentiel Azure/AKS et veillez à inclure le mot « ArgoCD » dans la description ou le titre.
  • Explorez l’exemple de code d’ingénierie AKS-Platform, qui déploie Argo CD OSS avec Backstage et Cluster API Provider pour Azure (CAPZ) ou Crossplane.