Общие сведения об устранении неполадок надстройки сетки службы Istio
В этой статье рассматриваются общие стратегии (которые используют kubectl
, istioctl
и другие средства) для устранения неполадок, связанных с надстройкой сетки службы Istio для Microsoft Служба Azure Kubernetes (AKS). В этой статье также приведен список возможных сообщений об ошибках, причины возникновения ошибок и рекомендации по их устранению.
Предварительные условия
Средство 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
Примечание.
Вместо all
варианта istioctl proxy-config
команды можно использовать один из следующих вариантов:
- istioctl proxy-config ecds (служба обнаружения конфигурации расширений)
- начальная загрузка прокси-конфигурации istioctl
- Кластер proxy-config istioctl
- Конечная точка прокси-конфигурации istioctl
- Прослушиватель прокси-конфигурации istioctl
- Журнал конфигурации прокси-сервера istioctl
- Маршрут прокси-конфигурации istioctl
- Istioctl proxy-config secret
Шаг 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 в defaultConfig
true
значение может помочь предотвратить эти условия гонки.
Сообщения об ошибках
В следующей таблице приведен список возможных сообщений об ошибках (для развертывания надстройки, включения входящих шлюзов и выполнения обновлений), причины возникновения ошибки и рекомендации по ее устранению.
Error | Reason | Рекомендации |
---|---|---|
Azure service mesh is not supported in this region |
Эта функция недоступна в регионе во время предварительной версии (она доступна в общедоступном облаке, но не в национальном облаке). | См. общедоступную документацию по этой функции в поддерживаемых регионах. |
Missing service mesh mode: {} |
Вы не задали свойство mode в профиле сетки службы запроса управляемого кластера. | В поле managedCluster ServiceMeshProfile запроса API задайте для свойства значение mode Istio . |
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 |
Вы попытались получить доступ к сведениям о редакции и совместимости перед завершением или откатом текущей операции обновления. | Завершите или откатите текущую операцию обновления , прежде чем получать сведения о редакции и совместимости. |
Ссылки
Общие советы по отладке Istio см. в статье Средства диагностики Istio.
Устранение неполадок с надстройкой сетки службы Istio MeshConfig
Устранение неполадок с надстройкой входящего шлюза Istio service mesh
Устранение неполадок при обновлении дополнительных исправлений надстройки сетки службы Istio
Устранение неполадок с сертификатами ЦС надстройки для подключения к сети службы Istio
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Майкрософт не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.