Freigeben über


Tutorial: Anwendungen mit GitOps und Argo CD bereitstellen

In diesem Lernprogramm wird beschrieben, wie Sie GitOps mit Argo CD in Azure Arc-fähigen Kubernetes-Clustern oder Azure Kubernetes Service (AKS)-Clustern verwenden. GitOps mit Argo CD ist als Clustererweiterung aktiviert, mit der Sie Ihr Git-Repository als Wahrheitsquelle für die Clusterkonfiguration und Anwendungsbereitstellung verwenden können. Argo CD unterstützt auch andere gängige Dateiquellen, z. B. Helm- und Open Container Initiative (OCI)-Repositorys.

Hinweis

Ab Version 1.0.0-Preview verwendet die Argo CD-Erweiterung das Community Helm-Diagramm. Diese Änderung ist eine wichtige Änderung, da sich die Konfigurationsschlüssel geändert haben. Wenn Sie eine frühere Version (0.0.x) der Erweiterung installiert haben, deinstallieren Sie die Erweiterung, und installieren Sie die neuesten mit aktualisierten Konfigurationsschlüsseln erneut.

Von Bedeutung

GitOps mit Argo CD befindet sich derzeit in DER VORSCHAU. Lesen Sie die ergänzenden Nutzungsbedingungen für Microsoft Azure Previews für rechtliche Bestimmungen, die für Azure-Features gelten, die sich in Der Betaversion, Vorschau oder auf andere Weise noch nicht in der allgemeinen Verfügbarkeit befinden. Testen Sie die GitOps-Erweiterungsunterstützung für die Produktion mithilfe von Flux.

Voraussetzungen

Um Anwendungen mit GitOps bereitzustellen, benötigen Sie entweder einen Azure Arc-fähigen Kubernetes-Cluster oder einen AKS-Cluster.

Kubernetes-Cluster mit Azure Arc-Unterstützung.

Azure Kubernetes Service-Cluster

  • Einen MSI-basierten AKS-Cluster, der aktiv ist und ausgeführt wird

    Von Bedeutung

    Der AKS-Cluster muss mit verwalteter Dienstidentität (Managed Service Identity, MSI) und nicht mit dem Dienstprinzipalnamen (Service Principal Name, SPN) erstellt werden, damit diese Erweiterung funktioniert. Bei neuen AKS-Clustern, die mit az aks create erstellt werden, ist der Cluster standardmäßig MSI-basiert. Um SPN-basierte Cluster in MSI zu konvertieren, führen Sie az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity aus. Weitere Informationen finden Sie unter Verwenden einer verwalteten Identität in AKS.

  • Lese- und Schreibberechtigungen für den Ressourcentyp Microsoft.ContainerService/managedClusters

Für beide Clustertypen

  • Lese- und Schreibberechtigungen für diese Ressourcentypen:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure-Befehlszeilenschnittstelle ab Version 2.15. Installieren Sie die Azure CLI , oder verwenden Sie die folgenden Befehle, um auf die neueste Version zu aktualisieren:

    az version
    az upgrade
    
  • Der Kubernetes-Befehlszeilenclient kubectl. kubectl ist bereits installiert, wenn Sie Azure Cloud Shell verwenden.

    Verwenden Sie für die lokale Installation von kubectl den Befehl az aks install-cli:

    az aks install-cli
    
  • Registrierung der folgenden Azure-Ressourcenanbieter:

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

    Die Registrierung ist ein asynchroner Prozess und sollte innerhalb von 10 Minuten abgeschlossen sein. Verwenden Sie zum Überwachen des Registrierungsprozesses den folgenden Befehl:

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

Tipp

Während die Quelle in diesem Lernprogramm ein Git-Repository ist, unterstützt Argo CD andere gängige Dateiquellen wie Helm- und Open Container Initiative (OCI)-Repositorys.

Versions- und Regionsunterstützung

GitOps wird derzeit in allen Regionen unterstützt, die Azure Arc-fähige Kubernetes unterstützt. GitOps wird derzeit in einer Teilmenge der Regionen unterstützt, die AKS unterstützt. Der GitOps-Dienst fügt in regelmäßigen Abständen neue unterstützte Regionen hinzu.

Netzwerkanforderungen

Die GitOps-Agents erfordern ein ausgehendes TCP an die Repository-Quelle auf Port 22 (SSH) oder Port 443 (HTTPS), um zu funktionieren. Außerdem benötigen die Agents Zugriff auf die folgenden ausgehenden URLs:

