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


Общие сведения об устранении неполадок надстройки сетки службы Istio

В этой статье рассматриваются общие стратегии (которые используют kubectl, istioctlи другие средства) для устранения неполадок, связанных с надстройкой сетки службы Istio для Microsoft Служба Azure Kubernetes (AKS). В этой статье также приведен список возможных сообщений об ошибках, причины возникновения ошибок и рекомендации по их устранению.

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

  • Azure CLI

  • Средство Kubernetes kubectl или аналогичное средство для подключения к кластеру

    Примечание: Чтобы установить kubectl с помощью Azure CLI, выполните команду az aks install-cli .

  • Средство командной строки Istio istioctl

  • Средство URL-адреса клиента (cURL)

Контрольный список для устранения неполадок: использование kubectl

В следующих шагах по устранению неполадок используются различные kubectl команды для отладки завислых модулей pod или сбоев в управляющей программе Istio (Istiod).

Шаг 1. Получение журналов pod Istiod

Получите журналы pod Istiod, выполнив следующую команду kubectl logs :

kubectl logs --selector app=istiod --namespace aks-istio-system

Шаг 2. Отказ от объекта pod (удаление)

Возможно, у вас есть веская причина для перезапуска модуля pod. Так как Istiod является развертыванием, можно просто удалить pod, выполнив команду kubectl delete :

kubectl delete pods <istio-pod> --namespace aks-istio-system

Pod Istio управляется развертыванием, поэтому он автоматически создается повторно и повторно развертывается после удаления модуля pod Istio напрямую. Таким образом, удаление pod является альтернативным методом перезапуска pod.

Примечание.

Кроме того, можно перезапустить развертывание напрямую, выполнив следующую команду kubectl rollout restart :

kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system

Шаг 3. Проверка состояния ресурсов

Если istiod не запланирован или pod не отвечает, может потребоваться проверка состояние развертывания и наборы реплика. Для этого выполните команду kubectl get :

kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]

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

Шаг 4. Получение настраиваемых типов определений ресурсов

Чтобы просмотреть типы пользовательских определений ресурсов (CRD), которые использует Istio, выполните kubectl get команду :

kubectl get crd | grep istio

Затем выполните следующую kubectl get команду, чтобы получить список всех имен ресурсов, основанных на конкретном CRD:

kubectl get <crd-type> --all-namespaces

Шаг 5. Просмотр списка объектов pod Istiod

Просмотрите список модулей pod Istiod, выполнив следующую kubectl get команду:

kubectl get pod --namespace aks-istio-system --output yaml

Шаг 6. Получение дополнительных сведений о конфигурации Envoy

Если у вас возникли проблемы с подключением между модулями pod, получите дополнительные сведения о конфигурации Envoy, выполнив следующую команду kubectl exec для порта администрирования Envoy:

kubectl exec --namespace <pod-namespace> \
    "$(kubectl get pods \
        --namespace <pod-namespace> \
        --selector app=sleep \
        --output jsonpath='{.items[0].metadata.name}')" \
    --container sleep \
-- curl -s localhost:15000/clusters

Шаг 7. Получение журналов боковой панели для исходного и целевого боковых вагонов

Получите журналы бокового модуля для исходного и целевого боковых вагонов, выполнив следующую kubectl logs команду два раза (первый раз для исходного pod, а второй — для целевого модуля pod):

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

Контрольный список для устранения неполадок: использование istioctl

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

Предупреждение

Некоторые istioctl команды отправляют запросы ко всем боковым вагонам.

Примечание.

Прежде чем начать, обратите внимание, что для большинства istioctl команд требуется знать редакцию уровня управления. Эти сведения можно получить из суффикса развертываний Istiod или pod, либо выполнить следующую команду istioctl tag list :

istioctl tag list

Шаг 1. Убедитесь, что Istio установлен правильно

Чтобы проверить правильность установки надстройки Istio, выполните следующую команду istioctl verify-install :

istioctl verify-install --istioNamespace aks-istio-system --revision <tag>

Шаг 2. Анализ пространств имен

Чтобы проанализировать все пространства имен или определенное пространство имен, выполните следующую команду istioctl analyze :

istioctl analyze --istioNamespace aks-istio-system \
    --revision <tag> \
    [--all-namespaces | --namespace <namespace-name>] \
    [--failure-threshold {Info | Warning | Error}]

Шаг 3. Получение состояния прокси-сервера

Чтобы получить состояние прокси-сервера, выполните следующую команду istioctl proxy-status :

istioctl proxy-status pod/<pod-name> \
    --istioNamespace aks-istio-system \
    --revision <tag> \
    --namespace <pod-namespace>

Шаг 4. Скачивание конфигурации прокси-сервера

Чтобы скачать конфигурацию прокси-сервера, выполните следующую команду istioctl proxy-config all :

istioctl proxy-config all <pod-name> \
    --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --output json

Шаг 5. Проверка состояния внедрения

Чтобы проверка состояние внедрения ресурса, выполните следующую экспериментальную команду istioctl проверка-inject:

istioctl experimental check-inject --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --labels <label-selector> | <pod-name> | deployment/<deployment-name>

Шаг 6. Получение полного отчета об ошибке

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

Чтобы получить отчет об ошибке, выполните следующую команду istioctl bug-report :

istioctl bug-report --istioNamespace aks-istio-system \
    [--include <namespace-1>[, <namespace-2>[, ...]]]

Контрольный список для устранения неполадок: прочие проблемы

Шаг 1. Устранение проблем с использованием ресурсов

Если в Envoy используется большое потребление памяти, дважды проверка параметры Envoy для сбора статистических данных. Если вы настраиваете метрики Istio с помощью MeshConfig, помните, что некоторые метрики могут иметь высокую кратность и, следовательно, создавать больший объем памяти. Другие поля в MeshConfig, такие как параллелизм, влияют на загрузку ЦП и должны быть настроены тщательно.

