Självstudie: Distribuera program med GitOps med Argo CD

I den här självstudien beskrivs hur du använder GitOps med Argo CD i Azure Arc-aktiverade Kubernetes-kluster eller AKS-kluster (Azure Kubernetes Service). GitOps med Argo CD är aktiverat som ett klustertillägg som gör att du kan använda din Git-lagringsplats som sanningskälla för klusterkonfiguration och programdistribution. Argo CD stöder även andra vanliga filkällor, till exempel Helm- och Open Container Initiative-lagringsplatser (OCI).

Anmärkning

Från och med version 1.0.0-preview använder Argo CD-tillägget community Helm-diagrammet. Den här ändringen är en brytande ändring eftersom konfigurationsnycklarna har ändrats. Om du har installerat en tidigare version (0.0.x) av tillägget avinstallerar du tillägget och installerar om det senaste med uppdaterade konfigurationsnycklar.

Viktigt!

GitOps med Argo CD finns för närvarande i FÖRHANDSVERSION. Se kompletterande användningsvillkor för Microsoft Azure Previews för juridiska villkor som gäller för Azure-funktioner som är i betaversion, förhandsversion eller på annat sätt ännu inte har släppts i allmän tillgänglighet.

Förutsättningar

Om du vill distribuera program med GitOps behöver du antingen ett Azure Arc-aktiverat Kubernetes-kluster eller ett AKS-kluster.

Azure Arc-aktiverade Kubernetes-kluster

Azure Kubernetes Service-kluster

  • Ett MSI-baserat AKS-kluster som är igång.

    Viktigt!

    AKS-klustret måste skapas med hanterad tjänstidentitet (MSI), inte tjänstens huvudnamn (SPN) för att det här tillägget ska fungera. För nya AKS-kluster som skapats med az aks createär klustret MSI-baserat som standard. Om du vill konvertera SPN-baserade kluster till MSI kör du az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Mer information finns i Använda en hanterad identitet i AKS.

  • Läs- och skrivbehörigheter för Microsoft.ContainerService/managedClusters resurstypen.

Gemensamt för båda klustertyperna

  • Läs- och skrivbehörigheter för dessa resurstyper:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI version 2.15 och senare. Installera Azure CLI eller använd följande kommandon för att uppdatera till den senaste versionen:

    az version
    az upgrade
    
  • Den Kubernetes-kommandoradsklienten, kubectl. kubectl är redan installerat om du använder Azure Cloud Shell.

    Installera kubectl lokalt med az aks install-cli kommandot :

    az aks install-cli
    
  • Registrering av följande Azure-resursprovidrar:

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

    Registreringen är en asynkron process och bör slutföras inom 10 minuter. Om du vill övervaka registreringsprocessen använder du följande kommando:

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

Tips/Råd

Även om källan i den här självstudien är en Git-lagringsplats stöder Argo CD andra vanliga filkällor som Helm- och Open Container Initiative-lagringsplatser (OCI).

Versions- och regionsstöd

GitOps stöds för närvarande i offentliga regioner.

Nätverkskrav

GitOps-agenterna måste ha utgående TCP till lagringsplatskällan på antingen port 22 (SSH) eller port 443 (HTTPS) för att fungera. Agenterna kräver också åtkomst till följande utgående URL:er:

Slutpunkt (DNS) Beskrivning
https://management.azure.com Krävs för att agenten ska kunna kommunicera med Kubernetes-konfigurationstjänsten.
https://<region>.dp.kubernetesconfiguration.azure.com Dataplanets slutpunkt för agenten för att skicka status och hämta konfigurationsinformation. Beror på <region> (de regioner som stöds ovan).
https://login.microsoftonline.com Krävs för att hämta och uppdatera Azure Resource Manager-token.
https://mcr.microsoft.com Krävs för att hämta containeravbildningar för kontrollanter.

Aktivera CLI-tillägg

Installera de senaste k8s-configuration paketen och k8s-extension CLI-tilläggspaketen:

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

Så här uppdaterar du dessa paket till de senaste versionerna:

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

Om du vill se en lista över alla installerade Azure CLI-tillägg och deras versioner använder du följande kommando:

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

Skapa GitOps-tillägg (Argo CD) (enkel installation)

GitOps Argo CD-installationen stöder fleranvändarstöd i läget för hög tillgänglighet (HA) och stöder arbetsbelastningsidentitet.

Viktigt!

HA-läget är standardkonfigurationen och kräver fyra noder i klustret för att kunna installera. Kommandot nedan lägger till --config "redis-ha.enabled=false" för att installera tillägget på en enda nod.

Det här kommandot skapar den enklaste konfigurationen när du installerar Argo CD-komponenterna i ett nytt argocd namnområde med klusteromfattande åtkomst. Klusterövergripande åtkomst gör att Argo CD-appdefinitioner kan identifieras i vilket namnområde som helst som anges i Argo CD:s configmap-konfiguration i klustret. Till exempel: 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"

Det här installationskommandot skapar ett nytt <namespace> namn-område och installerar Argo CD-komponenterna i <namespace>. Argo CD-programdefinitioner i den här konfigurationen fungerar bara i <namespace> namnområdet.

Anmärkning

Ytterligare konfigurationsalternativ, till exempel resursgränser, finns i values.yaml. Använd dessa konfigurationer i azure CLI-kommandot när du konfigurerar tillägget.

Skapa GitOps-tillägg (Argo CD) med arbetsbelastningsidentitet

En alternativ installationsmetod som rekommenderas för produktionsanvändning är workload identity. Med den här metoden kan du använda Microsoft Entra-ID-identiteter för att autentisera till Azure-resurser utan att behöva hantera hemligheter eller autentiseringsuppgifter på din Git-lagringsplats. Den här installationen använder arbetsbelastningsidentitetsautentisering aktiverad i 3.0.0-rc2 eller senare OSS-versionen av Argo CD.

