Руководство. Использование удостоверения рабочей нагрузки с приложением в Служба 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, SUBSCRIPTIONUSER_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

  1. Создайте кластер 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.

  2. Получите 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 и секрета

  1. Создайте 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.

  2. Добавьте секрет в хранилище с помощью команды az keyvault secret set . Пароль — это значение, указанное для переменной KEYVAULT_SECRET_NAME среды, и в нем хранится значение Hello!

    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
    
  3. Добавьте 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)"
    

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

  1. Задайте определенную подписку в качестве текущей активной подписки с помощью команды az account set .

    az account set --subscription "${SUBSCRIPTION}"
    
  2. Создайте управляемое удостоверение с помощью команды az identity create .

    az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
    
  3. Задайте политику доступа для управляемого удостоверения, чтобы получить доступ к секрету 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

  1. Создайте учетную запись службы Kubernetes и заметите ее с идентификатором клиента управляемого удостоверения, созданного на предыдущем шаге, с помощью команды az aks get-credentials . Замените значение по умолчанию для имени кластера и имени группы ресурсов.

    az aks get-credentials -n myAKSCluster -g "${RESOURCE_GROUP}"
    
  2. Скопируйте следующие многострочный ввод в терминал и выполните команду, чтобы создать учетную запись службы.

    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}
    

    Примечание.

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

Развертывание рабочей нагрузки

  1. Разверните модуль 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
    
  2. Проверьте правильность внедрения всех свойств с помощью веб-перехватчика с помощью команды kubectl описать .

    kubectl describe pod quick-start
    
  3. Убедитесь, что модуль pod может получить маркер и получить доступ к секрету из Key Vault с помощью команды kubectl logs .

    kubectl logs quick-start
    

    Следующие выходные данные похожи на успешный доступ к маркеру:

    I1013 22:49:29.872708       1 main.go:30] "successfully got secret" secret="Hello!"
    

Очистка ресурсов

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

  1. Удалите pod с помощью kubectl delete pod команды.

    kubectl delete pod quick-start
    
  2. Удалите учетную запись службы с помощью kubectl delete sa команды.

    kubectl delete sa "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
    
  3. Удалите группу ресурсов Azure и все его ресурсы с помощью команды az group delete .

    az group delete --name "${RESOURCE_GROUP}"
    

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

В этом руководстве вы развернули кластер Kubernetes, а затем развернули простое приложение контейнера для тестирования работы с Идентификация рабочей нагрузки Microsoft Entra.

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