Compartir a través de


Solución de problemas generales del complemento de malla de servicio de Istio

En este artículo se describen las estrategias generales (que usan kubectl, istioctly otras herramientas) para solucionar problemas relacionados con el complemento de malla de servicio Istio para Microsoft Azure Kubernetes Service (AKS). En este artículo también se proporciona una lista de posibles mensajes de error, motivos de repeticiones de errores y recomendaciones para resolver estos errores.

Requisitos previos

Lista de comprobación de solución de problemas: Uso de kubectl

Los siguientes pasos de solución de problemas usan varios kubectl comandos para ayudarle a depurar pods bloqueados o errores en el demonio de Istio (Istiod).

Paso 1: Obtención de registros de pods de Istiod

Para obtener los registros de pod de Istiod, ejecute el siguiente comando kubectl logs :

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

Paso 2: Rebote (eliminación) de un pod

Es posible que tenga una buena razón para reiniciar un pod. Dado que Istiod es una implementación, es seguro eliminar simplemente el pod mediante la ejecución del comando kubectl delete :

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

El pod de Istio se administra mediante una implementación. Se vuelve a crear y volver a implementar automáticamente después de eliminarlo directamente. Por lo tanto, eliminar el pod es un método alternativo para reiniciar el pod.

Nota:

Como alternativa, puede reiniciar la implementación directamente ejecutando el siguiente comando kubectl rollout restart :

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

Paso 3: Comprobación del estado de los recursos

Si Istiod no está programado o si el pod no responde, es posible que desee comprobar el estado de la implementación y los conjuntos de réplicas. Para ello, ejecute el comando kubectl get :

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

El estado del recurso actual aparece cerca del final de la salida. La salida también puede mostrar eventos asociados a su bucle de controlador.

Paso 4: Obtención de tipos de definición de recursos personalizados

Para ver los tipos de definiciones de recursos personalizados (CRD) que usa Istio, ejecute el kubectl get comando :

kubectl get crd | grep istio

Para enumerar todos los nombres de recursos basados en una CRD determinada, ejecute el siguiente kubectl get comando:

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

Paso 5: Ver la lista de pods de Istiod

Para ver la lista de pods de Istiod, ejecute el siguiente kubectl get comando:

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

Paso 6: Obtener más información sobre la configuración de Envoy

Si tiene problemas de conectividad entre pods, obtenga más información sobre la configuración de Envoy ejecutando el siguiente comando kubectl exec en el puerto de administración de 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

Paso 7: Obtener los registros de sidecar para los sidecars de origen y destino

Recupere los registros de sidecar para los sidecars de origen y destino mediante la ejecución del siguiente kubectl logs comando dos veces (la primera vez para el pod de origen y la segunda para el pod de destino):

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

Lista de comprobación de solución de problemas: Uso de istioctl

En los pasos de solución de problemas siguientes se describe cómo recopilar información y depurar el entorno de malla mediante la ejecución de varios istioctl comandos.

Todos los istioctl comandos deben ejecutarse junto con la --istioNamespace aks-istio-system marca para que apunte a la instalación del complemento de AKS de Istio.

Advertencia

Algunos istioctl comandos envían solicitudes a todos los sidecars.

Nota:

Antes de empezar, observe que la mayoría istioctl de los comandos requieren que conozca la revisión del plano de control. Puede obtener esta información del sufijo de las implementaciones de Istiod o los pods, o bien puede ejecutar el siguiente comando istioctl tag list :

istioctl tag list

Paso 1: Asegurarse de que Istio está instalado correctamente

Para comprobar que tiene una instalación correcta del complemento istio, ejecute el siguiente comando istioctl verify-install :

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

Paso 2: Análisis de espacios de nombres

Para analizar todos los espacios de nombres o para analizar un espacio de nombres específico, ejecute el siguiente comando istioctl analyze :

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

Paso 3: Obtener el estado del proxy

Para recuperar el estado del proxy, ejecute el siguiente comando istioctl proxy-status :

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

Paso 4: Descargar la configuración del proxy

Para descargar la configuración del proxy, ejecute el siguiente comando istioctl proxy-config all :

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

Paso 5: Comprobar el estado de inyección

Para comprobar el estado de inyección del recurso, ejecute el siguiente comando istioctl experimental check-inject :

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

Paso 6: Obtener un informe de errores completo

Un informe de errores completo contiene la información más detallada. Sin embargo, la ejecución de este informe puede llevar mucho tiempo en un clúster grande porque incluye todos los pods. Puede limitar el informe de errores a determinados espacios de nombres. También puede limitar el informe a determinadas implementaciones, pods o selectores de etiquetas.

Para recuperar un informe de errores, ejecute el siguiente comando istioctl bug-report :

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

Lista de comprobación de solución de problemas: Varios problemas

Paso 1: Corregir problemas de uso de recursos

Si encuentra un consumo elevado de memoria en Envoy, compruebe de nuevo la configuración de Envoy para obtener la recopilación de datos de estadísticas. Si va a personalizar las métricas de Istio a través de MeshConfig, recuerde que ciertas métricas pueden tener una cardinalidad alta y, por lo tanto, crear una superficie de memoria mayor. Otros campos de MeshConfig, como la simultaneidad, afectan al uso de la CPU y deben configurarse cuidadosamente.

De forma predeterminada, Istio agrega información sobre todos los servicios que están en el clúster a cada configuración de Envoy. El sidecar puede limitar el ámbito de esta adición a las cargas de trabajo que solo están dentro de espacios de nombres específicos. Para obtener más información, consulte Watch out for this Istio proxy sidecar memory pitfall ( Cuidado con este problema de memoria sidecar del proxy de Istio).