По умолчанию Istio добавляет сведения обо всех службах, которые находятся в кластере, в каждую конфигурацию Envoy. Sidecar может ограничить область этого добавления только для рабочих нагрузок в определенных пространствах имен. Дополнительные сведения см. в разделе Отслеживание этой проблемы памяти прокси-сервера Istio.

Например, следующее Sidecar определение в aks-istio-system пространстве имен ограничивает конфигурацию Envoy для всех прокси-серверов в сетке aks-istio-system и других рабочих нагрузок в том же пространстве имен, что и конкретное приложение.

apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: sidecar-restrict-egress
  namespace: aks-istio-system  # Needs to be deployed in the root namespace.
spec:
  egress:
  - hosts:
    - "./*"
    - "aks-istio-system/*"

Вы также можете попробовать использовать параметр Istio discoverySelectors в MeshConfig. Параметр discoverySelectors содержит массив селекторов Kubernetes и может ограничить осведомленность Istiod определенными пространствами имен (в отличие от всех пространств имен в кластере). Дополнительные сведения см. в разделе Использование селекторов обнаружения для настройки пространств имен для сетки службы Istio.

Шаг 2. Устранение проблем с неправильной настройкой трафика и системы безопасности

Чтобы устранить распространенные проблемы с управлением трафиком и неправильной настройкой безопасности, с которыми часто сталкиваются пользователи Istio, см. статьи Проблемы управления трафиком и Проблемы безопасности на веб-сайте Istio.

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

Шаг 3. Предотвращение перегрузки CoreDNS

Проблемы, связанные с перегрузкой CoreDNS, могут потребовать изменения определенных параметров DNS Istio, таких как dnsRefreshRate поле в определении Istio MeshConfig.

Шаг 4. Исправление условий гонки pod и sidecar

Если модуль pod приложения запускается до запуска бокового модуля Envoy, приложение может перестать отвечать на запросы или перезапустить. Инструкции по устранению этой проблемы см. в статье Pod или контейнеры начинаются с проблем с сетью, если istio-proxy не готов. В частности, установка holdApplicationUntilProxyStarts поля MeshConfig в defaultConfigtrue значение может помочь предотвратить эти условия гонки.

Сообщения об ошибках

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

Error Reason Рекомендации
Azure service mesh is not supported in this region Эта функция недоступна в регионе во время предварительной версии (она доступна в общедоступном облаке, но не в национальном облаке). См. общедоступную документацию по этой функции в поддерживаемых регионах.
Missing service mesh mode: {} Вы не задали свойство mode в профиле сетки службы запроса управляемого кластера. В поле managedClusterServiceMeshProfile запроса API задайте для свойства значение modeIstio.
Invalid istio ingress mode: {} Недопустимое значение для режима входящего трафика устанавливается при добавлении входящего трафика в профиле сетки службы. Задайте для режима входящего трафика в запросе API значение External или Internal.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Вы попытались создать слишком много входящих данных в кластере. Create не более одного внешнего входящего трафика и одного внутреннего входящего трафика в кластере.
Istio profile is missing even though Service Mesh mode is Istio Вы включили надстройку Istio без предоставления профиля Istio. При включении надстройки Istio укажите сведения о конкретном компоненте (шлюз входящего трафика, подключаемый ЦС) для профиля Istio и конкретной редакции.
Istio based Azure service mesh is incompatible with feature %s Вы попытались использовать другое расширение, надстройку или функцию, которая в настоящее время несовместима с надстройкой Istio (например, Open Service Mesh). Прежде чем включить надстройку Istio, сначала отключите другую функцию и очистите все соответствующие ресурсы.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority Вы не указали все необходимые параметры для подключаемого ЦС. Предоставьте все необходимые параметры для функции подключаемого центра сертификации (ЦС) (дополнительные сведения см. в разделе Настройка надстройки сетки служб на основе Istio с помощью подключаемых сертификатов ЦС).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Вы не включили надстройку AKS Secrets-Store CSI Driver, прежде чем использовать подключаемый ЦС. Настройте Azure Key Vault перед использованием функции подключаемого ЦС.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' Вы использовали недопустимый идентификатор ресурса AKS. Чтобы задать допустимый идентификатор Key Vault Azure для функции ЦС подключаемого модуля, ознакомьтесь с форматом, указанным в сообщении об ошибке.
Kubernetes version is missing in orchestrator profile В запросе отсутствует версия Kubernetes. Поэтому она не может проверка совместимости версий. Убедитесь, что вы указали версию Kubernetes в операциях обновления надстройки Istio.
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' Вы попытались включить редакцию надстройки Istio, несовместимую с текущей версией кластера Kubernetes. Используйте команду azure CLI az aks mesh get-upgrades , чтобы узнать, какие редакции надстроек Istio доступны для текущего кластера.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' Вы используете неподдерживаемую версию Kubernetes. Обновление до поддерживаемой версии Kubernetes.
ServiceMeshProfile revision field must not be empty Вы попытались обновить надстройку Istio без указания редакции. Укажите редакцию и все другие параметры (дополнительные сведения см. в разделе Обновление дополнительной редакции).
Request exceeds maximum allowed number of revisions (%d) Вы попытались выполнить операцию обновления, несмотря на то, что уже (%d) установлены редакции. Завершите или откатите операцию обновления перед обновлением до другой редакции.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information Вы попытались получить доступ к сведениям о редакции и совместимости перед завершением или откатом текущей операции обновления. Завершите или откатите текущую операцию обновления , прежде чем получать сведения о редакции и совместимости.

Ссылки

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

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

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

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