Общие сведения об устранении неполадок надстройки сетки службы 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 является альтернативным методом перезапуска модуля 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
команды можно использовать один из следующих вариантов:
- istioctl proxy-config ecds (служба обнаружения конфигурации расширения)
- начальная загрузка istioctl proxy-config
- Кластер istioctl proxy-config
- конечная точка istioctl proxy-config
- Прослушиватель конфигурации istioctl proxy-config
- Журнал конфигурации istioctl proxy-config
- Маршрут istioctl proxy-config
- секрет конфигурации 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 |
Вы попытались получить доступ к сведениям о редакции и совместимости перед завершением или откатом текущей операции обновления. | Завершите или откатите текущую операцию обновления перед получением сведений о редакции и совместимости. |
Ссылки
Общие советы по отладке Istio см. в статьях средств диагностики Istio
Устранение неполадок с надстройкой сетки сетки Istio в MeshConfig
Устранение неполадок при устранении неполадок шлюза ingress в сетке служб Istio
Устранение неполадок при обновлении дополнительных исправлений в сетке служб Istio
Устранение неполадок с сертификатом ЦС для надстройки в сетке службы Istio
Заявление об отказе от ответственности за сведения о продуктах сторонних производителей
В этой статье упомянуты программные продукты независимых производителей. Корпорация Microsoft не дает никаких гарантий, подразумеваемых и прочих, относительно производительности и надежности этих продуктов.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.