Condividi tramite


Esercitazione: Distribuire applicazioni usando GitOps con Argo CD

Questa esercitazione descrive come usare GitOps con Argo CD nei cluster Kubernetes abilitati per Azure Arc o nei cluster del servizio Azure Kubernetes. GitOps con Argo CD è abilitato come estensione del cluster che consente di utilizzare il repository Git come fonte autorevole per la configurazione del cluster e la distribuzione delle applicazioni. Argo CD supporta anche altre origini di file comuni, ad esempio repository Helm e Open Container Initiative (OCI).

Annotazioni

A partire dalla versione 1.0.0-preview, l'estensione Argo CD utilizza il chart Helm della comunità. Si tratta di una modifica di rilievo perché le chiavi di configurazione sono state modificate. Se è stata installata una versione precedente (0.0.x) dell'estensione, disinstallare l'estensione e reinstallare la versione più recente con le chiavi di configurazione aggiornate.

Importante

GitOps con Argo CD è attualmente disponibile in ANTEPRIMA. Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale. Per il supporto dell'estensione GitOps di produzione, provare l'estensione GitOps usando Flux.

Prerequisiti

Per distribuire applicazioni con GitOps, ti serve un cluster Kubernetes abilitato per Azure Arc o un cluster AKS.

Cluster Kubernetes abilitato per Azure Arc

Cluster del servizio Azure Kubernetes

  • Un cluster del servizio Azure Kubernetes basato su MSI in esecuzione.

    Importante

    Per il funzionamento di questa estensione, è necessario creare il cluster AKS con Managed Service Identity (MSI), non con Service Principal Name (SPN). Per i nuovi cluster del servizio Azure Kubernetes creati con az aks create, il cluster è basato su MSI per impostazione predefinita. Per convertire cluster basati su SPN in MSI, eseguire az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Per ulteriori informazioni, vedere Utilizzare un'identità gestita in AKS.

  • Autorizzazioni di lettura e scrittura per il tipo di risorsa Microsoft.ContainerService/managedClusters.

Comune a entrambi i tipi di cluster

  • Autorizzazioni di lettura e scrittura per questi tipi di risorsa:

    • Microsoft.KubernetesConfiguration/extensions
  • Interfaccia della riga di comando di Azure 2.15 o versione successiva. Installare l'interfaccia della riga di comando di Azure o usare i comandi seguenti per eseguire l'aggiornamento alla versione più recente:

    az version
    az upgrade
    
  • Il client da riga di comando Kubernetes, kubectl. kubectl è già installato se si usa Azure Cloud Shell.

    Eseguire l'installazione kubectl in locale usando il comando az aks install-cli:

    az aks install-cli
    
  • Registrazione dei seguenti provider di risorse di Azure:

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

    La registrazione è un processo asincrono e terminerà entro 10 minuti. Usare il comando seguente per monitorare il processo di registrazione:

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

Suggerimento

Mentre la sorgente in questo tutorial è un repository Git, Argo CD supporta altre sorgenti di file comuni come i repository Helm e Open Container Initiative (OCI).

Supporto di versione e area geografica

GitOps è attualmente supportato in tutte le aree supportate da Kubernetes abilitato per Azure Arc. GitOps è attualmente supportato in un subset delle aree supportate dal servizio Azure Kubernetes. Il servizio GitOps aggiunge con cadenza regolare nuove aree supportate.

Requisiti di rete

Gli agenti GitOps richiedono TCP in uscita all'origine del repository sulla porta 22 (SSH) o sulla porta 443 (HTTPS) per funzionare. Richiedono anche l'accesso agli URL in uscita seguenti:

Endpoint (DNS) Descrizione
https://management.azure.com Obbligatorio per permettere all'agente di comunicare con il servizio Configurazione Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Endpoint del piano dati che consente all'agente di eseguire il push dello stato e recuperare le informazioni di configurazione. Dipende da <region> (le aree supportate indicate in precedenza).
https://login.microsoftonline.com Obbligatorio per recuperare e aggiornare i token di Azure Resource Manager.
https://mcr.microsoft.com Necessario per scaricare le immagini dei contenitori per i controller.

