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


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

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

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

Контрольный список устранения неполадок: использование 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 является альтернативным методом перезапуска модуля pod.

Примечание.

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

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

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

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

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:

istioctl tag list

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

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

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

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

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

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 :

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

Примечание.

Вместо использования all варианта istioctl proxy-config команды можно использовать один из следующих вариантов:

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

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

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. Боковая машина может ограничить область этого дополнения к рабочим нагрузкам только в определенных пространствах имен. Дополнительные сведения см. в статье "Следите за этой ловушкой памяти прокси-автомобиля Istio".

Например, следующее Sidecar определение в пространстве имен ограничивает конфигурацию Envoy для всех прокси-серверов в aks-istio-system сетке 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 и бокового автомобиля

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

Шаг 5. Настройка записи службы при использовании HTTP-прокси для исходящего трафика

Если в кластере используется HTTP-прокси для исходящего доступа к Интернету, необходимо настроить запись службы. Дополнительные сведения см. в разделе поддержки прокси-сервера HTTP в Служба Azure Kubernetes.

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

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

Ошибка Причина Рекомендации
Azure service mesh is not supported in this region Эта функция недоступна в регионе во время предварительной версии (она доступна в общедоступном облаке, но не в национальном облаке). См. общедоступную документацию о функции в поддерживаемых регионах.
Missing service mesh mode: {} Не было задано свойство режима в профиле сетки служб для запроса управляемого кластера. В поле managedCluster ServiceMeshProfile запроса API задайте mode для свойства значение Istio.
Invalid istio ingress mode: {} Недопустимое значение для режима входящего трафика при добавлении входящего трафика в профиль сетки службы. Задайте для режима входящего трафика в запросе API значение External или Internal.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Вы попытались создать слишком много входящего трафика в кластере. Создайте, по крайней мере, один внешний входящий трафик и один внутренний входящий трафик в кластере.
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 Вы не активируете надстройку CSI Driver AKS Secret-Store, прежде чем использовать подключаемый ЦС. Настройте 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. Просмотрите формат, упомянутый в сообщении об ошибке, чтобы задать допустимый идентификатор Azure Key Vault для функции подключаемого ЦС.
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. Используйте команду az aks mesh get-upgrades Azure CLI, чтобы узнать, какие редакции надстройки 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 Вы попытались получить доступ к сведениям о редакции и совместимости перед завершением или откатом текущей операции обновления. Завершите или откатите текущую операцию обновления перед получением сведений о редакции и совместимости.

Ссылки

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

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

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

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