Condividi tramite


Esercitazione: Distribuire applicazioni usando GitOps con ArgoCD

Questa esercitazione descrive come usare GitOps in un cluster Kubernetes. GitOps con ArgoCD è attivato come estensione del cluster nei cluster Kubernetes abilitati per Azure Arc o nei cluster Azure Kubernetes Service (AKS). Con GitOps è possibile usare il repository Git come origine della verità per la configurazione del cluster e la distribuzione di applicazioni.

Importante

GitOps con ArgoCD è 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.

Suggerimento

Mentre la fonte in questo tutorial è un repository Git, ArgoCD supporta altre comuni fonti di file, come i repository Helm e Open Container Initiative (OCI).

Prerequisiti

Per distribuire applicazioni utilizzando GitOps, è necessario un cluster Kubernetes con 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 risorse:

    • 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
    

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 nuove aree supportate a cadenza regolare.

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. Anche gli agenti richiedono l'accesso agli URL in uscita seguenti:

Endpoint del 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 dell'interfaccia della riga di comando

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 (ArgoCD) (installazione semplice)

L'installazione di GitOps ArgoCD 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 tre nodi nel cluster per poter eseguire l'installazione. Il comando seguente aggiunge --config deployWithHighAvailability=false per installare l'estensione in un singolo nodo.

Questo comando crea la configurazione più semplice installando i componenti ArgoCD 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 ArgoCD in qualsiasi spazio dei nomi elencato nella configurazione configmap di ArgoCD 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 \
--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"

Se si vuole limitare l'accesso di ArgoCD a uno spazio dei nomi specifico, usare --config namespaceInstall=true insieme ai parametri --target-namespace <namespace>. Questo comando di installazione crea un nuovo <namespace> spazio dei nomi e installa i componenti ArgoCD in <namespace>. Il comando di installazione consente anche di installare più istanze di ArgoCD nello stesso cluster. Le definizioni delle applicazioni ArgoCD in questa configurazione funzionano solo nello spazio dei nomi <namespace>.

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

Un metodo di installazione alternativo consigliato per l'uso in produzione è l'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 utilizza l'autenticazione dell'identità del carico di lavoro abilitata nella versione OSS 3.0.0-rc2 o successiva di ArgoCD.

Importante

La modalità a disponibilità elevata è la configurazione predefinita e richiede tre nodi nel cluster per poter eseguire l'installazione. Aggiungere --config deployWithHighAvailability=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-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'
    }
  }
}

Il modello Bicep può essere creato usando questo comando:

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

Parametri

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

workloadIdentityClientId e ssoWorkloadIdentityClientId sono gli ID client dell'identità gestita desiderata per essere utilizzata per l'identità del carico di lavoro. ssoWorkloadIdentityClientId Viene usato per l'autenticazione per l'interfaccia utente di ArgoCD e workloadIdentityClientId viene usato per l'identità del carico di lavoro per i componenti ArgoCD. 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 ArgoCD. 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 ArgoCD 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.

policy variabile è le argocd-rbac-cm configmap impostazioni di ArgoCD. 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 ArgoCD. 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 d'identità per il workload

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 vuole che il controller di origine o il controller image-reflector estraggano. 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 del registro ACR, seguire le istruzioni nella documentazione ufficiale di ArgoCD per connettersi a registri ACR privati. I passaggi Etichettare i pod, Creare credenziale dell'identità federata e Aggiungere un'annotazione all'account del servizio in quella guida sono stati completati dall'estensione con la distribuzione Bicep e possono essere ignorati.

Accedere all'interfaccia utente di ArgoCD

Se non esiste un controller di ingresso per il cluster AKS, l'interfaccia utente di ArgoCD può essere esposta direttamente usando un servizio LoadBalancer. Il comando seguente espone l'interfaccia utente di ArgoCD 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 ArgoCD

Ora che l'estensione ArgoCD è installata, è possibile distribuire un'applicazione usando l'interfaccia utente di ArgoCD o l'interfaccia della riga di comando. L'esempio seguente semplicemente usa kubectl apply per distribuire l'archivio AKS all'interno di un'applicazione ArgoCD nel progetto predefinito di ArgoCD nel namespace 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 pets. 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 ArgoCD 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 Microsoft.ArgoCD –-config "config-maps.argocd-cm.data.url='https://<public-ip-for-argocd-ui>/auth/callback'”

È importante aggiornare la configmap di ArgoCD tramite l'estensione, quindi le impostazioni non vengono sovrascritte. L'applicazione del modello bicep è un metodo alternativo a az cli 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