Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce didacticiel explique comment utiliser GitOps dans un cluster Kubernetes. GitOps avec ArgoCD est activé en tant qu’extension de cluster dans les clusters Kubernetes avec Azure Arc ou les clusters AKS (Azure Kubernetes Service). Avec GitOps, vous pouvez utiliser votre référentiel git comme source de vérité pour la configuration du cluster et le déploiement d’applications.
Important
GitOps avec ArgoCD 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. Pour la prise en charge de l’extension GitOps de production, essayez l’extension GitOps à l’aide de Flux.
Conseil / Astuce
Bien que la source de ce didacticiel soit un dépôt Git, ArgoCD prend en charge d’autres sources de fichiers courantes telles que les référentiels Helm et Open Container Initiative (OCI).
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
Un cluster Kubernetes connecté à Azure Arc qui est en cours d’exécution.
Découvrez comment connecter un cluster Kubernetes à Azure Arc. Si vous devez vous connecter via un proxy sortant, veillez à installer les agents Arc avec les paramètres de proxy.
Autorisations de lecture et d’écriture sur le groupe de ressources
Microsoft.Kubernetes/connectedClusters
.
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écutezaz 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 commandeaz 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
Support des versions et des régions
GitOps est actuellement pris en charge dans toutes les régions prises en charge par Kubernetes avec Azure Arc. GitOps est actuellement pris en charge dans un sous-ensemble des régions prises en charge par AKS. Le service GitOps ajoute de nouvelles régions prises en charge sur une cadence régulière.
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 (ArgoCD) (installation simple)
L’installation GitOps ArgoCD prend en charge le mode multi-locataires en haute disponibilité (HA) et l’identité de charge de travail.
Important
Le mode haute disponibilité est la configuration par défaut et nécessite trois nœuds dans le cluster pour être en mesure d’installer. La commande ci-dessous ajoute --config deployWithHighAvailability=false
pour installer l'extension sur un seul nœud.
Cette commande crée la configuration la plus simple qui installe les composants ArgoCD 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 ArgoCD dans n’importe quel espace de noms répertorié dans la configuration de configmap ArgoCD 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 \
--auto-upgrade false \
--release-train preview \
--version 0.0.7-preview \
--config deployWithHightAvailability=false \
--config namespaceInstall=false \
--config "config-maps.argocd-cmd-params-cm.data.application\.namespaces=namespace1,namespace2"
Si vous souhaitez limiter l'accès ArgoCD à un espace de noms spécifique, utilisez --config namespaceInstall=true
avec les paramètres --target-namespace <namespace>
. Cette commande d’installation crée un espace de noms <namespace>
et installe les composants ArgoCD dans le <namespace>
. La commande d’installation permet également d’installer plusieurs instances d’ArgoCD dans le même cluster. Définitions d’application ArgoCD dans cette configuration fonctionnent uniquement dans l’espace de noms <namespace>
.
Créer une extension GitOps (ArgoCD) avec l’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’ArgoCD.
Important
Le mode haute disponibilité est la configuration par défaut et nécessite trois nœuds dans le cluster pour être en mesure d’installer. Ajoutez --config deployWithHighAvailability=false
pour 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-Microsoft 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'
autoUpgradeMinorVersion: false
releaseTrain: 'preview'
version: '0.0.7-preview'
configurationSettings: {
'workloadIdentity.enable': 'true'
'workloadIdentity.clientId': workloadIdentityClientId
'workloadIdentity.entraSSOClientId': ssoWorkloadIdentityClientId
'config-maps.argocd-cm.data.oidc\\.config': oidcConfig
'config-maps.argocd-cm.data.url': url
'config-maps.argocd-rbac-cm.data.policy\\.default': defaultPolicy
'config-maps.argocd-rbac-cm.data.policy\\.csv': policy
'config-maps.argocd-cmd-params-cm.data.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>
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. ssoWorkloadIdentityClientId
est utilisé pour l’authentification de l’interface utilisateur ArgoCD, et workloadIdentityClientId
est utilisé pour l’identité de la charge de travail pour les composants d'ArgoCD. 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 ArgoCD. 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. Dans ce cas, la règle d’entrée doit être ajoutée à l’interface utilisateur ArgoCD 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
variable correspond aux argocd-rbac-cm configmap
paramètres d’ArgoCD. 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 ArgoCD. 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 :
Récupérez l’URL de l’émetteur OIDC pour votre cluster AKS ou votre cluster Kubernetes avec Arc.
Créez une identité managée et notez son ID client et son ID de locataire.
É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 system:serviceaccount:"argocd":"source-controller" --audience api://AzureADTokenExchange
Veillez à fournir les autorisations appropriées pour l’identité de charge de travail pour la ressource que vous souhaitez que le contrôleur source-contrôleur ou le contrôleur de réflexion d’image extrait. Par exemple, si vous utilisez Azure Container Registry, assurez-vous que soit
Container Registry Repository Reader
(pour les registres compatibles ABAC), soitAcrPull
(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 ArgoCD 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 d’ArgoCD
S’il n’existe aucun contrôleur d’entrée existant pour le cluster AKS, l’interface utilisateur ArgoCD peut être exposée directement à l’aide d’un service LoadBalancer. La commande suivante expose l’interface utilisateur ArgoCD 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 ArgoCD
Maintenant que l’extension ArgoCD est installée, vous pouvez déployer une application à l’aide de l’interface utilisateur d’ArgoCD ou de l’interface CLI. L’exemple suivant utilise tout simplement kubectl apply
pour déployer le stockage AKS à l’intérieur d’une application ArgoCD dans le projet ArgoCD 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 pets
. Consultez la page web de l’application en suivant ces instructions. Veillez à visiter l’adresse IP à l’aide de http et non https.
Mettre à jour la configuration de l’extension
Les configmaps ArgoCD 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 Microsoft.ArgoCD –-config "config-maps.argocd-cm.data.url='https://<public-ip-for-argocd-ui>/auth/callback'”
Il est important de mettre à jour le configmap ArgoCD via l’extension, afin que les paramètres ne soient pas remplacés. L’application du modèle Bicep est une méthode alternative à az 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 OSS ArgoCD à l’aide du mode Backstage et de Cluster API Provider for Azure (CAPZ) ou Crossplane.