Поделиться через


Руководство по развертыванию приложений с помощью GitOps с ArgoCD

В этом руководстве описывается, как использовать GitOps в кластере Kubernetes. GitOps с ArgoCD включен как расширение кластера в кластерах Kubernetes с поддержкой Azure Arc или кластерах Службы Azure Kubernetes (AKS). С помощью GitOps вы можете использовать репозиторий Git в качестве источника истины для конфигурации кластера и развертывания приложений.

Это важно

GitOps с ArgoCD в настоящее время находится в предварительной версии. Смотрите Дополнительные условия использования для предварительных версий Microsoft Azure, которые содержат юридические положения, применимые к функциям Azure, находящимся в бета-версии, предварительной версии или еще не представленным для всеобщего пользования. Для поддержки расширений GitOps попробуйте расширение GitOps с помощью Flux.

Подсказка

Хотя источник в этом руководстве является репозиторием Git, ArgoCD поддерживает другие распространенные источники файлов, такие как Helm и Open Container Initiative (OCI).

Предпосылки

Чтобы развернуть приложения с помощью GitOps, вам потребуется кластер Kubernetes с поддержкой Azure Arc или кластер AKS:

Кластеры Kubernetes с поддержкой Azure Arc

Кластеры Службы Azure Kubernetes

  • Кластер AKS на основе MSI, который введён в эксплуатацию.

    Это важно

    Кластер AKS должен быть создан с использованием управляемого удостоверения службы (MSI), а не служебного принципала (SPN), чтобы это расширение могло работать. Для новых кластеров AKS, созданных с помощью az aks create, кластер по умолчанию основан на MSI. Чтобы преобразовать SPN-кластеры в MSI, выполните команду az aks update -g $RESOURCE_GROUP -n $CLUSTER_NAME --enable-managed-identity. Дополнительные сведения см. в разделе Об использовании управляемого удостоверения в AKS.

  • Разрешения на чтение и запись для типа ресурса Microsoft.ContainerService/managedClusters.

Общие для обоих типов кластеров

  • Разрешения на чтение и запись для этих типов ресурсов:

    • Microsoft.KubernetesConfiguration/extensions
  • Azure CLI 2.15 или более поздней версии. Установите Azure CLI или используйте следующие команды для обновления до последней версии:

    az version
    az upgrade
    
  • Клиент командной строки Kubernetes, kubectl. kubectl уже установлен, если вы используете Azure Cloud Shell.

    Установите kubectl локально с помощью az aks install-cli команды:

    az aks install-cli
    
  • Регистрация следующих поставщиков ресурсов Azure:

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

    Регистрация — это асинхронный процесс, который должен завершиться в течение 10 минут. Чтобы отслеживать процесс регистрации, используйте следующую команду:

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

Поддержка версий и регионов

В настоящее время GitOps поддерживается во всех регионах, поддерживаемых Kubernetes с поддержкой Azure Arc. В настоящее время GitOps доступна в некоторых регионах, поддерживаемых AKS. Служба GitOps добавляет новые поддерживаемые регионы на регулярной основе.

Требования к сети

Для работы агентов GitOps требуется исходящее TCP-подключение (исходящий трафик) к источнику репозитория через порт 22 (SSH) или 443 (HTTPS). Агенты также требуют доступа к следующим исходящим URL-адресам:

Конечная точка (DNS) Описание
https://management.azure.com Требуется для взаимодействия агента со службой конфигурации Kubernetes.
https://<region>.dp.kubernetesconfiguration.azure.com Конечная точка плоскости данных, через которую агент будет отправлять сведения о состоянии и извлекать сведения о конфигурации. Зависит от <region> (поддерживаемых регионов, упомянутых ранее).
https://login.microsoftonline.com Требуется для получения и обновления токенов Azure Resource Manager.
https://mcr.microsoft.com Требуется для загрузки образов контейнеров для контроллеров.

Включение расширений CLI

Установите последние пакеты расширений k8s-configuration и k8s-extension для CLI.

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

Чтобы обновить эти пакеты до последних версий:

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

Чтобы просмотреть список всех установленных расширений Azure CLI и их версий, выполните следующую команду:

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

Создание расширения GitOps (ArgoCD) (простая установка)

Установка GitOps ArgoCD поддерживает многотенантность в режиме высокой доступности и поддерживает идентификацию рабочей нагрузки.

Это важно

Режим высокой доступности — это конфигурация по умолчанию и требует наличия трех узлов в кластере для установки. Команда ниже добавляет --config deployWithHighAvailability=false для установки расширения на одном узле.

Эта команда создает простую конфигурацию, устанавливая компоненты ArgoCD в новое argocd пространство имен с доступом на уровне кластера. Доступ на уровне кластера позволяет обнаруживать определения приложений ArgoCD в любом пространстве имен, указанном в конфигурации configmap ArgoCD в кластере. Например: 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"

Если вы хотите ограничить доступ ArgoCD к конкретному пространству имен, используйте --config namespaceInstall=true вместе с параметрами --target-namespace <namespace>. Эта команда установки создает новое <namespace> пространство имен и устанавливает компоненты ArgoCD в объекте <namespace>. Команда установки также позволяет установить несколько экземпляров ArgoCD в одном кластере. Определения приложений ArgoCD в этой конфигурации работают только в <namespace> пространстве имен.

Создание расширения GitOps (ArgoCD) с идентификацией рабочей нагрузки

Альтернативный метод установки, рекомендуемый для использования в рабочей среде, — идентификация рабочей нагрузки. Этот метод позволяет использовать удостоверения идентификаторов Microsoft Entra для проверки подлинности в ресурсах Azure без необходимости управлять секретами или учетными данными в репозитории Git. Эта установка использует аутентификацию с использованием идентификатора рабочей нагрузки, включенную в OSS версию 3.0.0-rc2 или более позднюю версию ArgoCD.