Endpunkt (DNS) BESCHREIBUNG
https://management.azure.com Erforderlich, damit der Agent mit dem Kubernetes-Konfigurationsdienst kommunizieren kann.
https://<region>.dp.kubernetesconfiguration.azure.com Endpunkt auf Datenebene, über den der Agent Statusinformationen mithilfe von Push übermitteln und Konfigurationsinformationen abrufen kann Hängt von <region> (den zuvor erwähnten unterstützten Regionen) ab.
https://login.microsoftonline.com Erforderlich zum Abrufen und Aktualisieren von Azure Resource Manager-Token.
https://mcr.microsoft.com Erforderlich, um Containerimages für Controller abzurufen.

Aktivieren der CLI-Erweiterungen

Installieren Sie die neuesten CLI-Erweiterungspakete k8s-configuration und k8s-extension:

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

So aktualisieren Sie diese Pakete auf die neuesten Versionen

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

Verwenden Sie den folgenden Befehl, um eine Liste aller installierten Azure CLI-Erweiterungen und deren Versionen anzuzeigen:

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

Erstellen der Erweiterung GitOps (Argo CD) (einfache Installation)

Die GitOps Argo CD-Installation unterstützt mehrinstanzenfähige Mandanten im Ha-Modus (High Availability) und unterstützt die Workload-Identität.

Von Bedeutung

Der HA-Modus ist die Standardkonfiguration und erfordert vier Knoten im Cluster, um die Installation durchführen zu können. Der folgende Befehl fügt --config "redis-ha.enabled=false" hinzu, um die Erweiterung auf einem einzelnen Knoten zu installieren.

Mit diesem Befehl wird die einfachste Konfiguration erstellt, die die Argo CD-Komponenten in einem neuen argocd Namespace mit clusterweitem Zugriff installiert. Der clusterweite Zugriff ermöglicht die Erkennung von Argo CD-App-Definitionen in allen Namespaces, die in der Konfiguration der Argo CD configmap im Cluster aufgeführt sind. Beispiel: 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"

Dieser Installationsbefehl erstellt einen neuen <namespace> Namespace und installiert die Argo CD-Komponenten in der <namespace>. Argo CD-Anwendungsdefinitionen in dieser Konfiguration funktionieren nur im <namespace> Namespace.

Hinweis

Weitere Konfigurationsoptionen, z. B. Ressourcenbeschränkungen, finden Sie unter values.yaml. Verwenden Sie diese Konfigurationen beim Konfigurieren der Erweiterung in Ihrem Azure CLI-Befehl.

Erstellen einer GitOps (Argo CD) Erweiterung mit Workload Identity

Eine alternative Installationsmethode, die für die Produktionsverwendung empfohlen wird, ist die Workloadidentität. Mit dieser Methode können Sie Microsoft Entra-ID-Identitäten verwenden, um sich bei Azure-Ressourcen zu authentifizieren, ohne geheime Schlüssel oder Anmeldeinformationen in Ihrem Git-Repository verwalten zu müssen. Diese Installation verwendet die Workload-Identitätsauthentifizierung, die in der Version 3.0.0-rc2 oder höher von Argo CD aktiviert ist.

Von Bedeutung

Der HA-Modus ist die Standardkonfiguration und erfordert vier Knoten im Cluster, um die Installation durchführen zu können. Verwenden Sie 'redis-ha.enabled': false, um die Erweiterung auf einem einzelnen Knoten zu installieren.

Um die Erweiterung mit Workload-Identität zu erstellen, ersetzen Sie zuerst die folgenden Variablen durch Ihre eigenen Werte in dieser Bicep-Vorlage:

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

Die Vorlage "Bicep" kann mit diesem Befehl erstellt werden:

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

Hinweis

Weitere Konfigurationsoptionen, z. B. Ressourcenbeschränkungen, finden Sie unter values.yaml. Verwenden Sie diese Konfigurationen in der Bicep-Vorlage beim Konfigurieren der Erweiterung.

Parameter

clusterName ist der Name des AKS- oder Arc-fähigen Kubernetes-Clusters.

workloadIdentityClientId und ssoWorkloadIdentityClientId sind die Client-IDs der verwalteten Identität, die für die Workload-Identität verwendet werden soll. Die ssoWorkloadIdentityClientId wird für die Authentifizierung der Argo CD UI verwendet, und die workloadIdentityClientId dient der Workload-Identität der Argo CD-Komponenten. Besuchen Sie Microsoft Entra ID App Registration Auth mit OIDC, um weitere Informationen zur grundlegenden Einrichtung und Konfiguration der ssoWorkloadIdentityClientId zu erhalten.

url ist die öffentliche IP der Argo CD UI. Es gibt keinen öffentlichen IP- oder Domänennamen, es sei denn, der Cluster verfügt bereits über einen kundeneigenen Eingangscontroller. Wenn ja, muss die Eingangsregel nach der Bereitstellung der Argo CD-Benutzeroberfläche hinzugefügt werden.

