Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве описывается, как использовать 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
Кластер Kubernetes, подключенный через Azure Arc, который активен и работает.
Узнайте, как подключить кластер Kubernetes к Azure Arc. Если необходимо подключиться через исходящий прокси-сервер, убедитесь, что агенты Arc устанавливаются с параметрами прокси-сервера.
Разрешения на чтение и запись для типа ресурса
Microsoft.Kubernetes/connectedClusters
.
Кластеры Службы 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> Свойства.
Создание учетных данных идентификации рабочих нагрузок
Чтобы настроить новые учетные данные идентификации рабочей нагрузки, выполните следующие действия.
Получите URL-адрес издателя OIDC для кластера AKS или кластера Kubernetes с поддержкой Arc.
Создайте управляемое удостоверение и запишите его идентификатор клиента и идентификатор арендатора.
Создайте учетные данные федеративной идентичности для кластера 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
Не забудьте предоставить соответствующие разрешения для удостоверения рабочей нагрузки для ресурса, который требуется извлечь из исходного контроллера или контроллера отражателя изображений. Например, если используется реестр контейнеров 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.