Поделиться через


Устранение сбоев "az aks command invoke"

В этой статье описывается, как разрешить az aks command invoke failures in Microsoft Azure CLI, чтобы вы могли успешно подключиться к любому кластеру Служба Azure Kubernetes (AKS), особенно к частному кластеру AKS.

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

Методы подключения Дополнительный компонент конфигурации
Виртуальная сеть Виртуальная частная сеть (VPN)
Пиринговая сеть Azure ExpressRoute
Частная конечная точка Jumpbox

Команда az aks command invoke Azure CLI — это альтернативный способ подключения к кластеру, который не требует дополнительных компонентов конфигурации.

При выполнении az aks command invoke команды Azure CLI автоматически создает command-<ID> pod в aks-command пространстве имен для доступа к кластеру AKS и получения необходимых сведений.

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

Симптомы

В следующей таблице перечислены распространенные az aks command invoke сообщения об ошибках. Каждое сообщение об ошибке содержит ссылку на раздел, описывающий причину возникновения ошибки и способ ее устранения.

Сообщение об ошибке Ссылка
Операция вернула недопустимое состояние "Не найдено" Причина 1. Невозможно создать модуль pod из-за ограничений узлов или ресурсов.
Не удалось выполнить команду в управляемом кластере из-за сбоя Kubernetes. подробности: веб-перехватчик "validation.gatekeeper.sh" отклонил запрос: <сообщение для конкретной политики> Причина 2. Политика Azure не разрешает создание модуля pod
Ошибка с сервера (запрещено): пространства имен запрещены: пользователь "<ID>" не может перечислить ресурс "ресурс<>" в группе API "" в области кластера Причина 3. Обязательные роли не предоставляются
Не удалось подключиться к MSI. Убедитесь, что MSI настроен правильно.

Возвращает запрос маркера: ответ [400];
Причина 4. Возникла проблема Cloud Shell

Причина 1. Невозможно создать модуль pod из-за ограничений узлов или ресурсов.

Операция возвращает Not Found состояние, так как command-<ID> модуль pod не может достичь успешного состояния, например Running. (Во многих случаях модуль pod остается в Pending состоянии.) В этом случае узлы не могут планировать модуль pod. Этот сценарий может иметь различные причины, такие как следующие причины:

  • Ограничения ресурсов
  • Узлы с состоянием или SchedulingDisabled состоянием NotReady
  • Узлы, у которых есть ограничения, которые модуль pod не может терпеть
  • Другие причины

Решение 1. Измените конфигурацию таким образом, чтобы можно было запланировать и запустить pod.

Убедитесь, что command-<ID> модуль pod можно запланировать и запустить, изменив конфигурацию. Например:

  • Увеличьте размер пула узлов и убедитесь, что у него нет ограничений для уединения pod, таких как command-<ID> фрагменты, чтобы модуль pod можно было развернуть.
  • Настройте запросы ресурсов и ограничения в спецификациях pod.

Причина 2. Политика Azure не разрешает создание модуля pod

Если у вас есть определенные политики Azure, az aks command invoke команда может завершиться ошибкой из-за запрещенной конфигурации в модуле command-<ID> pod. Например, у вас может быть политика Azure, требующая корневой файловой системы только для чтения или другой конкретной конфигурации.

Решение 2. Исключение пространства имен для политик, которые запрещают создание pod

Рекомендуется исключить aks-command пространство имен для связанных политик Azure, которые не позволяют создавать pod. Дополнительные сведения об исключении см. в разделе "Общие сведения о области" в Политика Azure

Чтобы исключить Политика Azure:

  1. В портал Azure найдите и выберите политику.

  2. В области навигации политики найдите раздел "Разработка" и выберите "Назначения".

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

  4. На странице назначения политики для этого назначения выберите "Изменить назначение".

  5. Перейдите на вкладку Параметры.

  6. Снимите флажок "Только показать параметры, необходимые для ввода или проверки".

  7. В поле исключений пространства имен добавьте пространство имен aks-command в список пространств имен, которые необходимо исключить.

Кроме того, если политика не является встроенной политикой, можно проверить конфигурацию command-<ID> модуля pod и настроить политику по мере необходимости. Чтобы изучить конфигурацию YAML pod, выполните следующую команду:

kubectl get pods command-<ID> --namespace aks-command --output yaml

Пространство имен можно исключить aks-command из ограничивающих политик, выполнив следующую команду:

az policy exemption create --name ExemptAksCommand --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.ContainerService/managedClusters/{aks-cluster} --policyAssignment /subscriptions/{subscription-id}/providers/Microsoft.Authorization/policyAssignments/{policy-assignment-id}

Причина 3. Обязательные роли не предоставляются

Чтобы использовать az aks command invoke команду, необходимо иметь доступ к следующим ролям в кластере:

  • Microsoft.ContainerService/managedClusters/runCommand/action
  • Microsoft.ContainerService/managedClusters/commandResults/read

Если у вас нет этих ролей, az aks command invoke команда не может получить необходимые сведения.

Решение 3. Добавление необходимых ролей

Проблему можно устранить следующим способом.

  1. Добавьте и Microsoft.ContainerService/managedClusters/runCommand/action Microsoft.ContainerService/managedClusters/commandResults/read роли.

  2. Назначьте пользователю необходимые роли:

    az role assignment create --assignee {user-principal-name} --role "Azure Kubernetes Service Cluster User Role" --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.ContainerService/managedClusters/{aks-cluster}
    

Причина 4. Возникла проблема Cloud Shell

Команда az aks command invoke не обрабатывается должным образом при выполнении непосредственно в среде Azure Cloud Shell . Это известная проблема в Cloud Shell.

Решение 4a. Сначала выполните команду az login

В Cloud Shell выполните команду az login перед выполнением az aks command invoke команды. Например:

az login
az aks command invoke --resource-group {resource-group} --name {aks-cluster} --command "kubectl get pods"

Решение 4b. Выполните команду на локальном компьютере или виртуальной машине

az aks command invoke Выполните команду на локальном компьютере или любой виртуальной машине с установленным Azure CLI.

Заявление об отказе от ответственности за сведения о продуктах сторонних производителей

В этой статье упомянуты программные продукты независимых производителей. Корпорация Microsoft не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.

Свяжитесь с нами для получения помощи

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