Dela via


Självstudie: Distribuera program med GitOps med ArgoCD

I den här självstudien beskrivs hur du använder GitOps i ett Kubernetes-kluster. GitOps med ArgoCD är aktiverat som ett klustertillägg i Azure Arc-aktiverade Kubernetes-kluster eller Azure Kubernetes Service-kluster (AKS). Med GitOps kan du använda din Git-lagringsplats som sanningskälla för klusterkonfiguration och programdistribution.

Viktigt!

GitOps med ArgoCD 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ör produktionsstöd av GitOps-tillägg kan du prova GitOps-tillägget med hjälp av Flux.

Tips/Råd

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

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
    

Versions- och regionsstöd

GitOps stöds för närvarande i alla regioner som Azure Arc-aktiverade Kubernetes stöder. GitOps stöds för närvarande i en del av de regioner som AKS stöder. GitOps-tjänsten lägger till nya regioner som stöds regelbundet.

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 (ArgoCD) (enkel installation)

GitOps ArgoCD-installationen stöder flertenantmiljö i hög tillgänglighetsläge (HA) och stöder workload identity.

Viktigt!

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

Det här kommandot skapar den enklaste konfigurationen när argoCD-komponenterna installeras i ett nytt argocd namnområde med klusteromfattande åtkomst. Klusteromfattande åtkomst gör att ArgoCD-appdefinitioner kan identifieras i alla namnområden som anges i konfigurationen av ArgoCD-konfigurationen 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 \
--release-train preview \
--config deployWithHightAvailability=false \
--config namespaceInstall=false \
--config "config-maps.argocd-cmd-params-cm.data.application\.namespaces=namespace1,namespace2"

Om du vill begränsa ArgoCD-åtkomsten till ett specifikt namnområde använder du --config namespaceInstall=true tillsammans med --target-namespace <namespace> parametrarna. Det här installationskommandot skapar ett nytt <namespace> namnområde och installerar ArgoCD-komponenterna <namespace>i . Installationskommandot gör det också möjligt att installera flera instanser av ArgoCD i samma kluster. ArgoCD-programdefinitioner i den här konfigurationen fungerar bara i <namespace> namnområdet.

Skapa GitOps-tillägg (ArgoCD) 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 ArgoCD.

Viktigt!

HA-läget är standardkonfigurationen och kräver tre noder i klustret för att kunna installera. Lägg till --config deployWithHighAvailability=false för att installera tillägget på en enskild 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-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'
    releaseTrain: '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'
    }
  }
}

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

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

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 ArgoCD-användargränssnittet och workloadIdentityClientId används för arbetsbelastningsidentiteten för ArgoCD-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 ArgoCD-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 ArgoCD-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 variabel är inställningarna för argocd-rbac-cm configmap ArgoCD. g, replace-me##-argocd-ui-entra-group-admin-id är Microsoft Entra-grupp-ID:t som ger administratören åtkomst till ArgoCD-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 system:serviceaccount:"argocd":"source-controller" --audience api://AzureADTokenExchange
    
  4. Se till att ge rätt behörigheter för arbetsbelastningsidentitet för den resurs som du vill att källkontrollanten eller bildreflektorkontrollanten 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 ArgoCD-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 ArgoCD-användargränssnittet

Om det inte finns någon befintlig ingresskontrollant för AKS-klustret kan ArgoCD-användargränssnittet exponeras direkt med hjälp av en LoadBalancer-tjänst. Följande kommando exponerar ArgoCD-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 ArgoCD-applikation

Nu när ArgoCD-tillägget har installerats kan du distribuera ett program med hjälp av ArgoCD-användargränssnittet eller CLI. I följande exempel används kubectl apply helt enkelt för att distribuera AKS-arkivet i ett ArgoCD-program till argoCD-standardprojektet 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 pets 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.

Uppdateringstilläggskonfiguration

ArgoCD-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 Microsoft.ArgoCD –-config "config-maps.argocd-cm.data.url='https://<public-ip-for-argocd-ui>/auth/callback'”

Det är viktigt att uppdatera ArgoCD-konfigurationskartan via tillägget, så att inställningarna inte skrivs över. Att använda bicep-mallen är en alternativ metod för az cli 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