Udostępnij za pośrednictwem


Samouczek: wdrażanie aplikacji przy użyciu metodyki GitOps z usługą ArgoCD

W tym samouczku opisano sposób używania metodyki GitOps w klastrze Kubernetes. Metodyka GitOps z ArgoCD jest dostępna jako rozszerzenie klastra w klastrach Kubernetes z obsługą Azure Arc lub w klastrach usługi Azure Kubernetes Service (AKS). Za pomocą metodyki GitOps możesz użyć repozytorium Git jako źródła prawdy na potrzeby konfiguracji klastra i wdrażania aplikacji.

Ważne

Metodyka GitOps z narzędziem ArgoCD jest obecnie dostępna w wersji zapoznawczej. Zobacz dodatkowe warunki użytkowania dla wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta, wersji zapoznawczej lub w inny sposób nie zostały jeszcze wydane w wersji ogólnodostępnej. W przypadku obsługi rozszerzenia GitOps w środowisku produkcyjnym wypróbuj rozszerzenie GitOps przy użyciu platformy Flux.

Wskazówka

Chociaż źródłem w tym samouczku jest repozytorium Git, ArgoCD obsługuje inne popularne typy repozytoriów, takie jak Helm i Open Container Initiative (OCI).

Wymagania wstępne

Aby wdrożyć aplikacje przy użyciu usługi GitOps, potrzebujesz klastra Kubernetes z obsługą usługi Azure Arc lub klastra usługi AKS:

Klastry platformy Kubernetes z obsługą usługi Azure Arc

Klastry usługi Azure Kubernetes Service

  • Klaster AKS oparty na tożsamości usługi zarządzanej, który jest już uruchomiony.

    Ważne

    Aby to rozszerzenie działało, należy utworzyć klaster usługi AKS przy użyciu tożsamości usługi zarządzanej (MSI), a nie głównej nazwy usługi (SPN). pl-PL: W przypadku nowych klastrów usługi AKS utworzonych za pomocą az aks create, klaster jest domyślnie oparty na tożsamości zarządzanej. Aby przekonwertować klastry bazujące na SPN na MSI, uruchom az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej w usłudze AKS.

  • Uprawnienia do odczytu i zapisu dla Microsoft.ContainerService/managedClusters typu zasobu.

Wspólne dla obu typów klastrów

  • Uprawnienia do odczytu i zapisu dla tych typów zasobów:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI w wersji 2.15 lub nowszej. Zainstaluj interfejs wiersza polecenia platformy Azure lub użyj następujących poleceń, aby zaktualizować do najnowszej wersji:

    az version
    az upgrade
    
  • Klient wiersza polecenia kubernetes, kubectl. kubectl jest już zainstalowany, jeśli używasz usługi Azure Cloud Shell.

    Zainstaluj kubectl lokalnie przy użyciu az aks install-cli polecenia :

    az aks install-cli
    
  • Rejestracja następujących dostawców zasobów platformy Azure:

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

    Rejestracja jest procesem asynchronicznym i powinna zakończyć się w ciągu 10 minut. Aby monitorować proces rejestracji, użyj następującego polecenia:

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

Obsługa wersji i regionów

Usługa GitOps jest obecnie obsługiwana we wszystkich regionach obsługiwanych przez Kubernetes z obsługą Azure Arc. Usługa GitOps jest obecnie obsługiwana w podzestawie regionów obsługiwanych przez usługę AKS. Usługa GitOps dodaje nowe obsługiwane regiony w regularnych okresach.

Wymagania dotyczące sieci

Agenci GitOps wymagają do działania wyjściowego ruchu TCP do źródła repozytorium na porcie 22 (SSH) lub 443 (HTTPS). Agenci wymagają również dostępu do następujących zewnętrznych adresów URL.

Punkt końcowy (DNS) Opis
https://management.azure.com Wymagany, aby agent mógł komunikować się z usługą konfiguracji Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Punkt końcowy płaszczyzny danych dla agenta umożliwiający przesyłanie statusu i pobieranie informacji konfiguracyjnych. Zależy od <region> (obsługiwane regiony wymienione wcześniej).
https://login.microsoftonline.com Wymagany do pobierania i aktualizowania tokenów usługi Azure Resource Manager.
https://mcr.microsoft.com Wymagane do ściągania obrazów kontenerów dla kontrolerów.