Por ejemplo, la siguiente Sidecar definición en el aks-istio-system espacio de nombres restringe la configuración de Envoy para todos los servidores proxy de la malla a aks-istio-system y otras cargas de trabajo dentro del mismo espacio de nombres que esa aplicación específica:

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/*"

También puede intentar usar la opción DiscoverySelectors de Istio en MeshConfig. La discoverySelectors opción contiene una matriz de selectores de Kubernetes y puede restringir el reconocimiento de Istiod a espacios de nombres específicos (en lugar de todos los espacios de nombres del clúster). Para más información, consulte Uso de selectores de detección para configurar espacios de nombres para la malla de servicio de Istio.

Paso 2: Corregir problemas de configuración incorrecta de tráfico y seguridad

Para solucionar problemas comunes de administración del tráfico y configuración incorrecta de seguridad que encuentran los usuarios de Istio con frecuencia, consulte Problemas de administración del tráfico y Problemas de seguridad en el sitio web de Istio.

Para obtener vínculos a información sobre otros problemas, como la inyección de sidecar, la observabilidad y las actualizaciones, consulte Problemas comunes en el sitio de documentación de Istio.

Paso 3: Evitar la sobrecarga de CoreDNS

Los problemas relacionados con la sobrecarga de CoreDNS pueden requerir que cambie cierta configuración de DNS de Istio, como el dnsRefreshRate campo de la definición meshConfig de Istio.

Paso 4: Corregir las condiciones de carrera de pods y sidecar

Si el pod de la aplicación se inicia antes de que se inicie Envoy sidecar, es posible que la aplicación deje de responder o que se reinicie. Para obtener instrucciones sobre cómo evitar este problema, consulte Pod o contenedores comienzan con problemas de red si istio-proxy no está listo. En concreto, establecer el holdApplicationUntilProxyStarts campo MeshConfig en defaultConfig para true puede ayudar a evitar estas condiciones de carrera.

Paso 5: Configurar una entrada de servicio al usar un proxy HTTP para el tráfico saliente

Si el clúster usa un proxy HTTP para el acceso saliente a Internet, tendrá que configurar una entrada de servicio. Para más información, consulte Compatibilidad con proxy HTTP en Azure Kubernetes Service.

Mensajes de error

La tabla siguiente contiene una lista de posibles mensajes de error (para implementar el complemento, habilitar puertas de enlace de entrada y realizar actualizaciones), el motivo por el que se produjo un error y recomendaciones para resolver el error.

Error Motivo Recomendaciones
Azure service mesh is not supported in this region La característica no está disponible en la región durante la versión preliminar (está disponible en la nube pública, pero no en la nube soberana). Consulte la documentación pública sobre la característica en las regiones admitidas.
Missing service mesh mode: {} No estableció la propiedad mode en el perfil de malla de servicio de la solicitud de clúster administrada. En el campo ServiceMeshProfile de la managedCluster solicitud de API, establezca la mode propiedad Istioen .
Invalid istio ingress mode: {} Se establece un valor no válido para el modo de entrada al agregar entradas dentro del perfil de malla de servicio. Establezca el modo de entrada en la solicitud External de API en o Internal.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Intentó crear demasiadas entradas en el clúster. Cree, como máximo, una entrada externa y una entrada interna en el clúster.
Istio profile is missing even though Service Mesh mode is Istio Ha habilitado el complemento Istio sin proporcionar el perfil de Istio. Al habilitar el complemento Istio, especifique información específica del componente (puerta de enlace de entrada, CA del complemento) para el perfil de Istio y la revisión determinada.
Istio based Azure service mesh is incompatible with feature %s Intentó usar otra extensión, complemento o característica que actualmente no es compatible con el complemento Istio (por ejemplo, Open Service Mesh). Antes de habilitar el complemento Istio, deshabilite primero la otra característica y limpie todos los recursos correspondientes.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority No proporcionó todos los parámetros necesarios para la CA del complemento. Proporcione todos los parámetros necesarios para la característica de entidad de certificación (CA) del complemento (para obtener más información, consulte Configuración del complemento de malla de servicio basado en Istio con certificados de ENTIDAD de certificación del complemento).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature No habilitó el complemento Secretos de AKS-Store CSI Driver antes de usar la CA del complemento. Configure Azure Key Vault antes de usar la característica de entidad de certificación del complemento.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' Ha usado un identificador de recurso de AKS no válido. Consulte el formato mencionado en el mensaje de error para establecer un identificador válido de Azure Key Vault para la característica de ca del complemento.
Kubernetes version is missing in orchestrator profile Falta la solicitud de la versión de Kubernetes. Por lo tanto, no puede realizar una comprobación de compatibilidad de versiones. Asegúrese de proporcionar la versión de Kubernetes en las operaciones de actualización de complementos de 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' Intentó habilitar una revisión de complemento de Istio que no es compatible con la versión actual del clúster de Kubernetes. Use el comando az aks mesh get-upgrades de la CLI de Azure para saber qué revisiones de complemento de Istio están disponibles para el clúster actual.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' Está usando una versión de Kubernetes no compatible. Actualice a una versión de Kubernetes compatible.
ServiceMeshProfile revision field must not be empty Intentó actualizar el complemento istio sin especificar una revisión. Especifique la revisión y todos los demás parámetros (para obtener más información, consulte Actualización de revisión secundaria).
Request exceeds maximum allowed number of revisions (%d) Intentó realizar una operación de actualización aunque ya (%d) hay revisiones instaladas. Complete o revierte la operación de actualización antes de actualizar a otra revisión.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information Intentó acceder a la información de revisión y compatibilidad antes de completar o revertir la operación de actualización actual. Complete o revierte la operación de actualización actual antes de recuperar la información de revisión y compatibilidad.

Referencias

Aviso de declinación de responsabilidades sobre la información de terceros

Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.