Использование субъекта-службы со службой Azure Kubernetes

Кластер AKS требует либо субъекта-службы Microsoft Entra, либо управляемого удостоверения для динамического создания других ресурсов Azure, таких как Azure Load Balancer или Реестр контейнеров Azure (ACR).

Примечание.

Мы рекомендуем использовать управляемые удостоверения для проверки подлинности с другими ресурсами в Azure, и они используются по умолчанию для кластера AKS. Дополнительные сведения об использовании управляемого удостоверения в кластере см. в разделе Использование управляемого удостоверения, назначаемого системой.

В этой статье показано, как создать и использовать субъект-службу для кластеров AKS.

Подготовка к работе

Чтобы создать субъект-службу Microsoft Entra, необходимо иметь разрешения на регистрацию приложения в клиенте Microsoft Entra и назначение приложения роли в подписке. Если у вас нет необходимых разрешений, вам необходимо попросить идентификатора Microsoft Entra или администратора подписки назначить необходимые разрешения или предварительно создать субъект-службу для использования с кластером AKS.

Если вы используете субъект-службу из другого клиента Microsoft Entra, при развертывании кластера существуют другие рекомендации. Возможно, у вас нет необходимых разрешений для чтения и записи данных из каталога. Дополнительные сведения см. в статье о том, какие разрешения пользователей по умолчанию доступны в идентификаторе Microsoft Entra ID?

Необходимые компоненты

  • При использовании Azure CLI требуется Azure CLI версии 2.0.59 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
  • Если вы используете Azure PowerShell, вам потребуется Azure PowerShell версии 5.0.0 или более поздней. Чтобы узнать версию, выполните команду Get-InstalledModule -Name Az. Если вам необходимо выполнить установку или обновление, см. статью об установке модуля Azure Az PowerShell.

Создание субъект-службы вручную

  1. Создайте субъект-службу с помощью az ad sp create-for-rbac команды.

    az ad sp create-for-rbac --name myAKSClusterServicePrincipal
    

    Выходные данные должны совпадать со следующим примером выходных данных:

    {
      "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
      "displayName": "myAKSClusterServicePrincipal",
      "name": "http://myAKSClusterServicePrincipal",
      "password": "e763725a-5eee-40e8-a466-dc88d980f415",
      "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
    }
    
  2. Скопируйте значения для appId выходных данных и password из нее. Они используются при создании кластера AKS в следующем разделе.

Указание субъект-службы для кластера AKS

  • Используйте существующий субъект-службу для нового кластера AKS с помощью az aks create команды и используйте --client-secret--service-principal параметры, чтобы указать appId выходные password данные, полученные в предыдущем разделе.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --service-principal <appId> \
        --client-secret <password>
    

    Примечание.

    Если вы используете существующий субъект-службу с настроенным секретом, убедитесь, что секрет не превышает 190 байт.

Делегирование прав доступа другим ресурсам Azure

Чтобы получить доступ к другим ресурсам, можно использовать субъект-службу для кластера AKS. Например, если вы хотите развернуть кластер AKS в существующей подсети виртуальной сети Azure или подключиться к Реестру контейнеров Azure (ACR), необходимо делегировать субъекту-службе доступ к этим ресурсам. Разрешение, предоставленное кластеру с помощью управляемого удостоверения, назначаемого системой, может заполняться в течение 60 минут.

  • Создайте назначение роли с помощью az role assignment create команды. Назначьте appId определенной области, например группе ресурсов или ресурсу виртуальной сети. Роль определяет, какие разрешения у субъекта-службы есть в ресурсе.

    Примечание.

    Для --scope ресурса должен быть полный идентификатор ресурса, например /subscriptions/<guid>/resourceGroups/myResourceGroup или /subscriptions/guid>/resourceGroups/<myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.

    az role assignment create --assignee <appId> --scope <resourceScope> --role Contributor
    

В следующих разделах описываются распространенные делегирования, которые вам может потребоваться назначить.

Реестр контейнеров Azure