Włączanie rozszerzeń interfejsu wiersza polecenia

Zainstaluj najnowsze pakiety rozszerzeń CLI: k8s-configuration i k8s-extension

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

Aby zaktualizować te pakiety do najnowszych wersji:

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

Aby wyświetlić listę wszystkich zainstalowanych rozszerzeń interfejsu wiersza polecenia platformy Azure i ich wersji, użyj następującego polecenia:

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

Tworzenie rozszerzenia GitOps (ArgoCD) (prosta instalacja)

Instalacja GitOps ArgoCD obsługuje wiele dzierżaw w trybie wysokiej dostępności (HA) oraz tożsamość zadania.

Ważne

Tryb wysokiej dostępności jest konfiguracją domyślną i wymaga obecności trzech węzłów w klastrze do instalacji. Polecenie poniżej dodaje --config deployWithHighAvailability=false do zainstalowania rozszerzenia na jednym węźle.

To polecenie tworzy najprostszą konfigurację, instalując składniki ArgoCD w nowej argocd przestrzeni nazw z dostępem do całego klastra. Dostęp do całego klastra umożliwia wykrywanie definicji aplikacji ArgoCD w dowolnej przestrzeni nazw wymienionej w konfiguracji mapy konfiguracji ArgoCD w klastrze. Przykład: 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"

Jeśli chcesz ograniczyć dostęp ArgoCD do określonej przestrzeni nazw, użyj parametrów --config namespaceInstall=true oraz --target-namespace <namespace>. To polecenie instalacji tworzy nową przestrzeń nazw <namespace> i instaluje składniki ArgoCD w <namespace>. Polecenie instalacji umożliwia również zainstalowanie wielu wystąpień usługi ArgoCD w tym samym klastrze. Definicje aplikacji ArgoCD w tej konfiguracji działają tylko w <namespace> przestrzeni nazw.

Utwórz rozszerzenie GitOps (ArgoCD) z tożsamością zasobów

Alternatywną metodą instalacji zalecaną w przypadku użycia produkcyjnego jest identyfikacja obciążenia. Ta metoda pozwala na użycie tożsamości Microsoft Entra ID do uwierzytelniania w zasobach Azure bez konieczności zarządzania sekretami lub poświadczeniami w repozytorium Git. Ta instalacja wykorzystuje uwierzytelnianie tożsamości roboczej (workload identity) dostępne w wersji 3.0.0-rc2 lub nowszej otwartego oprogramowania ArgoCD.

Ważne

Tryb wysokiej dostępności jest konfiguracją domyślną i wymaga obecności trzech węzłów w klastrze do instalacji. Dodaj --config deployWithHighAvailability=false, aby zainstalować rozszerzenie na jednym węźle.

Aby utworzyć rozszerzenie z tożsamością obciążenia, najpierw zastąp następujące zmienne własnymi wartościami w tym szablonie 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'
    }
  }
}

Szablon Bicep można utworzyć przy użyciu tego polecenia:

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

Parametry

clusterName to nazwa klastra Kubernetes z obsługą AKS lub Arc.

workloadIdentityClientId i ssoWorkloadIdentityClientId to identyfikatory klienta tożsamości zarządzanej, które mają być używane na potrzeby tożsamości obciążenia. Element ssoWorkloadIdentityClientId jest używany do uwierzytelniania interfejsu użytkownika ArgoCD, a element workloadIdentityClientId jest używany do tożsamości obciążenia składników ArgoCD. Odwiedź stronę Microsoft Entra ID App Registration Auth using OIDC, aby uzyskać dodatkowe informacje na temat ogólnego przygotowania i konfiguracji identyfikatora ssoWorkloadIdentityClientId.

url to publiczny adres IP interfejsu użytkownika ArgoCD. Nie ma publicznego adresu IP ani nazwy domeny, chyba że klaster już posiada kontrolera wejściowego. Jeśli tak, reguła ruchu przychodzącego musi zostać dodana do interfejsu użytkownika argoCD po wdrożeniu.

oidcConfig — zastąp <your-tenant-id> identyfikatorem dzierżawy Microsoft Entra ID. Zastąp <same-value-as-ssoWorkloadIdentityClientId-above> tą samą wartością co ssoWorkloadIdentityClientId.