Abilitare le estensioni CLI

Installare i pacchetti di estensione dell'interfaccia della riga di comando di k8s-configuration e k8s-extension più recenti:

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

Per aggiornare questi pacchetti alle versioni più recenti:

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

Per visualizzare un elenco di tutte le estensioni dell'interfaccia della riga di comando di Azure installate e le relative versioni, usare il comando seguente:

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

Creare l'estensione GitOps (Argo CD) (installazione semplice)

L'installazione di GitOps Argo CD supporta la multi-tenancy in modalità a disponibilità elevata e supporta l'identità del carico di lavoro.

Importante

La modalità a disponibilità elevata è la configurazione predefinita e richiede la possibilità di installare quattro nodi nel cluster. Il comando seguente aggiunge --config "redis-ha.enabled=false" per installare l'estensione in un singolo nodo.

Questo comando crea la configurazione più semplice installando i componenti argo CD in un nuovo argocd spazio dei nomi con accesso a livello di cluster. L'accesso a livello di cluster consente di rilevare le definizioni di app Argo CD in qualsiasi spazio dei nomi elencato nella configurazione configmap di Argo CD nel cluster. Ad esempio: namespace1,namespace2

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

Questo comando di installazione crea un nuovo <namespace> cluster e installa i componenti di Argo CD in <namespace>. Le definizioni di applicazione Argo CD in questa configurazione funzionano solo nel namespace <namespace>.

Annotazioni

Per altre opzioni di configurazione, ad esempio i limiti delle risorse, vedere values.yaml. Usare queste configurazioni nel comando dell'interfaccia della riga di comando di Azure quando si configura l'estensione.

Creare l'estensione GitOps (Argo CD) con l'identità del carico di lavoro

Un metodo di installazione alternativo consigliato per l'uso in produzione è identità del carico di lavoro. Questo metodo consente di usare le identità ID di Microsoft Entra per eseguire l'autenticazione alle risorse di Azure senza dover gestire segreti o credenziali nel repository Git. Questa installazione usa l'autenticazione dell'identità del carico di lavoro abilitata nella versione 3.0.0-rc2 o successiva di OSS di Argo CD.

Importante

La modalità a disponibilità elevata è la configurazione predefinita e richiede la possibilità di installare quattro nodi nel cluster. Usare 'redis-ha.enabled': false per installare l'estensione in un singolo nodo.

Per creare l'estensione con l'identità del carico di lavoro, sostituire prima di tutto le variabili seguenti con i propri valori in questo modello 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'
    releaseTrain: 'preview'
    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'
   }
  }
}

Il modello Bicep può essere creato usando questo comando:

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

Annotazioni

Per altre opzioni di configurazione, ad esempio i limiti delle risorse, vedere values.yaml. Usare queste configurazioni nel modello Bicep durante la configurazione dell'estensione.

Parametri

clusterName è il nome del cluster Kubernetes abilitato per Arc o del cluster del servizio Azure Kubernetes.

