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

Для доступа к другим ресурсам Azure Active Directory (Azure AD) кластеру AKS требуется либо субъект-служба Azure Active Directory, либо управляемое удостоверение. Субъект-служба или управляемое удостоверение необходимы для динамического создания и управления другими ресурсами Azure, например подсистемой балансировки нагрузки Azure или реестром контейнеров (ACR).

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

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

Перед началом

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

Если вы используете субъект-службу из другого клиента Azure AD, есть другие рекомендации о разрешениях, доступных при развертывании кластера. Возможно, у вас нет необходимых разрешений для чтения и записи данных из каталога. Подробности: Разрешения пользователя по умолчанию в Azure Active Directory.

Предварительные требования

Azure CLI 2.0.59 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

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

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

Чтобы вручную создать субъект-службу с помощью Azure CLI, используйте команду az ad sp create-for-rbac.

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

Результат будет похож на следующий пример. Скопируйте значения appId и password. Эти значения используются при создании кластера AKS в следующем разделе.

{
  "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
  "displayName": "myAKSClusterServicePrincipal",
  "name": "http://myAKSClusterServicePrincipal",
  "password": "e763725a-5eee-40e8-a466-dc88d980f415",
  "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}

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

Чтобы использовать существующую субъект-службу при создании кластера AKS с помощью команды az aks create, используйте параметры --service-principal и --client-secret, указывающие appId и password из выходных данных команды az ad sp create-for-rbac.

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

Примечание

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

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

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

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

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

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

Примечание

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

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

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

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

Сеть

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

Память

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

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

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

Другие замечания

При использовании AKS и субъекта-службы Azure AD учитывайте следующее:

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

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

Диагностика

Учетные данные субъекта-службы для кластера AKS кэшируются в Azure CLI. Если срок действия этих учетных данных истек, во время развертывания кластера 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'.

Проверьте срок хранения файла учетных данных с помощью следующей команды:

ls -la $HOME/.azure/aksServicePrincipal.json

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

Дальнейшие действия

Дополнительные сведения о субъект-службах Azure Active Directory см. в статье Объекты приложения и субъекта-службы в Azure Active Directory.

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