Если вы используете Реестр контейнеров Azure (ACR) как хранилище образов контейнера, необходимо предоставить субъекту-службе разрешения для кластера AKS на чтение и извлечение образов. Мы рекомендуем использовать az aks create или az aks update команду для интеграции с реестром и назначить соответствующую роль субъекту-службе. Подробные инструкции см. в разделе Аутентификация с помощью Реестра контейнеров Azure из службы контейнеров Azure.

Сеть

Вы можете использовать расширенное сетевое взаимодействие, где виртуальная сеть и подсеть или общедоступные IP-адреса находятся в другой группе ресурсов. Назначьте встроенную роль Участник сетей в подсети виртуальной сети. Кроме того, можно создать настраиваемую роль с разрешениями на доступ к сетевым ресурсам в этой группе ресурсов. Дополнительные сведения см. в разделе Разрешения службы AKS.

Хранилище

Если вам нужно получить доступ к существующим ресурсам диска в другой группе ресурсов, назначьте один из следующих наборов разрешений роли:

Экземпляры контейнеров Azure

Если вы используете интеграцию Virtual Kubelet и AKS и решили запустить службу "Экземпляры контейнеров Azure" (ACI) в группе ресурсов, отличной от группы для кластера AKS, предоставьте субъекту-службе кластера AKS разрешения Участник на доступ к группе ресурсов ACI.

Дополнительные рекомендации

При использовании AKS и субъекта-службы Microsoft Entra рассмотрите следующее:

  • Субъект-служба для Kubernetes является частью конфигурации кластера, но не используйте это удостоверение для развертывания кластера.
  • По умолчанию учетные данные субъекта-службы действительны в течение одного года. Вы можете обновить или сменить учетные данные субъекта-службы в любое время.
  • Каждый субъект-служба связан с приложением Microsoft Entra. Субъект-службу для кластера Kubernetes можно связать с любым допустимым именем приложения Microsoft Entra (например: https://www.contoso.org/example). URL-адрес приложения не обязательно должен быть реальной конечной точкой.
  • При указании идентификатора клиента субъект-службы используйте значение appId.
  • На виртуальных машинах узла агента в кластере Kubernetes учетные данные субъекта-службы хранятся в /etc/kubernetes/azure.json файле.
  • При удалении кластера AKS, созданного с помощью az aks create команды, созданный субъект-служба не удаляется автоматически.
    • Чтобы удалить субъект-службу, выполните запрос к servicePrincipalProfile.clientId кластера и удалите его с помощью az ad sp delete команды. Замените значения параметра -g для имени группы ресурсов и -n параметра для имени кластера:

      az ad sp delete --id $(az aks show -g myResourceGroup -n myAKSCluster --query servicePrincipalProfile.clientId -o tsv)
      

Устранить неполадки

Azure CLI кэширует учетные данные субъекта-службы для кластеров AKS. Если срок действия этих учетных данных истекает, во время развертывания кластера AKS возникают ошибки. Если вы выполните az aks create команду и получите сообщение об ошибке, аналогичное приведенному ниже, это может указывать на проблему с учетными данными кэшированного субъекта-службы:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

Вы можете проверка дату окончания срока действия учетных данных субъекта-службы с помощью az ad app credential list команды с запросом"[].endDateTime".

az ad app credential list --id <app-id> --query "[].endDateTime" -o tsv

Срок действия учетных данных субъекта-службы по умолчанию составляет один год. Если учетные данные старше одного года, можно сбросить существующие учетные данные или создать новый субъект-службу.

Общие сведения об устранении неполадок с помощью Azure CLI

Azure CLI может выполняться в нескольких средах оболочки, но с небольшими вариантами формата. Если вы столкнулись с непредвиденными результатами команд Azure CLI, см. статью Как успешно использовать Azure CLI.

Следующие шаги

Дополнительные сведения о субъектах-службах Microsoft Entra см. в разделе "Объекты приложения и субъекта-службы".

Сведения об обновлении учетных данных см. в статье Обновление или смена учетных данных субъекта-службы в AKS.