oidcConfig – Ersetzen Sie <your-tenant-id> durch die Mandanten-ID Ihrer Microsoft Entra-ID. Ersetzen Sie <same-value-as-ssoWorkloadIdentityClientId-above> durch denselben Wert wie ssoWorkloadIdentityClientId.

policy Variable ist die argocd-rbac-cm configmap Einstellungen von Argo CD. g, replace-me##-argocd-ui-entra-group-admin-id ist die Microsoft Entra-Gruppen-ID, die Administratorzugriff auf die Ui der Argo CD gewährt. Die Microsoft Entra-Gruppen-ID finden Sie im Azure-Portal unter "Microsoft Entra ID > Groups >your-group-name> Properties". Sie können die Microsoft Entra-Benutzer-ID anstelle einer Microsoft Entra-Gruppen-ID verwenden. Die Microsoft Entra-Benutzer-ID finden Sie im Azure-Portal unter "Microsoft Entra ID > Users >your-user-name> Properties".

Erstellen von Anmeldeinformationen für die Workloadidentität

Führen Sie die folgenden Schritte aus, um neue Anmeldeinformationen für die Workloadidentität einzurichten:

  1. Rufen Sie die OIDC-Aussteller-URL für Ihren AKS-Cluster oder Arc-fähigen Kubernetes-Cluster ab.

  2. Erstellen Sie eine verwaltete Identität , und notieren Sie ihre Client-ID und Mandanten-ID.

  3. Richten Sie verteilte Identitätsnachweise für Ihr AKS-Cluster oder Arc-fähiges Kubernetes-Cluster ein. Beispiel:

    # 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. Stellen Sie sicher, dass Sie der Workloadidentität die richtigen Berechtigungen für die Ressource bereitstellen, die vom Quellcontroller oder Imagereflektorcontroller abgerufen werden soll. Wenn Sie beispielsweise Azure Container Registry verwenden, stellen Sie sicher, dass entweder Container Registry Repository Reader (für ABAC-fähige Registrierungen) oder AcrPull (für Nicht-ABAC-Registrierungen) angewendet wurde.

Herstellen einer Verbindung mit privaten ACR-Registrierungen oder ACR-Repositorys mithilfe der Workload-Identität

Um die privaten ACR-Registrierungs- oder ACR-Repositorys zu nutzen, befolgen Sie die Anweisungen in der offiziellen Argo CD-Dokumentation zum Herstellen einer Verbindung mit privaten ACR-Registern. Die Schritte Bezeichnung der Pods, Erstellen von Verbundidentitätsanmeldeinformationen und Hinzufügen von Anmerkungen zu Dienstkonto in diesem Leitfaden wurden durch die Erweiterung mit der Bicep-Bereitstellung abgeschlossen und können übersprungen werden.

Zugriff auf die UI von Argo CD

Wenn kein Eingangscontroller für den AKS-Cluster vorhanden ist, kann die Argo CD-Benutzeroberfläche direkt mit einem LoadBalancer-Dienst verfügbar gemacht werden. Der folgende Befehl macht die Argo CD-Benutzeroberfläche am Port 80 und 443 verfügbar.

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

Bereitstellen der Argo CD-Anwendung

Nachdem die Argo CD-Erweiterung installiert ist, können Sie eine Anwendung mit der Argo CD UI oder CLI bereitstellen. Im folgenden Beispiel wird der AKS-Speicher einfach in einer Argo CD-Anwendung im standardmäßigen Argo CD-Projekt im argocd-Namespace bereitgestellt.

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

Die AKS Store-Demoanwendung wurde im argocd Namespace installiert. Lesen Sie die Anwendungswebseite, indem Sie diese Anweisungen befolgen. Achten Sie darauf, die IP-Adresse mit http und nicht mit https zu verwenden.

Aktuelen der Erweiterungskonfiguration

Argo CD configmaps können nach der Installation und anderen Erweiterungskonfigurationseinstellungen mithilfe des folgenden Befehls aktualisiert werden:

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

Aktualisieren Sie die Argo CD configmap über die Erweiterung, sodass die Einstellungen nicht überschrieben werden. Das Anwenden der Bicep-Vorlage ist eine alternative Methode zur Verwendung von Azure CLI zum Aktualisieren der Konfiguration.

Löschen Sie die Erweiterung

Verwenden Sie die folgenden Befehle, um die Erweiterung zu löschen.

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

Nächste Schritte

  • Dateiprobleme und Featureanforderungen im Azure/AKS-Repository und achten Sie darauf, das Wort "ArgoCD" in die Beschreibung oder den Titel einzuschließen.
  • Erkunden Sie das AKS-Platform Engineering-Codebeispiel, das OSS Argo CD mit Backstage- und Cluster-API-Anbieter für Azure (CAPZ) oder Crossplane bereitstellt.