Solución de problemas general del complemento de malla del servicio Istio
En este artículo se describen estrategias generales (que usan kubectl
, istioctl
y 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
La herramienta kubectl de Kubernetes o una herramienta similar para conectarse al clúster
Nota: Para instalar kubectl mediante la CLI de Azure, ejecute el comando az aks install-cli .
Herramienta de línea de comandos Istio istioctl
Herramienta dirección URL de cliente (cURL)
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:
- ecds istioctl proxy-config (servicio de detección de configuración de extensiones)
- istioctl proxy-config bootstrap
- istioctl proxy-config cluster
- istioctl proxy-config endpoint
- istioctl proxy-config listener
- istioctl proxy-config log
- istioctl proxy-config route
- istioctl proxy-config secret
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 true
defaultConfig
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 Istio en . |
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
Para obtener sugerencias generales sobre la depuración de Istio, consulte Herramientas de diagnóstico de Istio.
Solución de problemas del complemento MeshConfig de Istio Service Mesh
Solución de problemas de puerta de enlace de entrada del complemento istio service mesh
Solución de problemas de actualización de revisión secundaria del complemento istio service mesh
Solución de problemas de certificados de CA del complemento de malla de servicio istio
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.