Руководство. Использование удостоверения рабочей нагрузки с приложением в Служба Azure Kubernetes (AKS)
Служба Azure Kubernetes (AKS) — это управляемая служба Kubernetes, которая позволяет быстро развертывать кластеры Kubernetes и управлять ими. Изучив это руководство, вы:
- Разверните кластер AKS с помощью Azure CLI с издателем OpenID Подключение (OIDC) и управляемым удостоверением.
- Создайте Azure Key Vault и секрет.
- Создайте учетную запись службы Идентификация рабочей нагрузки Microsoft Entra и Kubernetes.
- Настройте управляемое удостоверение для федерации маркеров.
- Разверните рабочую нагрузку и проверьте проверку подлинности с помощью удостоверения рабочей нагрузки.
Подготовка к работе
- В этом руководстве предполагается базовое понимание концепций Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
- Если вы не знакомы с Идентификация рабочей нагрузки Microsoft Entra, ознакомьтесь с Идентификация рабочей нагрузки Microsoft Entra обзором.
- При создании кластера AKS автоматически создается вторая группа ресурсов для хранения ресурсов AKS. Дополнительные сведения см. в разделе Почему с AKS создаются две группы ресурсов?
Необходимые компоненты
- Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
- Для этой статьи требуется версия 2.47.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
- Удостоверение, используемое для создания кластера, должно иметь соответствующие минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в разделе "Параметры доступа и удостоверения" для Служба Azure Kubernetes (AKS).
- Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки, в котором необходимо выставлять счета за ресурсы с помощью команды az account set .
Создание или изменение группы ресурсов
Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure. При создании группы ресурсов вам будет предложено указать расположение. Это расположение хранилища метаданных группы ресурсов и место, где ресурсы выполняются в Azure, если вы не указываете другой регион во время создания ресурса.
В следующем примере создается группа ресурсов с именем myResourceGroup в расположении eastus.
Создайте группу ресурсов с помощью команды az group create.
az group create --name myResourceGroup --location eastus
Следующий пример выходных данных похож на успешное создание группы ресурсов:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null }
Экспорт переменных среды
Чтобы упростить действия по настройке удостоверений, описанные ниже, определяют переменные среды для ссылки на кластер.
Создайте эти переменные с помощью следующих команд. Замените значения по умолчанию для
RESOURCE_GROUP
, ,LOCATION
,SERVICE_ACCOUNT_NAME
,SUBSCRIPTION
USER_ASSIGNED_IDENTITY_NAME
иFEDERATED_IDENTITY_CREDENTIAL_NAME
.export RESOURCE_GROUP="myResourceGroup" export LOCATION="westcentralus" export SERVICE_ACCOUNT_NAMESPACE="default" export SERVICE_ACCOUNT_NAME="workload-identity-sa" export SUBSCRIPTION="$(az account show --query id --output tsv)" export USER_ASSIGNED_IDENTITY_NAME="myIdentity" export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity" export KEYVAULT_NAME="azwi-kv-tutorial" export KEYVAULT_SECRET_NAME="my-secret"
Создание кластера AKS
Создайте кластер AKS с помощью команды az aks create с параметром
--enable-oidc-issuer
для использования издателя OIDC.az aks create -g "${RESOURCE_GROUP}" -n myAKSCluster --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.
Получите URL-адрес издателя OIDC и сохраните его в переменной среды с помощью следующей команды. Замените значение по умолчанию для аргументов
-n
, которое является именем кластера.export AKS_OIDC_ISSUER="$(az aks show -n myAKSCluster -g "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -otsv)"
Переменная должна содержать URL-адрес издателя, аналогичный следующему примеру:
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/
По умолчанию издатель использует базовый URL-адрес
https://{region}.oic.prod-aks.azure.com
, где значение для{region}
совпадений с расположением кластера AKS развертывается в.
Создание Azure Key Vault и секрета
Создайте Azure Key Vault в группе ресурсов, созданной в этом руководстве, с помощью команды az keyvault create .
az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}"
В выходных данных команды будут показаны свойства созданного хранилища ключей. Запишите значения двух указанных ниже свойств.
Name
: имя хранилища, предоставленное параметру--name
.vaultUri
: в примере этоhttps://<your-unique-keyvault-name>.vault.azure.net/
. Необходимо, чтобы приложения, использующие ваше хранилище через REST API, использовали этот URI.
На этом этапе любые операции в этом хранилище ключей может выполнять только учетная запись Azure.
Добавьте секрет в хранилище с помощью команды az keyvault secret set . Пароль — это значение, указанное для переменной
KEYVAULT_SECRET_NAME
среды, и в нем хранится значение Hello!az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
Добавьте URL-адрес Key Vault в переменную
KEYVAULT_URL
среды с помощью команды az keyvault show .export KEYVAULT_URL="$(az keyvault show -g "${RESOURCE_GROUP}" -n ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
Создание управляемого удостоверения и предоставление разрешений на доступ к секрету
Задайте определенную подписку в качестве текущей активной подписки с помощью команды az account set .
az account set --subscription "${SUBSCRIPTION}"
Создайте управляемое удостоверение с помощью команды az identity create .
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
Задайте политику доступа для управляемого удостоверения, чтобы получить доступ к секрету Key Vault с помощью следующих команд.
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
Создание учетной записи службы Kubernetes
Создайте учетную запись службы Kubernetes и заметите ее с идентификатором клиента управляемого удостоверения, созданного на предыдущем шаге, с помощью команды az aks get-credentials . Замените значение по умолчанию для имени кластера и имени группы ресурсов.
az aks get-credentials -n myAKSCluster -g "${RESOURCE_GROUP}"
Скопируйте следующие многострочный ввод в терминал и выполните команду, чтобы создать учетную запись службы.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: annotations: azure.workload.identity/client-id: ${USER_ASSIGNED_CLIENT_ID} name: ${SERVICE_ACCOUNT_NAME} namespace: ${SERVICE_ACCOUNT_NAMESPACE} EOF
Следующие выходные данные похожи на успешное создание удостоверения:
Serviceaccount/workload-identity-sa created
Установка учетных данных федеративного удостоверения
Создайте учетные данные федеративного удостоверения между управляемым удостоверением, издателем учетной записи службы и субъектом с помощью команды az identity federated-credential create .
az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name ${USER_ASSIGNED_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --issuer ${AKS_OIDC_ISSUER} --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
Примечание.
После первоначального добавления учетные данные федеративного удостоверения занимает несколько секунд. Если запрос маркера доступен сразу после добавления учетных данных федеративного удостоверения, может возникнуть сбой в течение нескольких минут, так как кэш заполняется в каталоге старыми данными. Чтобы избежать этой проблемы, можно добавить небольшую задержку после добавления учетных данных федеративного удостоверения.
Развертывание рабочей нагрузки
Разверните модуль pod, ссылающийся на учетную запись службы, созданную на предыдущем шаге, с помощью следующей команды.
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: quick-start namespace: ${SERVICE_ACCOUNT_NAMESPACE} labels: azure.workload.identity/use: "true" spec: serviceAccountName: ${SERVICE_ACCOUNT_NAME} containers: - image: ghcr.io/azure/azure-workload-identity/msal-go name: oidc env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEYVAULT_SECRET_NAME} nodeSelector: kubernetes.io/os: linux EOF
Следующие выходные данные похожи на успешное создание модуля pod:
pod/quick-start created
Проверьте правильность внедрения всех свойств с помощью веб-перехватчика с помощью команды kubectl описать .
kubectl describe pod quick-start
Убедитесь, что модуль pod может получить маркер и получить доступ к секрету из Key Vault с помощью команды kubectl logs .
kubectl logs quick-start
Следующие выходные данные похожи на успешный доступ к маркеру:
I1013 22:49:29.872708 1 main.go:30] "successfully got secret" secret="Hello!"
Очистка ресурсов
Вы можете оставить эти ресурсы на месте. Если эти ресурсы больше не нужны, используйте следующие команды, чтобы удалить их.
Удалите pod с помощью
kubectl delete pod
команды.kubectl delete pod quick-start
Удалите учетную запись службы с помощью
kubectl delete sa
команды.kubectl delete sa "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
Удалите группу ресурсов Azure и все его ресурсы с помощью команды az group delete .
az group delete --name "${RESOURCE_GROUP}"
Следующие шаги
В этом руководстве вы развернули кластер Kubernetes, а затем развернули простое приложение контейнера для тестирования работы с Идентификация рабочей нагрузки Microsoft Entra.
Это руководство предназначено для вводных целей. Рекомендации по созданию полноценных рабочих решений с помощью AKS см. в руководстве по решению AKS.