policy zmienna argocd-rbac-cm configmap to ustawienia argoCD. g, replace-me##-argocd-ui-entra-group-admin-id to identyfikator grupy Entra firmy Microsoft, który zapewnia administratorowi dostęp do interfejsu użytkownika argoCD. Identyfikator grupy Microsoft Entra można znaleźć w portalu Azure w obszarze Microsoft Entra ID > Grupy >[nazwa-twojej-grupy]> Właściwości. Możesz użyć identyfikatora użytkownika Entra firmy Microsoft zamiast identyfikatora grupy Entra firmy Microsoft. Identyfikator użytkownika Microsoft Entra można znaleźć w portalu Azure w obszarze Microsoft Entra ID > Użytkownicy >twoja-nazwa-użytkownika> Właściwości.

Tworzenie poświadczeń tożsamości dla obciążeń

Aby skonfigurować nowe poświadczenia tożsamości dla obciążenia, wykonaj poniższe kroki:

  1. Pobierz adres URL wystawcy OIDC dla klastra AKS lub klastra Kubernetes z obsługą Arc.

  2. Utwórz tożsamość zarządzaną i zanotuj jej identyfikator klienta i identyfikator dzierżawy.

  3. Ustanów poświadczenie tożsamości federacyjnej dla klastra AKS lub klastra Kubernetes z obsługą Arc. Przykład:

    # 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. Pamiętaj, aby zapewnić odpowiednie uprawnienia do tożsamości obciążenia dla zasobu, który ma zostać ściągnięty przez kontroler źródłowy lub kontroler refleksora obrazów. Na przykład, jeśli korzystasz z usługi Azure Container Registry, upewnij się, że zastosowano Container Registry Repository Reader (dla rejestrów z włączoną obsługą ABAC) albo AcrPull (dla rejestrów, które nie obsługują ABAC).

Nawiązywanie połączenia z prywatnymi rejestrami usługi ACR lub repozytoriami usługi ACR przy użyciu tożsamości obciążenia

Aby korzystać z prywatnego rejestru usługi ACR lub repozytoriów usługi ACR, postępuj zgodnie z instrukcjami w oficjalnej dokumentacji argoCD na potrzeby nawiązywania połączenia z prywatnymi rejestrami usługi ACR. Etykietowanie zasobników, Utwórz poświadczenia tożsamości federacyjnej i Dodaj adnotację do konta usługi zostały wykonane przez rozszerzenie z wdrożeniem Bicep i mogą zostać pominięte.

Uzyskiwanie dostępu do interfejsu użytkownika argoCD

Jeśli nie ma istniejącego kontrolera ruchu przychodzącego dla klastra AKS, interfejs użytkownika ArgoCD można uwidocznić bezpośrednio przy użyciu usługi typu LoadBalancer. Następujące polecenie uwidacznia interfejs użytkownika ArgoCD na porcie 80 i 443.

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

Wdrażanie aplikacji ArgoCD

Po zainstalowaniu rozszerzenia ArgoCD można wdrożyć aplikację przy użyciu interfejsu użytkownika argoCD lub interfejsu wiersza polecenia. W poniższym przykładzie po prostu użyto kubectl apply do wdrożenia magazynu AKS w aplikacji ArgoCD do projektu domyślnego ArgoCD w przestrzeni nazw 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

Aplikacja demonstracyjna sklepu AKS została zainstalowana w pets przestrzeni nazw. Zapoznaj się ze stroną internetową aplikacji, postępując zgodnie z tymi instrukcjami. Pamiętaj, aby odwiedzić adres IP przy użyciu protokołu HTTP, a nie https.

Aktualizowanie konfiguracji rozszerzenia

Mapy konfiguracji ArgoCD można zaktualizować po instalacji i innych ustawieniach konfiguracji rozszerzenia przy użyciu następującego polecenia:

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

Ważne jest, aby zaktualizować mapę konfiguracji ArgoCD za pomocą rozszerzenia, więc ustawienia nie zostaną zastąpione. Zastosowanie szablonu bicep jest alternatywną metodą az cli aktualizacji konfiguracji.

Usuwanie rozszerzenia

Użyj następujących poleceń, aby usunąć rozszerzenie.

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

Dalsze kroki