Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
Un cluster Kubernetes abilitato per Azure Arc in esecuzione.
Informazioni su come connettere un cluster Kubernetes ad Azure Arc. Se è necessario connettersi tramite un proxy in uscita, assicurarsi di installare gli agenti Arc con le impostazioni proxy.
Autorizzazioni di lettura e scrittura per il tipo di risorsa
Microsoft.Kubernetes/connectedClusters
.
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, eseguireaz 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 comandoaz 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:
Recuperare l'URL dell'emittente OIDC per il cluster AKS o il cluster Kubernetes abilitato per Arc.
Creare un'identità gestita e prendere nota dell'ID client e dell'ID tenant.
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
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
- Problemi di file e richieste di funzionalità nel repository Azure/AKS e assicurati di includere la parola "ArgoCD" nella descrizione o nel titolo.
- Esplora AKS-Platform esempio di codice di ingegneria che distribuisce OSS ArgoCD con Backstage e il Provider dell'API del cluster per Azure (CAPZ) o Crossplane.