Compartir a través de


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

En este artículo se describen estrategias generales (que usan kubectl, istioctly otras herramientas) para solucionar problemas relacionados con el complemento istio service mesh para Microsoft Azure Kubernetes Service (AKS). En este artículo también se proporciona una lista de posibles mensajes de error, motivos para las 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: Obtener registros de pod de Istiod

Para obtener los registros del pod 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 el pod ejecutando el comando kubectl delete :

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

El pod de Istio se administra mediante una implementación, por lo que el pod se vuelve a crear y volver a implementar automáticamente después de eliminar directamente el pod de Istio. 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: Comprobar el estado de los recursos

Si Istiod no está programado o si el pod no responde, es posible que quiera 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 actual del recurso 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

A continuación, ejecute el siguiente kubectl get comando para enumerar todos los nombres de recursos basados en un CRD determinado:

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

Paso 5: Ver la lista de pods istiod

Para ver la lista de pods 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: Obtención de los registros sidecar para los sidecars de origen y destino

Recupere los registros sidecar para los sidecars de origen y de destino ejecutando el 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 siguientes pasos de solución de problemas se describe cómo recopilar información y depurar el entorno de malla mediante la ejecución de varios istioctl comandos.

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 desde el sufijo de las implementaciones de Istiod o los pods, o bien puede ejecutar el siguiente comando istioctl tag list :

istioctl tag list

Paso 1: Asegúrese 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: Analizar 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

Nota:

En lugar de usar la all variante del istioctl proxy-config comando, puede usar una de las siguientes variantes:

Paso 5: Comprobar el estado de la 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, también 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: problemas varios

Paso 1: Corrección de problemas de uso de recursos

Si encuentra un consumo elevado de memoria en Envoy, compruebe la configuración de Envoy para 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 mayor superficie de memoria. Otros campos de MeshConfig, como la simultaneidad, afectan al uso de CPU y deben configurarse cuidadosamente.

De forma predeterminada, Istio agrega información sobre todos los servicios del clúster a cada configuración de Envoy. Sidecar solo puede limitar el ámbito de esta adición a las cargas de trabajo dentro de espacios de nombres específicos. Para obtener más información, vea Cuidado con este problema de memoria sidecar de 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 Istio discoverySelectors 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 a todos los espacios de nombres del clúster). Para obtener más información, consulte Uso de selectores de detección para configurar espacios de nombres para la malla del servicio Istio.

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

Para solucionar problemas comunes de administración del tráfico y errores de configuración de seguridad que los usuarios de Istio encuentran 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 la discusió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 de Istio MeshConfig.

Paso 4: Corregir condiciones de carrera de pod y sidecar

Si el pod de la aplicación se inicia antes de que se inicie el sidecar de Envoy, 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 containers start with network issues if istio-proxy is En concreto, establecer el holdApplicationUntilProxyStarts campo MeshConfig en truedefaultConfig puede ayudar a evitar estas condiciones de carrera.

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 Reason 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 del clúster administrado. 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 la entrada dentro del perfil de malla de servicio. Establezca el modo de entrada en la solicitud de API en External o Internal.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Intentó crear demasiadas entradas en el clúster. Create, como máximo, una entrada externa y otra 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 de 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 CA de complemento).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature No ha habilitado el complemento de controlador CSI de AKS Secrets-Store antes de usar la CA del complemento. Configure Azure Key Vault antes de usar la característica de CA 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 que se menciona en el mensaje de error para establecer un identificador de azure Key Vault válido para la característica de CA del complemento.
Kubernetes version is missing in orchestrator profile Falta la versión de Kubernetes en la solicitud. 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 del complemento 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 del complemento 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 complementos 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' Usa una versión de Kubernetes no admitida. Actualice a una versión compatible de Kubernetes.
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) haya revisiones instaladas. Complete o revierta 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 revierta 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.