workloadIdentityClientId e ssoWorkloadIdentityClientId sono gli ID client dell'identità gestita da usare per l'identità del carico di lavoro. ssoWorkloadIdentityClientId è utilizzato per l'autenticazione dell'interfaccia utente di Argo CD, mentre workloadIdentityClientId è utilizzato per l'identità del carico di lavoro dei componenti di Argo CD. Per altre informazioni sull'installazione generale e sulla configurazione di ssoWorkloadIdentityClientId, visitare Microsoft Entra ID App Registration Auth using OIDC (Autenticazione di registrazione dell'app microsoft Entra ID con OIDC ).

url è l'INDIRIZZO IP pubblico dell'interfaccia utente di Argo CD. Non esiste alcun nome di dominio o IP pubblico a meno che il cluster non abbia già un controller di ingresso fornito dal cliente. In tal caso, la regola di ingresso deve essere aggiunta all'interfaccia utente di Argo CD dopo la distribuzione.

oidcConfig - sostituire <your-tenant-id> con l'ID tenant dell'ID Microsoft Entra. Sostituire <same-value-as-ssoWorkloadIdentityClientId-above> con lo stesso valore di ssoWorkloadIdentityClientId.

La variabile policy è data dalle impostazioni argocd-rbac-cm configmap di Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id è l'ID del gruppo Microsoft Entra che consente all'amministratore di accedere all'interfaccia utente di Argo CD. L'ID del gruppo Microsoft Entra può essere trovato nel portale di Azure sotto Microsoft Entra ID > Gruppi >nome-gruppo> Proprietà. È possibile usare l'ID utente di Microsoft Entra anziché un ID gruppo di Microsoft Entra. L'ID utente di Microsoft Entra è disponibile nel portale di Azure in Microsoft Entra ID > Users >your-user-name> Properties (Proprietà).

Creare credenziali dell'identità del carico di lavoro

Per configurare nuove credenziali di identità per il carico di lavoro, segui questa procedura:

  1. Recuperare l'URL dell'emittente OIDC per il cluster AKS o il cluster Kubernetes abilitato per Arc.

  2. Creare un'identità gestita e prendere nota dell'ID client e dell'ID tenant.

  3. Stabilisci una credenziale di identità federata per il cluster AKS o il cluster Kubernetes abilitato per Arc. Per esempio:

    # 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
    
  4. Assicurarsi di fornire autorizzazioni appropriate per l'identità del carico di lavoro per la risorsa che si desidera sia estratta dal controller di origine o dal controller image-reflector. Ad esempio, se si utilizza Azure Container Registry, assicurarsi che Container Registry Repository Reader (per i registri abilitati ABAC) o (per i registri non ABAC) sia stato applicato.

Connettersi ai registri privati di Azure Container Registry o ai repository di Azure Container Registry utilizzando l'identità del carico di lavoro

Per utilizzare il registro ACR privato o i repository ACR, seguire le istruzioni nella documentazione ufficiale di Argo CD per connettersi ai registri ACR privati. I passaggi Etichettare i pod, Creare credenziali dell'identità federata e Aggiungere un'annotazione all'account del servizio in questa guida sono stati completati dall'estensione con la distribuzione Bicep e possono essere ignorati.

Accedere all'interfaccia utente di Argo CD

Se non esiste un controller di ingresso per il cluster AKS, l'interfaccia utente di Argo CD può essere esposta direttamente usando un servizio LoadBalancer. Il comando seguente espone l'interfaccia utente di Argo CD sulla porta 80 e 443.

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

Distribuire l'applicazione Argo CD

Ora che l'estensione Argo CD è installata, è possibile distribuire un'applicazione usando l'interfaccia utente di Argo CD o l'interfaccia della riga di comando. L'esempio seguente usa kubectl apply per distribuire il servizio Azure Kubernetes all'interno di un'applicazione Argo CD nel progetto Argo CD predefinito nello spazio dei nomi 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'applicazione demo del negozio AKS è stata installata nello spazio dei nomi argocd. Vedere la pagina Web dell'applicazione seguendo queste istruzioni. Assicurarsi di visitare l'indirizzo IP usando http e non https.

Aggiornare la configurazione dell'estensione

Le configmap di Argo CD possono essere aggiornate dopo l'installazione e altre impostazioni di configurazione dell'estensione usando il comando seguente:

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'"

Aggiornare la configmap di Argo CD tramite l'estensione, in modo che le impostazioni non vengano sovrascritte. L'applicazione del modello Bicep è un metodo alternativo all'uso dell'interfaccia della riga di comando di Azure per aggiornare la configurazione.

Eliminare l'estensione

Usare i comandi seguenti per eliminare l'estensione.

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

Passaggi successivi