Устранение сбоев "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 и получения необходимых сведений.
Предварительные требования
Средство Kubernetes kubectl . Чтобы установить kubectl с помощью Azure CLI, выполните команду az aks install-cli .
Симптомы
В следующей таблице перечислены распространенные 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:
В портал Azure найдите и выберите политику.
В области навигации политики найдите раздел "Разработка" и выберите "Назначения".
В таблице назначений найдите строку, содержащую имя назначения, которое нужно изменить, а затем выберите имя назначения.
На странице назначения политики для этого назначения выберите "Изменить назначение".
Перейдите на вкладку Параметры.
Снимите флажок "Только показать параметры, необходимые для ввода или проверки".
В поле исключений пространства имен добавьте пространство имен 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. Добавление необходимых ролей
Проблему можно устранить следующим способом.
Добавьте и
Microsoft.ContainerService/managedClusters/runCommand/action
Microsoft.ContainerService/managedClusters/commandResults/read
роли.Назначьте пользователю необходимые роли:
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.