Это важно

Режим высокой доступности — это конфигурация по умолчанию и требует наличия трех узлов в кластере для установки. Добавьте --config deployWithHighAvailability=false для установки расширения на одном узле.

Чтобы создать расширение с идентификацией рабочей нагрузки, сначала замените следующие переменные вашими значениями в этом шаблоне Bicep.

var clusterName = '<aks-or-arc-cluster-name>'

var workloadIdentityClientId = 'replace-me##-##-###-###'
var ssoWorkloadIdentityClientId = 'replace-me##-##-###-###'

var url = 'https://<public-ip-for-argocd-ui>/auth/callback'
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.Microsoft 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 можно создать с помощью этой команды:

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

Параметры

clusterName — это имя кластера Kubernetes с поддержкой AKS или Arc.

workloadIdentityClientId и ssoWorkloadIdentityClientId являются идентификаторами клиента для управляемого удостоверения, которые требуется использовать для идентификации рабочей нагрузки. Используемый для аутентификации пользовательского интерфейса ArgoCD ssoWorkloadIdentityClientId и для идентификации рабочей нагрузки компонентов ArgoCD workloadIdentityClientId. Для получения дополнительной информации о настройке и конфигурации ssoWorkloadIdentityClientId посетите Регистрация приложения Microsoft Entra ID с использованием OIDC.

url — общедоступный IP-адрес пользовательского интерфейса ArgoCD. В кластере нет общедоступного IP-адреса или доменного имени, если только у кластера уже есть предоставленный клиентом ингресс контроллер. В этом случае правило входящего трафика необходимо добавить в пользовательский интерфейс ArgoCD после развертывания.

oidcConfig — замените <your-tenant-id> идентификатором клиента идентификатора Microsoft Entra. Замените <same-value-as-ssoWorkloadIdentityClientId-above> значением того же значения, что ssoWorkloadIdentityClientId.

policy переменная — это argocd-rbac-cm configmap параметры ArgoCD. g, replace-me##-argocd-ui-entra-group-admin-id — это идентификатор группы Microsoft Entra, предоставляющий администратору доступ к пользовательскому интерфейсу ArgoCD. Идентификатор группы Microsoft Entra можно найти на портале Azure в разделах Microsoft Entra ID > Группы >имя-вашей-группы> Свойства. Вместо идентификатора группы Microsoft Entra можно использовать идентификатор пользователя Microsoft Entra. Идентификатор пользователя Microsoft Entra можно найти на портале Azure в разделе Microsoft Entra ID > Пользователи >your-user-name> Свойства.

Создание учетных данных идентификации рабочих нагрузок

Чтобы настроить новые учетные данные идентификации рабочей нагрузки, выполните следующие действия.

  1. Получите URL-адрес издателя OIDC для кластера AKS или кластера Kubernetes с поддержкой Arc.

  2. Создайте управляемое удостоверение и запишите его идентификатор клиента и идентификатор арендатора.

  3. Создайте учетные данные федеративной идентичности для кластера AKS или кластера Kubernetes с поддержкой Arc. Рассмотрим пример.

    # 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. Не забудьте предоставить соответствующие разрешения для удостоверения рабочей нагрузки для ресурса, который требуется извлечь из исходного контроллера или контроллера отражателя изображений. Например, если используется реестр контейнеров Azure, убедитесь, что были применены Container Registry Repository Reader (для реестров с поддержкой ABAC) или AcrPull (для реестров, не поддерживающих ABAC).

Подключитесь к частным реестрам ACR или репозиториям ACR с помощью идентификации рабочей нагрузки

Чтобы использовать частный реестр ACR или репозитории ACR, следуйте инструкциям в официальной документации По ArgoCD для подключения к частным реестрам ACR. Назначение меток pod, Создание федеративных учетных данных и Добавление аннотации к учетной записи службы были завершены расширением с развертыванием Bicep и могут быть пропущены.

Доступ к пользовательскому интерфейсу ArgoCD

Если для кластера AKS нет существующего контроллера входящего трафика, пользовательский интерфейс ArgoCD можно предоставить непосредственно с помощью службы LoadBalancer. Следующая команда предоставит пользовательский интерфейс ArgoCD через порт 80 и 443.

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

Развертывание приложения ArgoCD

Теперь, когда установлено расширение ArgoCD, можно развернуть приложение с помощью пользовательского интерфейса ArgoCD или CLI. В следующем примере просто используется kubectl apply для развертывания хранилища AKS внутри приложения ArgoCD в проекте ArgoCD по умолчанию в 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

Демонстрационное приложение AKS было установлено в пространство имен pets. Просмотрите веб-страницу приложения , следуя этим инструкциям. Не забудьте посетить IP-адрес, используя http, а не https.

Обновление конфигурации расширения

Конфигмапу ArgoCD можно обновить после установки и параметров конфигурации расширений с помощью следующей команды:

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

Важно обновить карту конфигурации ArgoCD через расширение, поэтому параметры не перезаписываются. Применение шаблона bicep является альтернативой az cli для обновления конфигурации.

Удаление расширения

Чтобы удалить расширение, используйте следующие команды.

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

Дальнейшие шаги

  • Отправляйте запросы на устранение проблем и добавление функций в репозиторий Azure/AKS и обязательно включайте слово "ArgoCD" в описание или заголовок.
  • Ознакомьтесь с примером кода инженерииAKS-Platform, который развертывает OSS ArgoCD с Backstage и Cluster API Provider для Azure (CAPZ) или Crossplane.