Viktigt!

HA-läget är standardkonfigurationen och kräver fyra noder i klustret för att kunna installera. Använd 'redis-ha.enabled': false för att installera tillägget på en enda nod.

Om du vill skapa tillägget med arbetsbelastningsidentiteten ersätter du först följande variabler med dina egna värden i den här Bicep-mallen:

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

Bicep-mallen kan skapas med det här kommandot:

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

Anmärkning

Ytterligare konfigurationsalternativ, till exempel resursgränser, finns i values.yaml. Använd dessa konfigurationer i Bicep-mallen när du konfigurerar tillägget.

Parameterar

clusterName är namnet på AKS- eller Arc-aktivt Kubernetes-kluster.

workloadIdentityClientId och ssoWorkloadIdentityClientId är klient-ID:n för den hanterade identitet som ska användas för arbetslastidentitet. ssoWorkloadIdentityClientId Används för autentisering för Argo CD-användargränssnittet och workloadIdentityClientId används för arbetsbelastningsidentiteten för Argo CD-komponenterna. Besök Microsoft Entra ID App Registration Auth med OIDC för ytterligare information om allmän inställning och konfiguration av ssoWorkloadIdentityClientId.

url är den offentliga IP-adressen för Argo CD-användargränssnittet. Det finns ingen offentlig IP-adress eller domännamn om klustret inte redan har en ingresskontroller tillhandahållen av kunden. I så fall måste ingressregeln läggas till i Argo CD-användargränssnittet efter distributionen.

oidcConfig – ersätt <your-tenant-id> med klientorganisations-ID:t för ditt Microsoft Entra-ID. Ersätt <same-value-as-ssoWorkloadIdentityClientId-above> med samma värde som ssoWorkloadIdentityClientId.

policy variabeln är argocd-rbac-cm configmap inställningarna för Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id är Microsoft Entra-grupp-ID:t som ger administratören åtkomst till Argo CD-användargränssnittet. Microsoft Entra-grupp-ID:t finns i Azure-portalen under Microsoft Entra ID > Gruppera >dina gruppnamnsegenskaper>. Du kan använda Microsoft Entra-användar-ID:t i stället för ett Microsoft Entra-grupp-ID. Microsoft Entra-användar-ID:t finns i Azure-portalen under Microsoft Entra-ID-användares >>egenskaper för ditt användarnamn> .

Skapa autentiseringsuppgifter för arbetsbelastningsidentitet

Följ dessa steg för att konfigurera nya autentiseringsuppgifter för arbetsflödesidentitet:

  1. Hämta URL:en för OIDC-utfärdaren för ditt AKS-kluster eller Arc-aktiverat Kubernetes-kluster.

  2. Skapa en hanterad identitet och anteckna dess klient-ID och hyresgäst-ID.

  3. Upprätta en federerad identitetsautentiseringsuppgift för ditt AKS-kluster eller Arc-aktiverade Kubernetes-kluster. Till exempel:

    # 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. Se till att ge rätt behörigheter för arbetsbelastningsidentiteten för den resurs som du vill att ArgoCD, bildreflektorkontrollanten eller ArgoCD-repo-servern ska hämta. Om du till exempel använder Azure Container Registry kontrollerar du att antingen Container Registry Repository Reader (för ABAC-aktiverade register) eller AcrPull (för icke-ABAC-register) har tillämpats.

Anslut till privata ACR-register eller ACR-repositorier med hjälp av arbetsbelastningsidentitet

Om du vill använda det privata ACR-registret eller ACR-lagringsplatserna följer du anvisningarna i den officiella Argo CD-dokumentationen för att ansluta till privata ACR-register. Stegen Märka poddar, Skapa federerade identitetsautentiseringsuppgifter och Lägg till anteckning i tjänstkontot i den guiden slutfördes av tillägget med Bicep-distributionen och kan hoppas över.

Få åtkomst till Argo CD-användargränssnittet

Om det inte finns någon befintlig ingresskontrollant för AKS-klustret kan Argo CD-användargränssnittet exponeras direkt med hjälp av en LoadBalancer-tjänst. Följande kommando exponerar Argo CD-användargränssnittet på port 80 och 443.

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

Distribuera Argo CD-applikation

Nu när Argo CD-tillägget har installerats kan du distribuera ett program med hjälp av Argo CD-användargränssnittet eller CLI. I följande exempel används kubectl apply helt enkelt för att distribuera AKS-arkivet i ett Argo CD-program till standardprojektet för Argo CD i argocd namnområdet.

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

AKS Store-demoprogrammet installerades i argocd namnområdet. Se programmets webbsida genom att följa de här anvisningarna. Se till att besöka IP-adressen med http och inte https.

Uppdatera förlängningskonfiguration

Argo CD-konfigurationsmappar kan uppdateras efter installationen och andra konfigurationsinställningar för tillägg med hjälp av följande kommando:

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

Uppdatera Argo CD-konfigurationskartan via tillägget så att inställningarna inte skrivs över. Att använda Bicep-mallen är en alternativ metod för att använda Azure CLI för att uppdatera konfigurationen.

Ta bort tillägget

Använd följande kommandon för att ta bort tillägget.

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

Nästa steg

  • Filproblem och funktionsbegäranden på Azure/AKS-lagringsplatsen och se till att inkludera ordet "ArgoCD" i beskrivningen eller rubriken.
  • Utforska AKS-Platform teknikexempel, som implementerar OSS Argo CD med Backstage och Cluster API Provider för Azure (CAPZ) eller Crossplane.